Docker 컨테이너 이미지를 사용하는 Lambda 함수 - Java(런타임)로 Lambda 함수를 개발하고 배포하는 과정

WBOY
풀어 주다: 2024-08-27 20:00:16
원래의
225명이 탐색했습니다.

소개

이 기사에서는 Docker 컨테이너 이미지와 Java 런타임을 사용하여 Lambda 함수를 개발하고 배포하는 방법을 살펴보고 싶습니다. 이 기사에서는 Java 21 Corretto 런타임을 사용합니다. 그러나 컨테이너 이미지와 마찬가지로 Java 17 및 21과 같은 LTS(장기 지원) Java 런타임뿐만 아니라 Java 22와 같은 최신 Java 런타임도 사용할 수 있습니다. 최신 Java 버전이 출시될 때 이 예를 쉽게 업데이트할 수 있습니다(예: Java 2024년 9월 버전 23).

AWS Lambda 기본 Docker 컨테이너 이미지와 Java(21) 런타임을 사용하여 Lambda 함수를 개발하고 배포하는 방법

AWS 기본 이미지에는 언어 런타임, Lambda와 함수 코드 간의 상호 작용을 관리하는 런타임 인터페이스 클라이언트, 로컬 테스트를 위한 런타임 인터페이스 에뮬레이터가 미리 로드되어 있습니다. Java용 AWS 기본 이미지를 사용하려면 이 문서를 참조하세요.

설명을 위해 샘플 애플리케이션을 사용하고 Lambda 함수에는 Java 21 런타임을 사용하겠습니다.

Lambda function using Docker Container Image -Part ow to develop and deploy Lambda function with Java ( runtime

이 애플리케이션에서는 제품을 생성 및 검색하고 DynamoDB를 NoSQL 데이터베이스로 사용합니다. 여기에서 DynamoProductDao.java 구현을 찾을 수 있습니다. 또한 AWS SAM 템플릿에 정의된 대로 Amazon API Gateway를 그 앞에 배치합니다. 이 템플릿에서는 PutProductWithPureJava21DockerImage 및 GetProductByIdWithPureJava21DockerImage라는 2개의 Lambda 함수도 정의했습니다.

공용 Amazon ECR 리포지토리의 Java 21용 AWS Lambda 기본 Docker 이미지 public.ecr.aws/lambda/java:21을 사용하는 Dockerfile을 정의해야 합니다. 여기서 AWS에서 제공하는 Java용 Lambda 기본 Docker 이미지를 모두 찾을 수 있습니다.

Docker 이미지에서는 Maven 레이아웃의 함수 코드와 런타임 종속성을 런타임 환경 변수 LAMBDA_TASK_ROOT(Lambda 함수 코드의 경로)에 복사합니다.

으아악

다른 모든 것은 AWS SAM 템플릿의 Lambda 함수 선언에 정의되어 있습니다.

으아악

중요한 부분은 다음과 같습니다.

  • PackageType: Lambda 함수를 Docker 컨테이너 이미지로 패키징한다는 이미지
  • ImageUri: !Sub ${AWS::AccountId}.dkr.ecr.eu-central-1.amazonaws.com/aws-pure-lambda-java21-custom-docker-image:v1 이는 Docker 컨테이너의 경로를 참조합니다. Amazon Elastic Container Registry의 이미지. 나중에 이미지를 푸시하는 방법에 대해 자세히 알아보세요. -이미지 구성: 명령: ["software.amazonaws.example.product.handler.GetProductByIdHandler::handleRequest"]는 GetProductById 핸들러에 대한 CMD를 재정의합니다. 이 CMD는 각 Lambda 함수마다 고유하므로 Docker 파일에서와 같이 Lambda 함수 수준에서 선언하는 것이 좋습니다.

이제 Docker 컨테이너 이미지를 생성하여 ECR 저장소에 푸시하는 방법에 대한 질문에 대답해 보겠습니다. 자동으로 수행한 다음sam build 및 sam 배포명령 체인을 실행할 수 있습니다. 또는 SAM 외부에서 애플리케이션을 빌드 및 패키징하고 SAM으로만 배포하는 경우에는 다음과 같이 수동으로 수행해야 합니다

으아악

sam 배포 -g를 사용하여 함수를 배포할 때 sam 매개변수 옵션 --image-repository를 사용하여 Amazon ECR URL을 추가로 제공해야 합니다. sam 배포 매개변수를 참조하세요.

AWS OS 전용 기본 이미지와 Java(21) 런타임을 사용하여 Lambda 함수를 개발하고 배포하는 방법

AWS OS 전용 기본 이미지에는 Amazon Linux 배포판과 런타임 인터페이스 에뮬레이터가 포함되어 있습니다. 이러한 이미지는 일반적으로 Java 및 Rust와 같은 컴파일된 언어와 Node.js 19와 같이 Lambda가 기본 이미지를 제공하지 않는 언어 또는 언어 버전에 대한 컨테이너 이미지를 생성하는 데 사용됩니다. 사용자 정의 런타임을 구현하려면 기본 이미지만 사용하세요.

Java용 AWS OS 전용 기본 이미지를 사용하려면 이미지 또는 종속성 관리에 런타임 인터페이스 클라이언트를 포함해야 합니다. 런타임 인터페이스 클라이언트는 Lambda와 함수 코드 간의 상호 작용을 관리하는 Lambda 런타임 API를 확장합니다.

이 사용 사례에 대한 샘플 애플리케이션도 제공했습니다.

다음과 같이 pom.xml에 AWS Lambda Java Runtime Interface Client를 포함했습니다.

으아악

이 경우 Dockerfile도 약간 다르게 보입니다.
우리는 amazoncorretto:21-alpine을 기본 Docker 이미지로 사용했으며 AWS Lambda Java Runtime Interface Client의 항목 클래스 AWSLambda를 명시적으로 가리키는 진입점을 정의해야 했습니다.

으아악

기타 모든 사항: SAM 템플릿, 소스 코드, 애플리케이션, Docker 이미지 구축 및 배포 단계는 AWS Lambda 기본 Docker 컨테이너 이미지 예시와 동일하게 유지됩니다.

결론

이 기사에서는 Docker 컨테이너 이미지와 Java 런타임을 사용하여 Lambda 함수를 개발하고 배포하는 방법을 살펴보았습니다. 우리는 2가지 사용 사례를 고려했습니다:

  • AWS Lambda 기반 Docker 컨테이너 이미지
  • AWS OS 전용 기본 이미지

다음 기사에서는 AWS Lambda 기반 Docker 컨테이너 이미지를 사용하여 Lambda 함수의 콜드 및 웜 시작 시간을 측정하겠습니다.

위 내용은 Docker 컨테이너 이미지를 사용하는 Lambda 함수 - Java(런타임)로 Lambda 함수를 개발하고 배포하는 과정의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!