코알못

[Lambda] 라이브러리 버전 변경 본문

ETC

[Lambda] 라이브러리 버전 변경

코린이s 2023. 3. 16. 17:14
728x90

AWS Lambda 를 이용하여 EMR 을 기동/중단하려고 하였으며

아래와 같이 Lambda 함수를 생성 하였다!

설정은 아래와 같이 Python 3.9를 사용 하였다

python 라이브러리중 boto3 를 사용하고자 하였으며 해당 라이브러리버전을 확인하기 위해 아래와 같이 코드를 작성 하였다.

import json
import boto3

client=boto3.client('emr')
s3=boto3.resource('s3')
emr_config_json=''

def lambda_handler(event, context):
  return { 'statusCode': 200, 'body': boto3.__version__ }

적용을 위해 Deploy를 누르고 테스트를 위해 Test 버튼을 눌렀다.

로그를 보니 1.20.32 로 확인 되었으나 저자가 사용하고자 하는 버전은 1.26.80 이상이라 라이브러리 버전 업그레이드가 필요한 상황이였다.

이를 위해 Lambda Layer 를 이용하는 방법이 있어 아래와 같이 실습으로 알아보자!

라이브러리를 ZIP으로 압축하여 해당 ZIP 을 포함한 레이어를 생성하여 사용하고자 하는 함수에 해당 레이어로 업데이트 하면 된다.

1. 런타임 OS 확인

해당 작업은 런타임 OS 와 동일한 환경에서 하는것이 좋다고 하여 아래 사이트를 참고하여 사용한 런타임의 OS 를 확인 한다.

저자는 Python 3.9 이므로 Linux 2 를 사용하면 된다.

https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html

 

Lambda runtimes - AWS Lambda

Lambda runtimes Lambda supports multiple languages through the use of runtimes. For a function defined as a container image, you choose a runtime and the Linux distribution when you create the container image. To change the runtime, you create a new contai

docs.aws.amazon.com

2. 런타임과 동일한 OS 로 EC2 생성
3. 생성한 EC2 에 라이브러리 설치 및 ZIP 으로 압축

저자는 python 3 버전이기에 아래와 같이 진행하였으며 boto 라이브러리 원하는 버전인 '1.26.92' 가 설치 되었다.

$ LIB_DIR=boto3-mylayer/python
$ mkdir -p $LIB_DIR
$ python3 -m pip install boto3 -t $LIB_DIR
Successfully installed boto3-1.26.92 botocore-1.29.92 jmespath-1.0.1 python-dateutil-2.8.2 s3transfer-0.6.0 six-1.16.0 urllib3-1.26.15
$ cd boto3-mylayer
$ zip -r /tmp/boto3-mylayer.zip .

 

4. 해당 ZIP 을 포함한 람다 레이어 생성하여 ARN 정보 얻기

아래 명령어로 레이어 생성하여 레이어의 ARN을 얻는다.

$ aws lambda publish-layer-version --layer-name boto3-mylayer --zip-file fileb:///tmp/boto3-mylayer.zip
2023-03-16T07:10:46.145+0000 arn:aws:lambda:ap-northeast-2:123:layer:boto3-mylayer arn:aws:lambda:ap-northeast-2:123:layer:boto3-mylayer:1 1

저자의 경우 'arn:aws:lambda:ap-northeast-2:123:layer:boto3-mylayer:1' 가 ARN 이다. 

콘솔에서도 확인이 가능하며 AWS > Lambda > layer 또는 계층 > 생성한 레이어명 클릭 > 우측 상단에서 확인 가능하다.

5. 레이어를 적용 하고자 하는 함수 레이어 업데이트

$ aws lambda update-function-configuration --function-name <myfunction> --layers <layer ARN>

6. 확인

다시 Test 버튼을 눌러 로그를 확인하면 정상적으로 레이어가 적용 된것을 알 수 있다.

람다 함수의 '코드' 탭에 제일 하단에 가서도 레이어 적용 여부를 확인 할 수 있다.

끝!

728x90
Comments