이 방법은 효율적인 방법이 아니다. 그럼에도 불구하고 내 이해를 목적으로 작성한다.
람다 함수에서 특정 라이브러리를 사용하려고 한다.
이때, import 되지 않는 라이브러리 import 오류 해결 목적으로 라이브러리를 빌드하는 과정이다.
내 오류 상황 :
- 람다 함수 실행 시, 소스코드에서 사용하는 PIL 모듈이 존재하지 않아 오류가 발생
⇒ 파이썬 기본 라이브러리와 AWS SDK(여기에서는 boto3)를 제외한 외부 라이브러리는 직접 추가해 줘야 함
=> 따라서 람다 실행환경과 동일한 환경에서 PIL 모듈을 빌드 후 람다 계층(레이어)로 등록한다.
이때 설치하는 파이썬이 사용하고자 하는 라이브러리 지원 여부 확인
나는 3.9 버전을 설치했다.
[root@ip-10-0-6-163 ec2-user]# sudo yum update -y
[root@ip-10-0-6-163 ec2-user]# sudo su
[root@ip-10-0-6-163 ec2-user]# yum install gcc bzip2-devel ncurses-devel gdbm-devel xz-devel sqlite-devel openssl-devel tk-devel uuid-devel readline-devel zlib-devel libffi-devel
[root@ip-10-0-6-163 ec2-user]# cd /home/ec2-user/
[root@ip-10-0-6-163 ec2-user]# wget https://www.python.org/ftp/python/3.9.0/Python-3.9.0.tar.xz
[root@ip-10-0-6-163 ec2-user]# ls
Python-3.9.0.tar.xz
[root@ip-10-0-6-163 ec2-user]# tar -xJf Python-3.9.0.tar.xz
[root@ip-10-0-6-163 ec2-user]# ls -l
total 18428
drwxr-xr-x 17 ec2-user ec2-user 4096 Oct 5 2020 Python-3.9.0
-rw-r--r-- 1 root root 18866140 Oct 5 2020 Python-3.9.0.tar.xz
[root@ip-10-0-6-163 Python-3.9.0]# ./configure --enable-optimizations
[root@ip-10-0-6-163 Python-3.9.0]# make altinstall
[root@ip-10-0-6-163 Python-3.9.0]# export PATH=$PATH:/usr/local/bin
[root@ip-10-0-6-163 Python-3.9.0]# pip3.9 install --upgrade pip
[root@ip-10-0-3-239 Python-3.9.0]# cd /usr/local/lib/python3.9/
[root@ip-10-0-3-239 python3.9]# pip3.9 install pillow
[root@ip-10-0-3-239 python3.9]# ls -l site-packages/
[root@ip-10-0-3-239 python3.9]# mkdir -p /home/ec2-user/lambda_layers/python/lib/python3.9/site-packages
[root@ip-10-0-3-239 python3.9]# cp -r site-packages/ /home/ec2-user/lambda_layers/python/lib/python3.9/
[root@ip-10-0-3-239 python3.9]# cd /home/ec2-user/lambda_layers
[root@ip-10-0-6-163 lambda_layers]# zip -r lambda_layers.zip *
AWS 웹 콘솔에서 S3 버킷 생성, (EC2와 동일 리전에 S3 버킷 생성. 나는 ap-northeast-2 에 생성했다.)
사용하려는 AWS 계정에 AWS 계정 권한 AmazonS3FullAccess 권한 필요 (없다면 IAM - 사용자 - 계정이름 - 권한 - 권한 추가)
AWS CLI 사용 목적으로 사용자 크리덴셜 등록
[root@ip-10-0-6-163 lambda_layers]# aws configure
AWS Access Key ID [None]: 사용자의 액세스 키
AWS Secret Access Key [None]: 사용자의 비밀 액세스 키
Default region name [None]: 발급받은 계정의 리전ID
Default output format [None]: json
[root@ip-10-0-6-163 lambda_layers]# aws s3 cp ./lambda_layers.zip s3://버킷이름
upload: ./lambda_layers.zip to s3://버킷이름/lambda_layers.zip # 버킷이 이상없이 업로드 된 것.