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

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

Aug 27, 2024 pm 08:00 PM

소개

이 기사에서는 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 함수 코드의 경로)에 복사합니다.

COPY target/classes ${LAMBDA_TASK_ROOT}
COPY target/dependency/* ${LAMBDA_TASK_ROOT}/lib/
로그인 후 복사

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

 GetProductByIdFunction:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: GetProductByIdWithPureJava21DockerImage
      PackageType: Image
      ImageUri: !Sub ${AWS::AccountId}.dkr.ecr.eu-central-1.amazonaws.com/aws-pure-lambda-java21-custom-docker-image:v1
      ImageConfig:
        Command: ["software.amazonaws.example.product.handler.GetProductByIdHandler::handleRequest"]
로그인 후 복사

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

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

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

Build Docker image with name aws-pure-lambda-java21-custom-docker-image:

docker build --no-cache -t aws-pure-lambda-java21-custom-docker-image:v1 .

Login to Amazon ECR in case the credentials are expired:

aws ecr get-login-password --region eu-central-1 | docker login --username AWS --password-stdin {aws_account_id}.dkr.ecr.eu-central-1.amazonaws.com  

Create Amazon ECR repository if not exists with the name aws-pure-lambda-java21-custom-docker-image:

aws ecr create-repository --repository-name aws-pure-lambda-java21-custom-docker-image --image-scanning-configuration scanOnPush=true --region eu-central-1  

Tag our local Docker image and  link it with Amazon ECR repository. Exactly this image is referenced as ImageUri in the Lambda function:

docker tag aws-pure-lambda-java21-custom-docker-image:v1 {aws_account_id}.dkr.ecr.eu-central-1.amazonaws.com/aws-pure-lambda-java21-custom-docker-image:v1

Push the Docker image to the Amazon ECR repository:
docker push {aws_account_id}.dkr.ecr.eu-central-1.amazonaws.com/aws-pure-lambda-java21-custom-docker-image:v1 
로그인 후 복사

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를 포함시켰습니다.

<dependency>
   <groupId>com.amazonaws</groupId>
   <artifactId>aws-lambda-java-runtime-interface-client</artifactId>
</dependency>
로그인 후 복사

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

ENTRYPOINT [ "/usr/bin/java", "-cp", "./*", "com.amazonaws.services.lambda.runtime.api.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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

회사의 보안 소프트웨어가 응용 프로그램이 실행되지 않습니까? 문제 해결 및 해결 방법은 무엇입니까? 회사의 보안 소프트웨어가 응용 프로그램이 실행되지 않습니까? 문제 해결 및 해결 방법은 무엇입니까? Apr 19, 2025 pm 04:51 PM

일부 애플리케이션이 제대로 작동하지 않는 회사의 보안 소프트웨어에 대한 문제 해결 및 솔루션. 많은 회사들이 내부 네트워크 보안을 보장하기 위해 보안 소프트웨어를 배포 할 것입니다. ...

맵 구조를 사용하여 시스템 도킹에서 필드 매핑 문제를 단순화하는 방법은 무엇입니까? 맵 구조를 사용하여 시스템 도킹에서 필드 매핑 문제를 단순화하는 방법은 무엇입니까? Apr 19, 2025 pm 06:21 PM

시스템 도킹의 필드 매핑 처리 시스템 도킹을 수행 할 때 어려운 문제가 발생합니다. 시스템의 인터페이스 필드를 효과적으로 매핑하는 방법 ...

분류를 구현하고 그룹의 일관성을 유지하기 위해 이름을 숫자로 변환하려면 어떻게합니까? 분류를 구현하고 그룹의 일관성을 유지하기 위해 이름을 숫자로 변환하려면 어떻게합니까? Apr 19, 2025 pm 11:30 PM

많은 응용 프로그램 시나리오에서 정렬을 구현하기 위해 이름으로 이름을 변환하는 솔루션, 사용자는 그룹으로, 특히 하나로 분류해야 할 수도 있습니다.

데이터베이스 쿼리 조건을 구축하기 위해 엔티티 클래스 변수 이름을 우아하게 얻는 방법은 무엇입니까? 데이터베이스 쿼리 조건을 구축하기 위해 엔티티 클래스 변수 이름을 우아하게 얻는 방법은 무엇입니까? Apr 19, 2025 pm 11:42 PM

데이터베이스 작업에 MyBatis-Plus 또는 기타 ORM 프레임 워크를 사용하는 경우 엔티티 클래스의 속성 이름을 기반으로 쿼리 조건을 구성해야합니다. 매번 수동으로 ...

Intellij Idea는 로그를 출력하지 않고 스프링 부팅 프로젝트의 포트 번호를 어떻게 식별합니까? Intellij Idea는 로그를 출력하지 않고 스프링 부팅 프로젝트의 포트 번호를 어떻게 식별합니까? Apr 19, 2025 pm 11:45 PM

IntellijideAultimate 버전을 사용하여 봄을 시작하십시오 ...

Java 객체를 어레이로 안전하게 변환하는 방법은 무엇입니까? Java 객체를 어레이로 안전하게 변환하는 방법은 무엇입니까? Apr 19, 2025 pm 11:33 PM

Java 객체 및 배열의 ​​변환 : 캐스트 유형 변환의 위험과 올바른 방법에 대한 심층적 인 논의 많은 Java 초보자가 객체를 배열로 변환 할 것입니다 ...

전자 상거래 플랫폼 SKU 및 SPU 데이터베이스 설계 : 사용자 정의 속성과 귀속없는 제품을 모두 고려하는 방법은 무엇입니까? 전자 상거래 플랫폼 SKU 및 SPU 데이터베이스 설계 : 사용자 정의 속성과 귀속없는 제품을 모두 고려하는 방법은 무엇입니까? Apr 19, 2025 pm 11:27 PM

전자 상거래 플랫폼에서 SKU 및 SPU 테이블의 디자인에 대한 자세한 설명이 기사는 전자 상거래 플랫폼에서 SKU 및 SPU의 데이터베이스 설계 문제, 특히 사용자 정의 판매를 처리하는 방법에 대해 논의 할 것입니다 ...

Redis 캐시 솔루션을 사용하여 제품 순위 목록의 요구 사항을 효율적으로 실현하는 방법은 무엇입니까? Redis 캐시 솔루션을 사용하여 제품 순위 목록의 요구 사항을 효율적으로 실현하는 방법은 무엇입니까? Apr 19, 2025 pm 11:36 PM

Redis 캐싱 솔루션은 제품 순위 목록의 요구 사항을 어떻게 인식합니까? 개발 과정에서 우리는 종종 a ... 표시와 같은 순위의 요구 사항을 처리해야합니다.

See all articles