Java로 Lambda 함수 구축
Java로 Lambda 함수 구축 (Building Lambda functions with Java)
AWS Lambda에서 Java 코드를 실행할 수 있어요. Lambda는 이벤트를 처리하도록 작성한 코드를 실행하는 Java용 런타임을 제공해요. 코드는 여러분이 관리하는 AWS Identity and Access Management(IAM) 역할의 AWS 자격 증명을 포함하는 Amazon Linux 환경에서 실행돼요.
본문
Lambda는 다음 Java 런타임을 지원해요.
| 이름 | 식별자 | 운영 체제 | 지원 종료 날짜 | 함수 생성 차단 | 함수 업데이트 차단 |
|---|---|---|---|---|---|
| Java 25 | java25 |
Amazon Linux 2023 | 2029년 6월 30일 | 2029년 7월 31일 | 2029년 8월 31일 |
| Java 21 | java21 |
Amazon Linux 2023 | 2029년 6월 30일 | 2029년 7월 31일 | 2029년 8월 31일 |
| Java 17 | java17.al2023 |
Amazon Linux 2023 | 2029년 6월 30일 | 2029년 7월 31일 | 2029년 8월 31일 |
| Java 11 | java11.al2023 |
Amazon Linux 2023 | 2029년 6월 30일 | 2029년 7월 31일 | 2029년 8월 31일 |
| Java 8 | java8.al2023 |
Amazon Linux 2023 | 2029년 6월 30일 | 2029년 7월 31일 | 2029년 8월 31일 |
| Java 17 | java17 |
Amazon Linux 2 | 2027년 6월 30일 | 2027년 7월 31일 | 2027년 8월 31일 |
| Java 11 | java11 |
Amazon Linux 2 | 2027년 6월 30일 | 2027년 7월 31일 | 2027년 8월 31일 |
| Java 8 | java8.al2 |
Amazon Linux 2 | 2027년 6월 30일 | 2027년 7월 31일 | 2027년 8월 31일 |
AWS는 Java 함수를 위해 다음 라이브러리를 제공해요. 이 라이브러리는 Maven Central Repository에서 사용할 수 있어요.
- com.amazonaws:aws-lambda-java-core(필수) – 핸들러 메서드 인터페이스와 런타임이 핸들러에 전달하는 컨텍스트 객체를 정의해요. 자체 입력 타입을 정의한다면 이것이 필요한 유일한 라이브러리예요.
- com.amazonaws:aws-lambda-java-events – Lambda 함수를 호출하는 서비스의 이벤트용 입력 타입이에요.
- com.amazonaws:aws-lambda-java-log4j2 – 현재 호출의 요청 ID를 함수 로그에 추가하는 데 사용할 수 있는 Apache Log4j 2용 appender 라이브러리예요.
- AWS SDK for Java 2.0 – Java 프로그래밍 언어용 공식 AWS SDK예요.
- AWS Lambda Durable Execution SDK for Java – 진행 상황을 체크포인트하고, 오류에서 자동으로 복구하며, 실행을 일시 중지하는 안정적인 다단계 애플리케이션과 AI 워크플로를 구축해요. 자세한 내용은 Lambda durable functions을 참고하세요.
빌드 정의에 이 라이브러리를 다음과 같이 추가해요.
Gradle
dependencies {
implementation 'com.amazonaws:aws-lambda-java-core:1.2.2'
implementation 'com.amazonaws:aws-lambda-java-events:3.11.1'
runtimeOnly 'com.amazonaws:aws-lambda-java-log4j2:1.5.1'
implementation 'software.amazon.lambda.durable:aws-durable-execution-sdk-java:1.0.1'
}
Maven
<dependencies>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-events</artifactId>
<version>3.11.1</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-log4j2</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>software.amazon.lambda.durable</groupId>
<artifactId>aws-durable-execution-sdk-java</artifactId>
<version>1.0.1</version>
</dependency>
</dependencies>
중요
private 필드, 메서드, 클래스 같은 JDK API의 비공개 구성 요소를 사용하지 마세요. 비공개 API 구성 요소는 어떤 업데이트에서도 변경되거나 제거될 수 있어 애플리케이션이 중단될 수 있어요.
커스텀 직렬화에 대한 자세한 내용은 Lambda Java 함수 직렬화 커스터마이즈를 참고하세요.
Java 함수 생성
- Lambda 콘솔을 열어요.
- 함수 생성(Create function) 을 선택해요.
- 다음 설정을 구성해요.
- 함수 이름(Function name) : 함수 이름을 입력해요.
- 런타임(Runtime) : Java 25 를 선택해요.
- 함수 생성(Create function) 을 선택해요.
콘솔은 Hello 라는 핸들러 클래스가 있는 Lambda 함수를 만들어요. Java는 컴파일 언어이므로 Lambda 콘솔에서 소스 코드를 보거나 편집할 수 없지만, 구성을 수정하고, 호출하고, 트리거를 구성할 수 있어요.
참고
로컬 환경에서 애플리케이션 개발을 시작하려면 이 가이드의 GitHub 저장소에서 사용할 수 있는 샘플 애플리케이션 중 하나를 배포해요.
Hello 클래스에는 이벤트 객체와 컨텍스트 객체를 받는 handleRequest 함수가 있어요. 이것이 함수가 호출될 때 Lambda가 호출하는 핸들러 함수예요. Java 함수 런타임은 Lambda에서 호출 이벤트를 받아 핸들러에 전달해요. 함수 구성에서 핸들러 값은 example.Hello::handleRequest 예요.
함수의 코드를 업데이트하려면 함수 코드가 포함된 .zip 파일 아카이브인 배포 패키지를 만들어요. 함수 개발이 진행됨에 따라 함수 코드를 소스 제어에 저장하고, 라이브러리를 추가하며, 배포를 자동화하고 싶을 거예요. 배포 패키지 생성으로 시작해 명령줄에서 코드를 업데이트하세요.
함수 런타임은 호출 이벤트와 함께 컨텍스트 객체를 핸들러에 전달해요. 컨텍스트 객체는 호출, 함수, 실행 환경에 대한 추가 정보를 담고 있어요. 환경 변수에서 더 많은 정보를 얻을 수 있어요.
Lambda 함수에는 CloudWatch Logs 로그 그룹이 함께 제공돼요. 함수 런타임은 각 호출에 대한 세부 정보를 CloudWatch Logs로 보내요. 호출 중 함수가 출력하는 로그도 중계해요. 함수가 오류를 반환하면 Lambda는 오류 형식을 지정해 호출자에게 반환해요.