AWS SAM 및 Codebuild/Codepipeline과 함께 AWS Lambda에 대한 컨테이너 이미지 지원 사용
Recently AWS는 Lambda 함수에 대한 컨테이너 이미지 지원을 도입했습니다.
Codebuild+Codepipeline을 CICD로 사용하여 Java8로 간단한 람다 함수를 배포하는 약간의 테스트를 실행하고 싶었지만 예상보다 간단하지 않았습니다.
이 빠른 가이드를 통해 귀중한 시간을 절약할 수 있기를 바랍니다.
자, 시작하겠습니다!
CI/CD 파이프라인 설정
내 예에서는 Codecommit, Codebuild 및 Codepipeline과 같은 모든 AWS 서비스를 사용하여 CI/CD를 구축했습니다.
이를 설정하는 가장 편리한 방법은 대상 AWS 계정에서 Cloudformation 템플릿을 실행하는 것입니다.
내 Githubexample.에서 템플릿을 찾을 수 있습니다.
이 템플릿은 다음을 생성합니다.
람다
컨테이너 이미지 람다와 이전 Java의 주요 차이점은 이제 zip/jar 파일을 업로드하는 대신 모든 클래스와 라이브러리를 도커 이미지에 복사해야 한다는 것입니다.
이를 위해 "빌드"작업 중에 Lambda의 런타임 종속성을 "빌드/종속성"폴더로 추출하는 다음 Gradle 작업을 설정했습니다.
task copyRuntimeDependencies(type: Copy) {
from configurations.runtimeClasspath
into 'build/dependency'
}
build.dependsOn copyRuntimeDependencies
도커파일
AWS에는 확장할 수 있는 다양한 퍼블릭 도커 이미지가 있습니다.
내 예에서는 "public.ecr.aws/lambda/java:8"을 사용했습니다.
모든 종속성을 복사하고 진입점을 설정했습니다.
FROM public.ecr.aws/lambda/java:8
# Copy function code and runtime dependencies from Gradle layout
COPY build/classes/java/main ${LAMBDA_TASK_ROOT}
COPY build/dependency/* ${LAMBDA_TASK_ROOT}/lib/
# Set the CMD to your handler
CMD [ "me.enryold.docker.lambda.Lambda::handleRequest" ]
SAM(템플릿.yml)
여기에서 람다 정의의 "메타데이터"섹션 아래에 세 개의 새 필드를 지정해야 합니다.
Dockerfile: Dockerfile # name of Dockerfile file
DockerContext: . # Folder where Dockerfile has placed. Mine is under the project root.
DockerTag: latest # Tag of our image.
그것이 최종 결과를 보는 방법입니다.
Lambda:
Type: AWS::Serverless::Function
Metadata:
Dockerfile: Dockerfile
DockerContext: .
DockerTag: latest
Properties:
PackageType: Image
FunctionName: docker-lambda
MemorySize: 1536
Timeout: 30
Policies:
- AWSLambdaBasicExecutionRole # enable lambda execution
- Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- cloudwatch:*
- ec2:DescribeVpcs
- ec2:DescribeSubnets
- ec2:DescribeSecurityGroups
- ec2:DescribeKeyPairs
Resource: '*'
Buildspec.yml
우리가 표준 빌드를 사용해야 하는 동안 원래 기사가 가이드 샘 빌드를 사용하기 때문에 내가 몇 시간을 낭비한 부분입니다.
version: 0.2
phases:
install:
runtime-versions:
docker: 18
commands:
- wget https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip
- unzip aws-sam-cli-linux-x86_64.zip -d sam-installation
- sam --version
- ./sam-installation/install --update
- /usr/local/bin/sam --version
pre_build:
commands:
- aws ecr get-login-password --region ${AWS_REGION} | docker login --username AWS --password-stdin ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com
build:
commands:
- cd sources && gradle build
- /usr/local/bin/sam build --template-file ${CODEBUILD_SRC_DIR}/sources/sam.yml --region ${AWS_REGION}
- /usr/local/bin/sam package --template-file ${CODEBUILD_SRC_DIR}/sources/.aws-sam/build/template.yaml --output-template-file ${CODEBUILD_SRC_DIR}/sources/packaged.yaml --image-repository ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/me.enryold/docker-lambda
- /usr/local/bin/sam deploy --template-file ${CODEBUILD_SRC_DIR}/sources/packaged.yaml --stack-name ${PROJECT_NAME}-sam --capabilities CAPABILITY_NAMED_IAM --region ${AWS_REGION} --image-repository ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/me.enryold/docker-lambda
작업 예
내 Github 페이지에서 entire project을 자유롭게 다운로드/포크하십시오.
Reference
이 문제에 관하여(AWS SAM 및 Codebuild/Codepipeline과 함께 AWS Lambda에 대한 컨테이너 이미지 지원 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/enryold/using-container-image-support-for-aws-lambda-with-aws-sam-and-codebuild-codepipeline-dkc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)