serverless 에 api 를 배포할 때, requirements.txt 파일에 우리가 로컬에서 설치한 파이썬 파일의 이름을 적어줘야 한다.
근데 pandas 와 numpy 를 적고 실행을 돌리면 Internal server error 가 발생한다.

그 이유는 pandas, numpy 의 용량이 너무 크기때문이다.
따라서, pandas 와 numpy 라이브러리를 Zip 파일로 만들어서 lambda layers 로 만들 것이다.

numpy, pandas 라이브러리를 lambda layer 로 만드는 방법이다.
1. putty 로 ec2 에 접속한다.
2. 파이썬이 없으면, 먼저 아나콘다 설치
3. 람다의 환경이 파이썬 3.9 이므로, ec2 환경에 새로운 가상환경을 만든다
가상환경명은 lambda39 로 하였다.
conda create -n lambda39 python=3.9
4. 만든 가상환경으로 이동한다
5. 디렉토리를 하나 만든다.
- 이름은 python 으로 해야한다.
$ mkdir python
6. python 디렉토리로 이동
$ cd python
7. pypi 홈페이지에서 아마존 리눅스에 설치할 넘파이와 판다스 파일을 찾는다.
PyPI · The Python Package Index
The Python Package Index (PyPI) is a repository of software for the Python programming language.
pypi.org
8. numpy, pandas, pytz 파일을 찾아서 ec2에 다운로드 한다.
python 이 3.9 버전이기 때문에 라이브러리 파일들도 전부 3.9 버전으로 다운로드 해야한다.
ec2 는 리눅스 서버이기 때문에 리눅스 버전으로 찾아서 링크를 복사한다.
다운로드 할 때는 wget 명령어를 이용하면 된다,



$ wget 파일 url
9. unzip 명령어를 이용하여서, 위의 3개 파일을 각각 압축을 푼다
$ unzip 파일링크
10. 필요없는 원본 파일 (.whl) 은 삭제해준다.
$ rm -rf 파일명(폴더명)
( 참고, 파일명에 단어가 포함된 파일들을 모두 처리하고 싶을 때
$ rm -rf *.whl )
11. 상위 경로로 이동한다 (python 폴더가 보이는 경로)
$ cd..
$ ls -al
12. python 폴더를 압축한다.
$ zip -r 압축파일명.zip 압축할디렉토리명
$ zip -r numpy_pandas_layer_39.zip python
13. 파일질라를 이용해서, 위의 파일을 내 컴퓨터로 다운로드 한다.
더블클릭하면 파일이 다운로드 된다.

레이어 생성 부분
14. 람다 레이어 생성을 위해서, aws 콘솔에 접속한다.
15. 위의 파일을 S3 업로드 하기 위해서, 먼저 aws 의 S3 로 가서 버킷을 만든다
( --> 만약 파일의 용량이 크지 않다면 이 S3에 버킷을 만드는 과정은 생략하고 17번으로 바로 이동하면 된다
파일의 용량이 클 경우에만 S3에 버킷을 생성하여서 업로드 하면 된다.)

16. S3의 위 버킷에, 앞에서 만든 zip 파일을 업로드 한다.

17. aws 콘솔의 lambda 로 이동하여서 계층 생성 항목을 선택한다.

18. 계층 생성은 아래와같이 셋팅을 한다
(S3 URL, X86_64, Python3.9)

Amazon S3 링크 URL 은 s3 페이지로 들어가서 객체 URL을 넣어준다.

19. 계층을 추가하고자 하는 앱의 lambda 로 이동하여, 계층을 추가한다.
ApiLambdaFunction 을 클릭한다.

Layers 를 클릭한다.

계층의 Add a Layer 를 선택한다.

사용자 지정 계층을 선택한 후, 방금 막 만든 레이어를 선택하고 추가를 눌러주면 된다.

20. 이제 vs code 에서 , requirements.txt 에 적은, numpy 와 pandas 라이브러리는 빼야한다.
-> 이미 레이어에서 설치해서 제공하니까
pandas 와 numpy 를 지우고 sls deploy 를 하면 서버가 잘 작동될 것이다.

'AWS' 카테고리의 다른 글
| AWS Lambda 에서 Timeout 시간 늘리기 (0) | 2023.01.17 |
|---|---|
| AWS S3 에 이미지 업로드하기 (0) | 2023.01.12 |
| Flask API 를 lambda ( 서버리스 ) 에 배포하는 방법 (0) | 2023.01.11 |
| [Serverless] AWS 에서 IAM 을 이용하여 API 배포하기 (0) | 2023.01.10 |
| AWS EC2 - 리눅스(linux) 운영체제에서 한글 사용하기 (한글 깨짐) (0) | 2022.12.22 |