Java Lambda 함수를 위한 계층 작업
Lambda 계층을 사용하여 여러 함수에서 재사용하려는 코드와 종속성을 패키징합니다. 계층에는 일반적으로 라이브러리 종속 항목, 사용자 지정 런타임 또는 구성 파일이 포함됩니다. 계층을 생성하려면 세 가지 일반적인 단계를 거칩니다.
-
계층 콘텐츠를 패키징합니다. 즉, 함수에 사용하려는 종속성이 포함된 .zip 파일 아카이브를 생성합니다.
-
Lambda에서 계층을 생성합니다.
-
계층을 함수에 추가합니다.
계층 콘텐츠 패키징
계층을 생성하려면 다음 요구 사항을 충족하는 .zip 파일 아카이브로 패키지를 번들링합니다.
-
Maven 또는 Gradle이 참조하는 Java 버전이 배포하려는 함수의 Java 버전과 동일한지 확인합니다. 예를 들어 Java 21 함수의 경우
mvn -v
명령은 출력에 Java 21을 나열해야 합니다. -
.zip 파일의 루트에 있는
java/lib
디렉터리에 종속성을 저장해야 합니다. 자세한 내용은 각 Lambda 런타임에 대한 계층 경로 섹션을 참조하세요. -
계층의 패키지는 Linux와 호환되어야 합니다. Lambda 함수는 Amazon Linux에서 실행됩니다.
-
계층에 네이티브 바이너리 또는 실행 파일이 포함된 경우 해당 파일은 함수와 동일한 아키텍처(x86_64 또는 arm64)를 대상으로 해야 합니다.
타사 Java 라이브러리나 자체 Java 모듈과 패키지를 포함하는 계층을 생성할 수 있습니다. 다음 절차에서는 Maven을 사용합니다. Gradle을 사용하여 계층 콘텐츠를 패키징할 수도 있습니다.
Maven 종속성을 사용하여 계층을 생성하려면 다음을 수행하세요.
-
종속성을 정의하는
pom.xml
파일로 Apache Maven 프로젝트를 생성합니다.다음 예제에는 JSON 처리를 위한 Jackson Databind
가 포함되어 있습니다. <build>
섹션에서는 종속성을 단일 uber-jar로 번들링하는 대신 maven-dependency-plugin을 사용하여 각 종속성에 대해 별도의 JAR 파일을 생성합니다. uber-jar를 생성하려면 maven-shade-plugin 을 사용합니다. 예 pom.xml
<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>
-
프로젝트를 빌드합니다. 이 명령은
target/lib/
디렉터리에 모든 종속성 JAR 파일을 생성합니다.mvn clean package
-
계층에 필요한 디렉터리 구조를 생성합니다.
mkdir -p java/lib
-
java/lib
디렉터리에 종속성 JAR 파일을 복사합니다.cp target/lib/*.jar java/lib/
-
계층 콘텐츠를 .zip 파일로 압축합니다.
.zip 파일의 디렉터리 구조는 다음과 같아야 합니다.
java/ └── lib/ ├── jackson-databind-2.17.0.jar ├── jackson-core-2.17.0.jar └── jackson-annotations-2.17.0.jar
참고
파일의 루트 수준에
java
디렉터리가 포함되어 있고 그 안에lib
가 있는지 확인하세요. 이 구조는 Lambda가 라이브러리를 찾아서 가져올 수 있도록 합니다. 각 종속성은 uber-jar로 번들링되지 않고 별도의 JAR 파일로 유지됩니다.
Lambda에서 계층 생성
AWS CLI 또는 Lambda 콘솔을 사용하여 계층을 게시할 수 있습니다.