AWS Lambda Layers로 외부 라이브러리 사용하기
- 7월 19일
- 2분 분량
Lambda 레이어는 Lambda 함수 코드에서 호출하는 라이브러리를 공통화할 수 있는 구조입니다. 개별적으로 패키지화한 라이브러리를, 서로 다른 Lambda 함수에서 공통으로 이용할 수 있습니다. Lambda는 호출될 때 함수와 함께 Lambda 레이어를 읽어 들입니다.
Lambda 레이어의 편리한 점
여러 함수에 걸쳐 코드를 재사용한다
공통 기능을 레이어로 분리함으로써, 여러 Lambda 함수 간에 같은 라이브러리를 공유하기 쉬워집니다. 이로써 같은 코드를 여기저기 복제하거나, 그 업데이트와 디버깅을 개별적으로 해야 하는 문제가 없어집니다.
지금까지 코드 복제를 피하기 위한 해결책은, 공통 기능을 분리된 Lambda 함수로 구현하는 것이었습니다. 경우에 따라서는 그것이 이상적인 해결책이 될 수도 있습니다. 하지만 그 구현 방식의 문제는, 함수에서 함수로 추가 호출이 필요하다는 점이었습니다. 경우에 따라서는 함수를 병렬로 실행할 필요가 있어, 함수 실행 비용이나 디버깅 수고가 늘어났습니다.
레이어를 사용하면, 추가 함수 호출 없이 공통 라이브러리를 공유할 수 있습니다.
함수의 패키지 코드를 작게 유지한다
함수마다 대규모 코드를 쓰면, 애플리케이션의 유지보수나 테스트가 더 어려워질 수 있습니다. 배포도 느려질 수 있습니다.
애플리케이션의 패키지를 작게 유지하기 위해 레이어를 사용하면, 두 개 이상의 함수에서 공통으로 사용되는 기능을 분리할 수 있습니다. 같은 코드를 여러 번 배포하는 대신, 레이어는 한 번만 배포됩니다.
메인 기능의 관리와 배포를 단순화한다
함수의 패키지를 작게 유지하면 배포 시간이 단축됩니다. 대규모 의존성을 사용하는 경우, 메인 함수의 코드는 수 메가바이트뿐이어도 패키지 전체로는 최대 50MB가 되기도 합니다.
이런 큰 의존성은 좀처럼 바뀌지 않으므로, 그것들을 레이어로 패키지화해 한 번만 배포하면, 메인 함수가 바뀔 때마다 배포할 필요가 없어집니다.
Lambda Layer 구현 방법
공식 정보는 아래 페이지에 기재되어 있습니다.
이를 바탕으로, 제가 실시한 내용만 간결하게 정리합니다.
Layer의 코드는 /opt 아래에 전개되며, /opt 아래의 디렉터리는 몇 개가 이미 PATH가 통해 있습니다.
Python 라이브러리를 Layer로 만들기 위해 /opt/python에 전개되도록 합니다. 그러면 알아서 읽어 들여 줍니다.
Layer로 만들 코드의 작성과 zip화
Layer로 만들 코드를 다음과 같이 씁니다.
python/layer.py
def test():
return 'Layer 호출 성공!'이 코드를 zip으로 만듭니다
$ zip -r layer.zip ./python
레이어 생성, ZIP 업로드
Lambda 콘솔에서 메뉴의 레이어를 선택하고, 오른쪽의 「레이어 생성」 버튼을 누릅니다.

・이름: 레이어의 이름. 「sample-layer」로 했습니다
・설명: 옵션이므로 쓰지 않아도 OK
・Zip 파일: 앞서 만든 ZIP 파일을 업로드
・호환되는 아키텍처: 이번에는 「x86_64」를 사용
・호환되는 런타임: 실행할 런타임. 이번에는 「Python3.10」 「Python3.9」를 선택
・라이선스 옵션: 이번에는 필요 없으므로 미입력
[생성] 버튼을 누르면 레이어 생성 완료
Lambda 함수에 Layer 추가하기

레이어를 쓰고 싶은 Lambda 함수에서 Layer를 선택하고, 「레이어 추가」를 누릅니다.

이번에는 직접 만든 레이어를 함수에 추가하므로 레이어 소스는 「커스텀 레이어」를 선택하고, 커스텀 레이어 중에서 추가할 레이어를 선택합니다.
레이어를 추가할 대상 Lambda 함수의 런타임에 따라, 선택 가능한 레이어가 달라집니다.
버전이 있으면 버전을 선택하고 「추가」 버튼을 누릅니다.
Lambda 함수에서 Layer 호출하기
만든 레이어는 Python의 import로 호출할 수 있습니다.
sample-layer.py
import layer
def lambda_handler(event,context):
print('Lambda 실행!')
return layer.test()
sample-layer.py를 실행하면
Lambda 실행!
실행 결과:
Layer 호출 성공!
Lambda Layer를 시험해 본 흐름을 정리했습니다. 비슷한 함수를 잔뜩 만들어 버리지 않도록, Layer를 잘 활용할 수 있으면 좋겠습니다.



댓글