Java Lambda 함수용 레이어 작업
Java Lambda 함수용 레이어 작업
Lambda 레이어를 사용해 여러 함수에서 재사용하려는 코드와 의존성을 패키징하세요. 레이어에는 보통 라이브러리 의존성, 커스텀 런타임, 구성 파일이 들어 있습니다. 레이어를 만드는 과정은 크게 세 단계입니다.
본문
- 레이어 콘텐츠를 패키징합니다. 즉, 함수에서 사용할 의존성을 담은
.zip파일 아카이브를 만듭니다. - Lambda에서 레이어를 생성합니다.
- 함수에 레이어를 추가합니다.
이 페이지의 내용:
- 레이어 콘텐츠 패키징
- Lambda에서 레이어 생성
- 함수에 레이어 추가
레이어 콘텐츠 패키징
레이어를 만들려면 패키지를 다음 요구 사항을 충족하는 .zip 파일 아카이브로 묶으세요.
- Maven이나 Gradle이 참조하는 Java 버전이 배포하려는 함수의 Java 버전과 같은지 확인하세요. 예를 들어 Java 25 함수라면
mvn -v명령 출력에 Java 25가 나열되어야 합니다. - 의존성은
.zip파일 루트의java/lib디렉터리에 저장해야 합니다. 자세한 내용은 '각 Lambda 런타임의 레이어 경로' 문서를 참고하세요. - 레이어의 패키지는 Linux와 호환되어야 합니다. Lambda 함수는 Amazon Linux에서 실행됩니다.
서드파티 Java 라이브러리나 자체 Java 모듈·패키지를 담는 레이어를 만들 수 있습니다. 다음 절차는 Maven을 사용합니다. Gradle로 레이어 콘텐츠를 패키징할 수도 있습니다.
의존성을 정의하는 pom.xml 파일이 있는 Apache Maven 프로젝트를 만듭니다.
다음 예제는 JSON 처리를 위해 Jackson Databind를 포함합니다. <build> 섹션은 maven-dependency-plugin을 사용해 각 의존성을 단일 uber-jar로 묶는 대신 별도의 JAR 파일로 만듭니다. uber-jar를 만들고 싶다면 maven-shade-plugin을 사용하세요.
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.17.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<source>21</source>
<target>21</target>
<release>21</release>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.6.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
프로젝트를 빌드합니다. 이 명령은 모든 의존성 JAR 파일을 target/lib/ 디렉터리에 만듭니다.
mvn clean package
레이어에 필요한 디렉터리 구조를 만듭니다.
mkdir -p java/lib
의존성 JAR 파일을 java/lib 디렉터리로 복사합니다.
cp target/lib/*.jar java/lib/
레이어 콘텐츠를 압축합니다.
zip -r layer.zip java/
Compress-Archive -Path .\java -DestinationPath .\layer.zip
.zip 파일의 디렉터리 구조는 다음과 같아야 합니다.
java/
└── lib/
├── jackson-databind-2.17.0.jar
├── jackson-core-2.17.0.jar
└── jackson-annotations-2.17.0.jar
.zip 파일 루트에 java 디렉터리가 있고 그 안에 lib가 포함되어 있는지 확인하세요. 이 구조가 있어야 Lambda가 라이브러리를 찾고 import 할 수 있습니다. 각 의존성은 uber-jar로 묶지 않고 별도의 JAR 파일로 유지됩니다.
Lambda에서 레이어 생성
AWS CLI 또는 Lambda 콘솔로 레이어를 게시할 수 있습니다.
publish-layer-version AWS CLI 명령을 실행해 Lambda 레이어를 만듭니다.
aws lambda publish-layer-version --layer-name my-layer --zip-file fileb://layer.zip --compatible-runtimes java25
compatible-runtimes 파라미터는 선택 사항입니다. 지정하면 Lambda가 Lambda 콘솔에서 레이어를 필터링하는 데 이 파라미터를 사용합니다.
Lambda 콘솔의 Layers 페이지를 엽니다.
- Create layer를 선택합니다.
- Upload a .zip file을 선택한 뒤, 앞서 만든
.zip아카이브를 업로드합니다. - (선택) Compatible runtimes에서 레이어를 빌드할 때 쓴 Java 버전에 해당하는 Java 런타임을 선택합니다.
- Create를 선택합니다.
함수에 레이어 추가
레이어를 함수에 첨부하려면 update-function-configuration AWS CLI 명령을 실행합니다. --layers 파라미터에는 레이어 ARN을 사용합니다. ARN은 버전을 지정해야 합니다(예: arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1). 자세한 내용은 '레이어와 레이어 버전' 문서를 참고하세요.
aws lambda update-function-configuration --function-name my-function --cli-binary-format raw-in-base64-out --layers "arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1"
cli-binary-format 옵션은 AWS CLI 버전 2를 사용한다면 필수입니다. 이 옵션을 기본값으로 만들려면 aws configure set cli-binary-format raw-in-base64-out을 실행하세요. 자세한 내용은 AWS Command Line Interface User Guide for Version 2의 'AWS CLI supported global command line options'을 참고하세요.
Lambda 콘솔의 Functions 페이지를 엽니다.
- 함수를 선택합니다.
- Layers 섹션까지 스크롤한 뒤 Add a layer를 선택합니다.
- Choose a layer 아래에서 Custom layers를 선택한 뒤, 레이어를 선택합니다.
- 레이어를 만들 때 호환 런타임을 추가하지 않았다면 이 목록에 레이어가 나타나지 않습니다. 이 경우 레이어 ARN을 대신 지정할 수 있습니다.
- Add를 선택합니다.