반응형
AWS Lambda Layer
서버리스를 이용하여 flask restful api 배포시 requirements.txt 파일에 라이브러리를 적어주면 자동으로 AWS에서 설치한다.
하지만 자체적으로 지원하지 않는 라이브러리들이 있다. 이런 제약을 해소하기 위해 계층(Layer)를 이용하여 라이브러리를 추가한다. 만들어놓은 계층(추가 라이브러리)은 다른 애플리케이션을 배포할 때도 유용하게 사용할 수 있다.
또한, 람다는 용량 제한이 있기 때문에 용량이 많은 라이브러리는 예제와 캐시파일을 삭제하고 계층으로 사용하는 것이 용량 최적화에 효율적이다. 용량 제한은 다음과 같다.
- 람다 전체 250메가의 용량 제한
- 레이어당 50메가의 용량 제한
- 허용 가능 레이어 수는 5개
이번 포스팅에서는 AWS에서 제공하지 않는 Pandas 라이브러리를 사용하기 위해 작성하였다.
넘파이와 판다스 다운로드를 위한 url 확인
- 사용중인 운영체제와 파이썬 버전 확인
- 아래의 링크로 이동하여 자신의 환경에 맞는 파일 다운로드
- 포스팅에서는 AWS, 파이썬3.8버전 사용
- https://pypi.org/project/pandas/#files
- https://pypi.org/project/numpy/#files
- AWS, 파이썬 3.8버전 넘파이 다운로드 주소
https://files.pythonhosted.org/packages/93/6d/d63d5fb9077d3b29ae2792624b3705b8689023cae0f89f9bf72146c34b59/numpy-1.23.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- AWS, 파이썬 3.8버전 판다스 다운로드 주소
https://files.pythonhosted.org/packages/d1/55/18b00a5426ad8a89944ab93b6b29773a556dc06af8b53a29031f861009e3/pandas-1.4.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
리눅스 터미널 - 라이브러리 파일 용량 간소화
- EC2 에서 진행
- 판다스를 설치하였음에도 wget을 통해 다운받는 이유는 AWS OS에 맞는 라이브러리를 설치하여 오류를 줄이기 위함
- Lambda Layer 계층의 용량 제한 때문에 파일 용량을 간소화 하기 위하여 필요 없는 파일 삭제 진행
# 가상환경 파이썬 3.8버전으로 생성
conda create -n lambda python=3.8
conda actevate lambda
# 디렉토리 생성 후 이동
mkdir python
cd python
# 판다스 설치 후 필요없는 파일 삭제
pip install -t . pandas
rm -rf *.dist-info __pycache__ pandas numpy
# 위에서 확인한 넘파이, 판다스 다운로드
wget https://files.pythonhosted.org/packages/93/6d/d63d5fb9077d3b29ae2792624b3705b8689023cae0f89f9bf72146c34b59/numpy-1.23.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
wget https://files.pythonhosted.org/packages/d1/55/18b00a5426ad8a89944ab93b6b29773a556dc06af8b53a29031f861009e3/pandas-1.4.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
# 다운로드한 라이브러리 압축파일로 변경
mv numpy-1.23.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl numpy.zip
mv pandas-1.4.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl pandas.zip
# 라이브러리 압축해제 후 필요없는 파일 삭제
# 만약 키 입력 창이 뜨면 A 입력 (모두 덮어쓰기)
unzip numpy.zip
unzip pandas.zip
rm -rf *.zip *.dist-info
# 상위 경로로 이동하여 python 폴더 압축
cd ..
zip -r pandas_layer.zip python
FTP - 파일 업로드
- 리눅스에서 생성한 pandas_layer.zip 파일 업로드
(이 포스팅에서는 파일질라를 사용하여 업로드하였습니다.)
AWS S3 - 버킷 만들기
라이브러리를 layer로 사용하기 위한 버킷 생성
- 버킷 만들기
- 버킷 이름 설정, 애플리케이션이 배포되있는 AWS 리전 꼭 확인!
- 객체 소유권 - ACL 활성화됨
- 모든 퍼블릭 액세스 차단 : 체크 해제
- 현재 설정으로 인해 ~ : 체크
- 버킷 만들기
AWS S3 - 레이어 파일 업로드
- 레이어를 업로드 할 버킷으로 이동
- 레이어 파일 업로드
- 액세스 권한 변경 - 모든 사람(퍼블릭 액세스 읽기 허용)
권한을 변경하지 않으면 접근이 거부될 수 있다.
- 객체 URL 확인
AWS Lambda - 계층 이용하여 라이브러리 추가하기
레이어로 사용 될 계층 만들기
- 계층 - 계층 생성
- 이름 입력 (저는 이미 입력된 계층을 수정하는 화면이므로 이름입력은 따로 없습니다.)
- Amazon S3에서 파일 업로드 : 체크 후 업로드한 객체 URL 입력
- 호환 아키텍처 : x86_64
- 호환 런타임 : python 3.8 (자신의 환경에 맞는 버전)
계층 이용하여 애플리케이션에 라이브러리 추가하기
- 레이어를 적용 할 애플리케이션으로 이동
- 애플리케이션 리소스 - ApiLambdaFunction
- Layers
- [Add a layer]
(화면은 이미 계층이 추가 상태)
- 사용자 지정 계층 - 생성한 계층 이름, 버전 선택 - 추가
- 버전은 수정한 횟수를 나타냄
API - 테스트
- 영화간 상관계수(유사도)를 측정한 csv파일을 판다스로 불러와 유사도가 높은 영화를 추천해주는 시스템
- 판다스 라이브러리가 정상적으로 잘 호출된다면 결과값이 반환
- 판다스 라이브러리 정상 호출 확인, 결과값 문제 없이 반환하여 유저에게 출력
반응형