AWS

AWS Lambda와 Layers

cwchoiit 2024. 3. 4. 11:22
728x90
반응형
SMALL
728x90
SMALL

 

Lambda의 Layers

Lambda에서 Layer라는 개념이 있다. 이 Layer는 어떤 기능을 하고 왜 있는지 알아보고 직접 적용해보자.

 

Lambda는 너무나도 독립적이기 때문에 생기는 문제가 있다. 예를 들면, 정확히 동일한 패키지와 환경을 사용하더라도 각각의 람다 함수는 독립적으로 해당 환경을 구성해줘야한다. 단적인 예시로 20개의 람다 함수가 있고 그 20개의 람다 함수가 모두 같은 패키지를 사용할때도 각각의 람다함수마다 같은 패키지를 업로드해줘야한다. 이건 효율성도 떨어지지만 비용 측면에서도 상당히 불리하다. 이를 해결하기 위해 어떤 기반으로된 환경위에 람다 함수를 올리게 하는 Layer가 존재한다. Layer는 말 그대로 람다 함수가 올라갈 자리를 말하는것이다. 기본적으로 필요한 패키지나 환경에 대한 설정을 Layer에 깔아둔 후 그 Layer 위에 람다함수를 올리는 것이다.

 

그래서 이 Layer를 만드는 것부터 시작해보자.

 

Layer 생성하기

AWS Console에서 "Lambda"를 검색해서 나오는 서비스를 클릭한다.

 

좌측 사이드바에서 'Layers'를 클릭한 후 나오는 메인 화면에서 우측 상단 Create layer 버튼 클릭.

 

여기서 업로드 할 패키지가 있어야 하는데 이 패키지를 업로드할 때 Zip 파일로 업로드해 볼 예정이다. 그래서 우선 패키지를 내려받아야한다. "requests"라는 파이썬 패키지를 업로드해 볼 것이고 이 패키지를 내려받을 경로 하나를 설정해야 하는데 그 경로가 중요하다. 왜냐하면 경로에 맞는 곳에서 이 Lambda가 패키지를 내려받기 때문에 경로 설정이 상당히 중요한데 이 경로를 당연히 AWS 문서에서 잘 알려준다.

나는 위 문서에 따라 "python/lib/python3.12/site-packages" 이러한 경로 내부에 requests를 내려받기 위해 아래처럼 입력했다.

pip install requests -t .

 

"-t" 옵션을 부여해서 특정 경로에 패키지를 내려받겠다고 선언해주면 해당 경로에 requests 패키지를 사용하기 위해 필요한 모든 dependencies가 내려받아진다.

 

그런 다음 해당 경로 전체를 .zip 파일로 만들어준다.

zip -r python.zip python

 

 이렇게 zip 파일로 필요한 패키지를 묶은 다음 다시 Layer 생성화면으로 돌아가보자.

 

설정 부분은 다음과 같다.

- Name: cwchoiit-python3-layer

- Description: requests package layer

- Upload a .zip file

- Runtimes: Python 3.12

'Create' 버튼을 클릭해서 Layer를 생성하자. 그럼 Layers 리스트에 만든 Layer가 잘 노출된다.

 

이제 기존에 람다함수가 없다고 가정하고 람다함수를 새로 생성해보자. 설정 부분은 다음과 같다. 런타임을 위에 만든 Layer와 잘 맞춰주자.

 

람다 함수를 만들고 나면 만들어진 람다 함수 내부로 들어가서 하단으로 스크롤을 내려보면 다음과 같이 Layers 섹션이 있다. 여기에 "Add a layer" 버튼 클릭

 

Layer를 추가하는 화면이다. 설정 부분은 다음과 같다.

- Layer source: Custom layers

- Custom layers: 방금 만든 layer

- Version: 원하는 버전 선택 (지금은 1밖에 없을 것)

 

Layer가 람다 함수에 잘 추가가 되면 상단에 다이어그램에 다음과 같이 Layer가 0에서 1로 적용된 수가 바뀜을 알 수 있다.

 

그럼 "requests"라는 패키지를 추가했으니까 이 패키지를 임포트할 수 있어야 한다. 임포트 한 후 테스트를 실행해보자.

 

코드에 임포트를 시키고, Deploy - Test를 수행해보자. 

다음과 같이 테스트가 정상적으로 수행되면 Layer가 잘 적용된 것이다.

728x90
반응형
LIST

'AWS' 카테고리의 다른 글

AWS Lambda와 DynamoDB를 연동해보기  (0) 2024.03.04
AWS Lambda와 Step functions  (0) 2024.03.04
AWS Lambda와 API Gateway로 Canary Release 하기  (0) 2024.03.03
AWS Lambda를 API Gateway에 등록하기  (0) 2024.03.03
AWS Lambda  (0) 2024.03.03