본문 바로가기
백엔드/Lambda

[Lambda] Lambda의 Layer(레이어, 계층)

by eyoo 2022. 6. 29.

Lambda는 50MB의 작은 용량을 가지고있다.

 

 

 

작은 용량의 한계를 해결하기 위해 AWS는 Layer (계층)를 제공한다.

# 라이브러리를 layer로 만들고 라이브러리를 실행시킬때 layer를 추가하는 방식을 사용한다.

# 이는 레이어를 활용하여 라이브러리를 재사용하기 용이하다는 것이다.

 

넘파이와 판다스 라이브러리가 들어있는 레이어를 만들어보자.

 

먼저 AWS EC2 인스턴스를 확인하고 없으면 생성한다.

 

 

참고: https://startcod.tistory.com/68

 

[Linux] EC2를 활용한 AWS 배포, 리눅스에 파이썬 다운로드, 깃 클론

이때까지는 로컬과 깃에서 스트림릿을 푸시하고 풀해줬다면 이것을 AWS의 EC2를 활용해서 배포해야 한다. 깃에서 AWS로 Streamlit을 배포하려면: 소스코드를 깃허브에 올린다. 깃허브에서 AWS로 데이

startcod.tistory.com

 

 

푸티를 통해 ec2에 접속한다.

 

 

 

파이썬 3.8 버전의 가상환경을 만든다. 

 

conda create -n lambda python=3.8

 

 

만들어진 가상환경에 접속한다.

 

conda activate lambda

 

 

python 폴더를 생성한다.

 

mkdir python

 

 

만들어진 python 폴더로 이동한다.

 

cd python

 


판다스를 설치한다.

pip install -t . pandas

 

 

ll 로 폴더를 확인하면 여러 파일들이 많이 생성된것을 확인할수있다.

 

 

 

이중에서 필요없는 파일들을 삭제한다.

 

rm -rf *.dist-info __pycache__ pandas numpy

# 아마존 리눅스의 판다스와 넘파이 라이브러리를 사용하기 위해 삭제한다.

 

 

다시 ll 로 폴더를 확인하면 필요한 파일들만 남아있는것을 확인할수있다.

 

 

 

아마존 리눅스의 넘파이와 판다스를 다운로드 한다.

 

넘파이:https://pypi.org/project/numpy/#files

 

numpy

NumPy is the fundamental package for array computing with Python.

pypi.org

 

판다스: https://pypi.org/project/pandas/#files

 

pandas

Powerful data structures for data analysis, time series, and statistics

pypi.org

# 웹에서 '38'로 검색하여 3.8버전에 맞는 파일을 찾는다.

 

 

 

위 파일들의 링크 주소를 복사한 후 wget 뒤에 입력하여 다운로드한다.

 

wget https://files.pythonhosted.org/packages/d1/55/18b00a5426ad8a89944ab93b6b29773a556dc06af8b53a29031f861009e3/pandas-1.4.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
wget https://files.pythonhosted.org/packages/03/03/9d2695dbcd168fec1e6033950f5be3fa2770d20db0cda2b36a925ecbbe09/numpy-1.23.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

 

 

다운로드 받은 두 파일들을 mv로 각각 numpy.zip과 pandas.zip로 변경한다.

# mv numpy- 까지 입력하고 탭을 눌러 파일명을 완성시킨후 numpy.zip을 입력한다.

 

변경된 파일의 압축을 푼다.

 

unzip numpy.zip

unzip pandas.zip

 

 

그 후 필요없는 파일들을 삭제한다.

 

rm -rf *.zip *.dist-info

 

상위경로로 이동하여 python 폴더를 pandas_layer.zip 으로 압축한다.

 

cd ..

zip -r pandas_layer.zip python

# 넘파이와 판다스 외에 flask에 필요한 라이브러리도 설치할수있다.

더보기

 

python 폴더에서 필요한 라이브러리 다운로드

 

pip install -t . mysql-connector-python flask-restful psycopg2-binary passlib email-validator Flask-JWT-Extended requests

 

필요없는 파일 제거

 

rm -rf *.dist-info __pycache__

 

압축파일로 만들기

 

zip -r flask_lib.zip python

-----

 

 

이제 AWS S3 페이지에서 이 zip 파일을 담을 버킷을 만든다.

 

 

 

 

ec2에 저장되어 있는 pandas-layer.zip을 파일질라로 로컬에 다운로드한다.

 

참고: https://startcod.tistory.com/73

 

[Linux] 파일을 서버로 직접 보내는 방법 FTP (File Transfer Protocol), Filezilla

서버쪽에 관련 프로그램을 설치하기 위해 푸티를 통해 서버에 접속한다. vsftpd를 설치한다. sudo yum install vsftpd 입력 로컬에서 파일질라를 다운로드한다. 다운로드 링크: https://filezilla-project.org/d..

startcod.tistory.com

 

 

 

pandas-layer.zip 을 버킷에 업로드 한 뒤 객체 URL을 복사한다.

 

 

 

AWS Lambda로 이동하여 계층을 만든다.

 

# 계층을 구성할때 AWS S3에서 파일 업로드를 하는데 복사된 객체 URL을 붙여넣는다.

# 호환 아키텍쳐는 x86_64를 선택하고 호환 런타임은 파이썬 3.8을 선택한다.

 

 

계층이 성공적으로 생성되었다.

 

 

 

이 레이어를 lambda에 적용하자.

 

AWS Lambda 에서 함수 페이지 하단에 계층이 있는데 [Add a layer]를 클릭하여 레이어를 적용할수있다,

 

 

 

사용자 지정 계층을 선택하여 앞서 만든 레이어를 선택한다.

 

# flask 레이어와 pandas레이어를 선택했다.

 

 

두개의 레이어가 적용된 것을 볼수있다.

 

 

 

 

 

 

 

댓글