인프라 | CICD/AWS

[AWS/Lambda] 외부 라이브러리 import (python/paramiko)

냠냠:) 2024. 2. 13. 13:14

개요

S3에 파일이 업로드 되면 해당 객체의 Key 정보를 활용해 AI 학습서버의 스크립트를 실행시키는 부분을 담당했다.

Python의 paramiko 라이브러리를 사용하여 스크립트를 실행, 이 과정에서 필요한 외부 라이브러리를 Lambda에 추가하는 과정을 작성해보았다.

 

 

1. 외부 라이브러리 다운로드

AWS Lambda 런타임에서 외부 라이브러리를 사용하려면 로컬에서 코드/라이브러리 파일을 zip으로 압축하여 업로드해 사용한다. (처음에는 받아드리지 못했다. 진짜..? 너가 안해줘...? 이런 반응이었다.)

먼저 zip 파일로 코드/라이브러리를 압축할 때 최상위 폴더 경로는 다음 표를 참고하자

로컬에 python 폴더를 생성한 뒤, paramiko 라이브러리를 다운로드 받아주자.
다운로드 받을 코드/라이브러리는 실제 Lambda의 런타임과 호환이 되어야 한다. 플랫폼(OS) 아키텍처, 파이썬 버전 등이 맞지 않으면 에러가 난다.
그래서 해결 방법 찾아왔다...

$ mkdir python
$ cd python
$ pip3 install --platform manylinux2014_x86_64 --target . --python-version 3.12 --only-binary=:all: paramiko
  • 만약 Lambda 런타임이 arm64면 manylinux2014_aarch64로 변경해주자
  • 만약 Lambda 런타임 Python 버전이 다르다면 --python-version을 변경해주자.
$ cd ..
$ zip -r layer.zip python

 

 

2. 계층 업로드 (layer.zip)

AWS Lambda 서비스로 이동 후 "계층 생성" 버튼을 클릭해주자.

 

  • 이름은 식별하기 쉽게 paramiko-lib으로 만들어주자.
  • layer.zip을 업로드
  • 호환 아키텍처는 생략해도 좋다. (명시하면 더 좋다)

 

 

3. Lambda 생성

트리거를 생성하고 이벤트를 거는건 범위 밖이라 판단해서 생략한다.

AWS Lambda -> 함수 생성

  • 런타임 환경은 Python 3.12로 해주었다.
  • 계층 생성 시 호환 런타임을 Lambda의 런타임 환경과 동일하게 맞춰줘야 한다.

 

 

4. Lambda / 계층 연결

방금 생성한 Lambda 함수를 선택한 다음, 화면을 내리면 계층 섹션이 보인다. (Add a layer 클릭)

  • 사용자 지정 계층을 클릭
  • 2에서 업로드했던 계층 선택 (안뜨면 계층 생성에서 호환 런타임을 설정했는지 확인해보자)

 

5. paramiko import

 

Reference

AWS Lambda Docs
AWS Lambda with S3 Docs
AWS Lambda Python Docs
플랫폼/파이썬 버전 트러블 슈팅
Lambda에 외부 라이브러리 Import 하기

반응형

'인프라 | CICD > AWS' 카테고리의 다른 글

letsencrypt 무료 SSL 인증서 생성하기 (AWS/Route53)  (0) 2024.02.13