aws lambda layer 사용하기

AWS Lambda에서는 몇몇 기본 패키지 외에는 사용할 수 없다. 따라서 lambda로 복잡한 기능을 수행하기 위해서는 layer 기능을 사용한다. layer는 lambda에서 추가적인 패키지를 사용 가능하도록 하는 것이다.

설명이 복잡하지만 단순히 내가 사용할 패키지를 직접 업로드하여 layer로 만들고 lambda에서 호출해서 사용할 수 있도록 하는 것이다.

nodejs에서의 lambda layer 사용

먼저 layer 없이 node에서 패키지를 로드하여 코드를 실행해보자. 아래와 같은 mysql을 사용하는 코드를 실행한다.

실행 시 아래와 같이 패키지 로드가 실패했다는 에러 메시지가 출력된다.

이제 layer를 만들어 보자. layer를 만들기 위해서는 미리 패키지 모듈을 준비해두어야 한다. 로컬에서 npm install을 이용해 패키지를 다운로드 하고 다운로드된 패키지가 있는 node_modules 디렉토리를 nodejs/node_modules/[패키지들] 경로로 하여 zip 파일로 압축한다.

aws lambda에서 layer 생성으로 들어간다.

layer 생성 시 아래와 같이 zip 파일 업로드를 할 수 있다. 앞서 준비했던 파일을 업로드 한다. 그리고 호환 런타임을 설정한다. 호환 런타임을 내가 사용할 lambda 버전과 일치하지 않으면 layer를 선택할 때 만들었던 layer를 사용할 수가 없다.

다시 lambda 함수 설정 페이지에서 아래 쪽에 보면 layer를 설정하는 메뉴가 보인다. 해당 메뉴에서 Layer를 추가한다.

layer 추가 버튼을 누르면 아래와 같이 ‘사용자 지정 계층’을 선택하고 내가 만든 layer를 선택할 수 있다.

layer 설정 후 처음 실행 했던 코드를 다시 실행하면 정상 실행 되는 걸 확인 할 수 있다.

python에서의 layer 사용

python에서의 layer 사용은 앞선 nodejs와 다르지 않다. 마찬가지로 사용하려는 모듈을 로컬에서 미리 압축하여 업로드하고 이후 과정은 동일하다. 다만, nodejs는 패키지를 nodejs/node_modules/[패키지들] 형태로 압축했다면, python은 sites_packages 디렉토리에 있는 패키지들을 다음과 같은 패스로 압축한다.

python/[패키지들]

이렇게 압축 된 파일을 nodejs 계층 추가와 마찬가지로 추가하면 python에서도 모듈 import가 가능하다.

참고

Leave a Reply