Amazon Linux 2 AMI 네이티브 바이너리 패키지를 Lambda와 함께 사용하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2022년 3월 28일

바이너리 공유 라이브러리 종속성을 포함하고, Amazon Linux 2 Amazon Machine Imgae(AMI)에서 실행되는 AWS Lambda 함수를 만들려고 합니다. 패키지를 다시 컴파일하지 않고 Amazon Linux 2 AMI 소프트웨어 패키지를 사용할 방법이 있나요?

간략한 설명

Amazon Linux 2 AMI와 Lambda 런타임에 쓰이는 Amazon Linux AMI는 서로 지원하는 네이티브 바이너리 패키지가 다릅니다.

해결 방법으로, 우선 Docker 명령줄 인터페이스(CLI)를 사용하여 Lambda 컨테이너 이미지를 빌드합니다. 그런 다음, 해당 컨테이너 이미지를 사용해 Lambda 함수를 실행합니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류 메시지가 표시되는 경우 AWS CLI 최신 버전을 사용 중인지 확인합니다.

다음 지침에서는 curl 바이너리를 Docker 이미지(Lambda 컨테이너 이미지)에 설치하는 방법을 설명합니다. 그런 다음, 해당 이미지를 사용해 Python 버전 3.9 Lambda 함수를 실행하는 법을 알려드립니다. 다른 코딩 언어의 경우 단계를 적절히 조정합니다.

1.    아직 설치하지 않은 경우, Docker CLI를 설치합니다.

2.    lambda-project라는 이름의 프로젝트 디렉터리를 만듭니다.

3.    텍스트 편집기를 사용하여 다음 예제 코드를 포함한 lambda-project 디렉터리에 Dockerfile을 만듭니다.

FROM public.ecr.aws/lambda/python:3.9

# Copy function code
COPY lambda_function.py ${LAMBDA_TASK_ROOT}

# Install the binary packages using yum install
RUN yum install -y curl

# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "lambda_function.lambda_handler" ]

4.    텍스트 편집기를 사용하여 다음 예제 코드를 포함한 lambda-project 디렉터리에 lambda_function.py 파일을 만듭니다.

import subprocess

def lambda_handler(event, context):
    my_output = subprocess.check_output(["curl","-X", "GET", "https://www.httpbin.org/get"], stderr=subprocess.STDOUT, shell=False)
    print(my_output.decode('utf8'))

중요: 다음 명령(5-10단계)을 모두 lambda-project 디렉터리에서 실행해야 합니다.

5.    다음과 같은 docker build Docker CLI 명령을 실행하여 Lambda 컨테이너 이미지를 만듭니다.

docker build -t hello-world

6.    컨테이너 이미지를 로컬로 시작하여 컨테이너 이미지 설정을 테스트합니다. 컨테이너 이미지를 로컬로 시작하려면, 다음과 같은 docker run Docker CLI 명령을 실행합니다.

docker run -p 9000:8080 hello-world 
curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

7.    다음과 같은 get-login-password AWS CLI 명령을 실행하여 Docker를 Amazon Elastic Container Registry(Amazon ECR) 레지스트리에 대해 인증합니다.

중요: us-east-1을 사용자의 AWS 리전으로 바꿉니다. 123456789012를 AWS 계정 ID로 바꿉니다.

aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com

자세한 내용은 Amazon ECR 사용 설명서의 권한 부여 토큰 사용을 참조하세요.

8.    다음과 같은 create-repository AWS CLI 명령을 실행하여 Amazon ECR 리포지토리를 만듭니다.

중요: hello-world를 Amazon ECR 리포지토리 이름으로 바꿉니다.

aws ecr create-repository --repository-name hello-world --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE

자세한 내용은 Amazon ECR 사용 설명서의 3단계: 리포지토리 생성을 참조하세요.

9.    다음과 같은 docker tag Docker CLI 명령을 실행하여 컨테이너 이미지를 리포지토리에 푸시하도록 태그를 지정합니다.

중요: 123456789012를 AWS 계정 ID로 바꿉니다. us-east-1을 사용자의 AWS 리전으로 바꿉니다.

docker tag  hello-world:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest

10.    다음과 같은 docker push Docker CLI 명령을 실행하여 컨테이너 이미지를 리포지토리로 푸시합니다.

중요: 123456789012를 AWS 계정 ID로 바꿉니다. us-east-1을 사용자의 AWS 리전으로 바꿉니다.

docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest

이제 컨테이너 이미지가 Amazon ECR 리포지토리에 위치합니다. 자세한 내용은 Amazon ECR 사용 설명서의 4단계: 이미지를 Amazon ECR로 푸시를 참조하세요.

11.    생성한 컨테이너 이미지를 사용해 Lambda 함수를 만들어 테스트합니다. 이에 대한 지침은 Lambda 개발자 안내서의 컨테이너 이미지로 정의된 Lamba 함수 생성을 참조하세요.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?