기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
컨테이너 이미지로 Lambda 함수 배포
작성자: Ram Kandaswamy(AWS)
요약
AWS Lambda 는 컨테이너 이미지를 배포 모델로 지원합니다. 이 패턴은 컨테이너 이미지를 통해 Lambda 함수를 배포하는 방법을 보여줍니다.
Lambda는 서버를 프로비저닝하거나 관리하지 않고도 사실상 모든 유형의 애플리케이션이나 백엔드 서비스에 대한 코드를 실행할 수 있는 서버리스 이벤트 기반 컴퓨팅 서비스입니다. Lambda 함수에 대한 컨테이너 이미지 지원을 통해 애플리케이션 아티팩트에 최대 10GB의 스토리지와 친숙한 컨테이너 이미지 개발 도구를 사용할 수 있는 이점을 얻을 수 있습니다.
이 패턴의 예제에서는 Python을 기본 프로그래밍 언어로 사용하지만 Java, Node.js, Go와 같은 다른 언어를 사용할 수 있습니다. 소스의 경우 GitHub, GitLab GitLab 기반 시스템을 고려하거나 Amazon Simple Storage Service(Amazon S3 사용합니다.
사전 조건 및 제한 사항
사전 조건
Amazon Elastic Container Registry(Amazon ECR) 활성화됨
애플리케이션 코드
런타임 인터페이스 클라이언트와 최신 버전의 Python이 포함된 Docker 이미지
Git에 대한 실무 지식
제한 사항
지원되는 최대 이미지 크기는 10GB입니다.
Lambda 기반 컨테이너 배포의 최대 런타임은 15분입니다.
아키텍처
대상 아키텍처

Git 리포지토리를 생성하고 애플리케이션 코드를 리포지토리에 커밋합니다.
커밋 변경으로 인해 AWS CodeBuild 프로젝트가 트리거됩니다.
CodeBuild 프로젝트는 Docker 이미지를 생성하고 빌드된 이미지를 Amazon ECR에 게시합니다.
Amazon ECR의 이미지를 사용하여 Lambda 함수를 생성합니다.
자동화 및 규모 조정
이 패턴은 SDK에서 AWS CloudFormation AWS Cloud Development Kit (AWS CDK)또는 API 작업을 사용하여 자동화할 수 있습니다. Lambda는 요청 수에 따라 자동으로 규모를 조정할 수 있으며, 동시성 파라미터를 사용하여 Lambda를 조정할 수 있습니다. 자세한 내용은 Lambda 설명서.를 참조하세요.
도구
서비스
AWS CloudFormation AWS CloudFormationhelps 사용하면 AWS 리소스를 설정하고, 빠르고 일관되게 프로비저닝하고, AWS 계정 및의 수명 주기 동안 리소스를 관리할 수 있습니다 AWS 리전. 이 패턴은 AWS CloudFormation 템플릿을 시각적으로 보고 편집할 수 있도록 AWS CloudFormation Application Composer를 사용합니다.
AWS CodeBuild는 소스 코드를 컴파일하고, 단위 테스트를 실행하고, 배포할 준비가 된 아티팩트를 생성하는 데 도움이 되는 완전 관리형 빌드 서비스입니다.
Amazon Elastic Container Registry(Amazon ECR)는 안전하고 확장성이 있고 신뢰할 수 있는 관리형 컨테이너 이미지 레지스트리 서비스입니다.
AWS Lambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
기타 도구
모범 사례
함수를 최대한 효율적이고 작게 만들어 불필요한 파일이 로드되지 않도록 하십시오.
Docker 파일 목록에서 정적 계층은 위쪽에 배치하고 자주 변경되는 계층은 아래쪽에 배치하십시오. 이렇게 하면 캐싱이 개선되어 성능이 향상됩니다.
이미지 업데이트 및 패치 적용은 이미지 소유자가 담당합니다. 운영 프로세스에 해당 업데이트 케이던스를 추가합니다. 자세한 내용은 AWS Lambda 설명서를 참조하십시오.
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
Git 리포지토리를 생성합니다. | 애플리케이션 소스 코드, Dockerfile 및 | 개발자 |
CodeBuild 프로젝트를 생성합니다. | CodeBuild 프로젝트를 사용하여 사용자 지정 Lambda 이미지를 생성하려면 다음을 수행합니다.
| 개발자 |
Dockerfile을 편집합니다. | Dockerfile은 애플리케이션을 개발하는 최상위 디렉터리에 있어야 합니다. Python 코드는 이미지를 생성할 때는 Lambda 지원 공식 이미지 자세한 내용은 추가 정보 섹션을 참조하세요. | 개발자 |
Amazon ECR 리포지토리를 생성합니다. | Amazon ECR에 컨테이너 리포지토리를 생성합니다. 다음 예제 명령에서 생성된 리포지토리의 이름은 입니다
리포지토리는 | AWS 관리자, 개발자 |
이미지를 Amazon ECR로 푸시합니다. | CodeBuild를 사용하여 이미지 빌드 프로세스를 수행할 수 있습니다. CodeBuild는 Amazon ECR과 상호 작용하고 S3를 사용할 수 있는 권한이 필요합니다. 프로세스의 일부로 Docker 이미지가 빌드되어 Amazon ECR 레지스트리로 푸시됩니다. 템플릿과 코드에 대한 자세한 내용은 추가 정보 섹션을 참조하세요. | 개발자 |
이미지가 리포지토리에 있는지 확인하십시오. | 이미지가 리포지토리에 있는지 확인하려면 Amazon ECR 콘솔에서 리포지토리를 선택합니다. Amazon ECR 설정에서 해당 기능이 켜져 있는 경우 취약성 스캔 보고서 결과와 함께 이미지가 태그 및 함께 나열되어야 합니다. 자세한 내용은 설명서를 참조하십시오. | 개발자 |
작업 | 설명 | 필요한 기술 |
---|---|---|
Lambda 함수를 생성합니다. | Lambda 콘솔에서 함수 생성을 선택한 다음 컨테이너 이미지를 선택합니다. Amazon ECR 리포지토리에 있는 이미지의 URI와 함수 이름을 입력한 다음 함수 생성을 선택합니다. 자세한 내용은 AWS Lambda 설명서를 참조하세요. | 앱 개발자 |
Lambda 함수를 테스트합니다. | 함수를 간접 호출하고 테스트하려면 테스트를 선택합니다. 자세한 내용은 AWS Lambda 설명서를 참조하세요. | 앱 개발자 |
문제 해결
문제 | Solution |
---|---|
빌드가 성공하지 못했습니다. |
|
관련 리소스
추가 정보
Dockerfile 편집
다음 코드는 Dockerfile에서 편집하는 명령을 보여줍니다.
FROM public.ecr.aws/lambda/python:3.xx # Copy function code COPY app.py ${LAMBDA_TASK_ROOT} COPY requirements.txt ${LAMBDA_TASK_ROOT} # install dependencies RUN pip3 install --user -r requirements.txt # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "app.lambda_handler" ]
FROM
명령에서 Lambda에서 지원하는 Python 버전에 적절한 값을 사용합니다(예: 3.12
). 이는 퍼블릭 Amazon ECR 이미지 리포지토리에서 사용할 수 있는 기본 이미지입니다.
이 COPY app.py ${LAMBDA_TASK_ROOT}
명령은 Lambda 함수가 사용할 작업 루트 디렉터리에 코드를 복사합니다. 이 명령은 환경 변수를 사용하므로 실제 경로에 대해 걱정할 필요가 없습니다. 실행할 함수는 CMD [ "app.lambda_handler" ]
명령에 인수로 전달됩니다.
이 COPY requirements.txt
명령은 코드에 필요한 종속성을 캡처합니다.
이 RUN pip install --user -r requirements.txt
명령은 로컬 사용자 디렉터리에 종속성을 설치합니다.
이미지를 빌드하려면 다음 명령을 실행합니다.
docker build -t <image name> .
Amazon ECR에 이미지를 추가합니다.
다음 코드에서 aws_account_id
를 계정 번호로 바꾸고, 다른 리전을 사용하는 경우 us-east-1
을 바꾸십시오. 이 buildspec
파일은 CodeBuild 빌드 번호를 사용하여 이미지 버전을 태그 값으로 고유하게 식별합니다. 이를 요구 사항에 맞게 변경할 수 있습니다.
빌드스펙 사용자 지정 코드
phases: install: runtime-versions: python: 3.xx pre_build: commands: - python3 --version - pip3 install --upgrade pip - pip3 install --upgrade awscli - sudo docker info build: commands: - echo Build started on `date` - echo Building the Docker image... - ls - cd app - docker build -t cf-demo:$CODEBUILD_BUILD_NUMBER . - docker container ls post_build: commands: - echo Build completed on `date` - echo Pushing the Docker image... - aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.us-east-1.amazonaws.com - docker tag cf-demo:$CODEBUILD_BUILD_NUMBER aws_account_id.dkr.ecr.us-east-1.amazonaws.com/cf-demo:$CODEBUILD_BUILD_NUMBER - docker push aws_account_id.dkr.ecr.us-east-1.amazonaws.com/cf-demo:$CODEBUILD_BUILD_NUMBER