Java Lambda 함수를 컨테이너 이미지로 배포하기

Java Lambda 함수를 컨테이너 이미지로 배포하기

Java Lambda 함수를 위한 컨테이너 이미지를 만드는 방법은 세 가지가 있어요:

출처: AWS Lambda 개발자 안내서

본문

  1. Java용 AWS 베이스 이미지 사용하기 — AWS 베이스 이미지에는 언어 런타임, 런타임 인터페이스 클라이언트, 그리고 로컬 테스트용 런타임 인터페이스 에뮬레이터가 미리 탑재되어 있어요.
  2. AWS OS-only 베이스 이미지 사용하기 — AWS OS-only 베이스 이미지에는 Amazon Linux 배포판과 런타임 인터페이스 에뮬레이터가 들어 있어요. 이 이미지는 Go, Rust 같은 컴파일 언어나, Lambda가 베이스 이미지를 제공하지 않는 언어·버전(Node.js 19 같은)의 컨테이너 이미지를 만들 때 주로 사용합니다. OS-only 베이스 이미지로 커스텀 런타임을 구현할 수도 있어요. 이미지를 Lambda와 호환되게 하려면 이미지에 Java용 런타임 인터페이스 클라이언트를 반드시 포함해야 합니다.
  3. 비-AWS 베이스 이미지 사용하기 — Alpine Linux나 Debian처럼 다른 컨테이너 레지스트리의 대체 베이스 이미지를 사용할 수 있어요. 조직에서 만든 커스텀 이미지도 가능합니다. 역시 Java용 런타임 인터페이스 클라이언트를 이미지에 포함해야 해요.

팁

Lambda 컨테이너 함수가 활성화되는 시간을 줄이려면 Docker 문서의 멀티 스테이지 빌드 사용하기를 참고하세요. 효율적인 컨테이너 이미지를 만들려면 Dockerfile 작성 모범 사례를 따르세요.

이 페이지에서는 Lambda용 컨테이너 이미지를 빌드하고, 테스트하고, 배포하는 방법을 설명합니다.

Topics

Java용 AWS 베이스 이미지

AWS는 Java용으로 다음과 같은 베이스 이미지를 제공합니다:

버전 Java 버전 운영 체제 Dockerfile 사용 중단 날짜
25 Java 25 Amazon Linux 2023 GitHub의 Java 25용 Dockerfile 2029년 6월 30일
21 Java 21 Amazon Linux 2023 GitHub의 Java 21용 Dockerfile 2029년 6월 30일
17.al2023 Java 17 Amazon Linux 2023 GitHub의 Java 17용 Dockerfile 2029년 6월 30일
11.al2023 Java 11 Amazon Linux 2023 GitHub의 Java 11용 Dockerfile 2029년 6월 30일
8.al2023 Java 8 Amazon Linux 2023 GitHub의 Java 8용 Dockerfile 2029년 6월 30일
17 Java 17 Amazon Linux 2 GitHub의 Java 17용 Dockerfile 2027년 6월 30일
11 Java 11 Amazon Linux 2 GitHub의 Java 11용 Dockerfile 2027년 6월 30일
8.al2 Java 8 Amazon Linux 2 GitHub의 Java 8용 Dockerfile 2027년 6월 30일

Amazon ECR 저장소: gallery.ecr.aws/lambda/java

Java 21 이상 베이스 이미지는 Amazon Linux 2023 최소 컨테이너 이미지를 기반으로 해요. 그 이전 베이스 이미지는 Amazon Linux 2를 사용합니다. AL2023은 Amazon Linux 2보다 더 작은 배포 공간과 glibc 같은 라이브러리의 최신 버전 등 여러 이점을 제공합니다.

AL2023 기반 이미지는 Amazon Linux 2의 기본 패키지 관리자인 yum 대신 microdnf(심볼릭 링크로 dnf)를 패키지 관리자로 사용합니다. microdnf는 dnf의 독립 실행형 구현입니다. AL2023 기반 이미지에 포함된 패키지 목록은 Amazon Linux 2023 컨테이너 이미지에 설치된 패키지 비교에서 Minimal Container 열을 참고하세요. AL2023과 Amazon Linux 2의 차이에 대한 자세한 내용은 AWS Compute Blog의 Introducing the Amazon Linux 2023 runtime for AWS Lambda를 참고하세요.

참고

AL2023 기반 이미지를 AWS Serverless Application Model(AWS SAM)을 포함해 로컬에서 실행하려면 Docker 버전 20.10.10 이상을 사용해야 해요.

Java용 AWS 베이스 이미지 사용하기

Java용 AWS 베이스 이미지를 사용해 컨테이너 이미지를 만들고 배포하는 방법을 살펴봅니다.

런타임 인터페이스 클라이언트가 있는 대체 베이스 이미지 사용하기

OS-only 베이스 이미지나 대체 베이스 이미지를 사용한다면, 이미지에 런타임 인터페이스 클라이언트를 반드시 포함해야 해요. 런타임 인터페이스 클라이언트는 Lambda와 함수 코드 사이의 상호 작용을 관리하는 Runtime API를 확장합니다.

Java용 런타임 인터페이스 클라이언트를 Dockerfile 또는 프로젝트의 의존성으로 설치하세요. 예를 들어 Maven 패키지 관리자로 런타임 인터페이스 클라이언트를 설치하려면 pom.xml 파일에 다음을 추가합니다:

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-lambda-java-runtime-interface-client</artifactId>
    <version>2.3.2</version>
</dependency>

패키지 세부 정보는 Maven Central Repository의 AWS Lambda Java Runtime Interface Client를 참고하세요. 런타임 인터페이스 클라이언트 소스 코드는 AWS Lambda Java Support Libraries GitHub 저장소에서도 확인할 수 있어요.

다음 예시는 Amazon Corretto 이미지를 사용해 Java용 컨테이너 이미지를 빌드하는 방법을 보여줘요. Amazon Corretto는 무료, 멀티플랫폼, 프로덕션 준비된 Open Java Development Kit(OpenJDK) 배포판입니다. Maven 프로젝트에는 런타임 인터페이스 클라이언트가 의존성으로 포함되어 있어요.

더 알아보기 (Learn more)