개발/백엔드

server - aws lambda layer 추가

웅'jk 2023. 1. 11. 17:43

lambda에 너무 많은 패키지를 설치하도록 하면 작동이 정상적으로 되지 않습니다.

 

따라서 레이어 에 따로 설치를 하도록 하겠습니다.

 

1. 먼저 설치할 패키지를 내 lambda와 동일한 환경을 찾습니다.

 - 패키지 다운로드는 pypi 에서 가능하며 반드시 여러분의 환경에 맞도록 합니다.

https://pypi.org/

 ( aws lambda 는 아마존 리눅스 이기 때문에 같은 환경인 ec2 에서 진행, manylinux_x86으로 다운받습니다. ) 

 

2. ec2 에서 python폴더를 생성하고  wget으로 파일을 다운로드합니다.

- 폴더 생성은 mkdir python 

- 리눅스이기때문에 주소를 복사하셔서 wget [주소] 로 다운받습니다.

3. 다운받은 파일을 전부 압축을 해제하고 마지막에 다운로드 받았던 파일은 삭제합니다.

- unzip 다운로드받은파일.whl 

- rm -rf *.whl (* 대신에 파일명 하나씩 입력도 가능합니다.)

4. 이제 이 폴더를 통채로 압축합니다.

- cd .. 으로 최상위폴더로 갑니다.

- zip 파일명.zip python 으로 압축파일을 만들어줍니다.

 

5. 이 파일을 내 PC로 옮깁니다. ( 저는 filezilla 를 이용하겠습니다.)

 

6. 다운로드 받은 이파일을 AWS s3 에 먼저 업로드를 합니다.

버킷을 새로 만듭니다.

만든 버킷에 파일을 추가합니다.

추가할때는 반드시 python3.9 를 선택하셔야합니다.

 

7. AWS 에 lambda 의 계층으로 들어가 계층을 추가합니다.

여기서 이름,설명, s3에서 업로드를 선택하시고 x86_64를 선택합니다.

그리고 실행시간 항목에 python3.9 런타임을 반드시 설정하셔야 합니다.

( 지금은 python으로 작업중이기 때문입니다. )

 

8. 계층을 생성하셨으면 내 lambda 서버에 layer 추가를 해줍니다.

사용자 지정 계층을 선택하시고 만들어 둔 레이어를 선택합니다.

 

9. 비쥬얼 코드에서 credentials.txt 에서 내가 다운로드 받은 패키지를 지우고 다시 배포 합니다.

 

10. 다시 배포된 서버를 포스트맨으로 테스트합니다.

 

*** 수업중 메모장

1. pandas 의 부재 (pandas , numpy 설치하기)

2. lambda 의 용량 문제
 - 50mb 제한이지만 pandas,numpy가 이미 50mb를 넘는다.

해결방안 
1. putty ec2 접속

2. 파이썬이없으면 아나콘다설치

3. 람다의 환경이 파이썬3.9이므로 ec2 도 3.9로 만든다.
conda create -n lambda39 python=3.9

4. 가상환경으로 이동 

5. 디렉토리를 1개 생성 이름은 python 으로 !!
   mkdir python

6. 생성한 디렉토리로 이동
   cd python

7. amazone linux 에 설치할 넘파이와 판다스 파일을 찾는다.
   https://pypi.org 에서 찾는다.
   
8. numpy,pandas,pytz 를 ec2 에 wget으로 파일을 다운로드 받는다

9. unzip 명령어로 압축을 푼다.

10. 필요없는 원본 .whl 파일 제거
    rm -rf 파일명(폴더명)
    rm -rf *.whl (모든whl 확장자 삭제)

11. 상위 경로로 이동 (python 폴더가 보이는 경로)

12. python 폴더를 압축한다.
    zip -r 압축파일명 압축할디렉토리명

13. 압축된 파일을 내 pc로 다운받습니다.

14. 람다 레이어 생성을 위해서 , aws 콘솔에 접속한다.

15. aws s3 에 위 파일을 업로드하기 위한 버킷을 생성한다.

16. 생성한 버킷에 파일을 업로드한다.

17. lambda 에서 계층을 생성하여 , 내 서버에 추가한다.
    ( s3 url, x86_64 , python 3.9)

18. layer에서 설치해줬기 때문에 비쥬얼 소스코드의 requirements 에서 pandas 와 numpy 를 지워준다.