AWS Lambda 에서 Python 을 쓰면서, AWS 서버에 설치되지 않은 패키지를 사용할 때에는 함수에 포함해서 업로드를 해줘야한다.
pip -t 옵션으로 패키지 다운로드 경로를 지정해서 람다 함수 루트에 패키지를 다운받아주면 되지만,
이 경우 디렉토리가 지저분해짐.
해결책은 당연하게도, 임의의 폴더를 만들어서 패키지를 다운받고, 해당 경로를 환경변수에 추가해주면 된다.
mkdir packages
# python3 -m pip install [package name] -t ./packages/
python3 -m pip install -r requirements.txt -t ./packages/
이 후 Python 핸들러 함수에서 환경변수 추가하기 위한 코드를 파일 최상단에 삽입
import sys, os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'packages'))
이렇게 하고 packages 폴더는 잊어버리거나 .gitignore 등에 추가해주면 된다.
+ 배포 스크립트
AWS Lambda 로 업로드 할때, 난 아래와 같은 스크립트를 만들어서 사용함. (2zip.sh)
동작 방식은
1. 몇몇 예외 파일을 제외하고 압축파일 생성
2. aws-cli 를 이용하여 업로드 후
3. 해당 압축파일 삭제
#!/bin/bash
LAMBDA_FUNC="Lambda 함수 이름"
zip -rq lambda.zip . -x *__pycache__* 2zip.sh env.sh requirements.txt CONFIG
aws lambda update-function-code --function-name $LAMBDA_FUNC --zip-file fileb://lambda.zip > /dev/null 2>&1
rm lambda.zip
-x 옵션의 인자 등은 상황과 필요에 따라 적절하게 수정을 해주자.
'Linux, Server, Web' 카테고리의 다른 글
OpenSSL X.509 인증서 정리 (HTTPS, TLS) (0) | 2019.12.19 |
---|---|
AWS EC2 부팅시 Route53 레코드 자동 설정하기 (2) | 2019.09.23 |
OpenSSL 로 OpenVPN 용 인증서 생성하기 (0) | 2019.03.08 |
[OpenVPN] ID / PW 로 인증하기 (1) | 2019.03.06 |
Ubuntu 18.04 NIS 문제 해결 (0) | 2019.02.18 |