Java Lambda 함수를 위한 계층 작업 - AWS Lambda

Java Lambda 함수를 위한 계층 작업

Lambda 계층을 사용하여 여러 함수에서 재사용하려는 코드와 종속성을 패키징합니다. 계층에는 일반적으로 라이브러리 종속 항목, 사용자 지정 런타임 또는 구성 파일이 포함됩니다. 계층을 생성하려면 세 가지 일반적인 단계를 거칩니다.

  1. 계층 콘텐츠를 패키징합니다. 즉, 함수에 사용하려는 종속성이 포함된 .zip 파일 아카이브를 생성합니다.

  2. Lambda에서 계층을 생성합니다.

  3. 계층을 함수에 추가합니다.

계층 콘텐츠 패키징

계층을 생성하려면 다음 요구 사항을 충족하는 .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 종속성을 사용하여 계층을 생성하려면 다음을 수행하세요.
  1. 종속성을 정의하는 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>
  2. 프로젝트를 빌드합니다. 이 명령은 target/lib/ 디렉터리에 모든 종속성 JAR 파일을 생성합니다.

    mvn clean package
  3. 계층에 필요한 디렉터리 구조를 생성합니다.

    mkdir -p java/lib
  4. java/lib 디렉터리에 종속성 JAR 파일을 복사합니다.

    cp target/lib/*.jar java/lib/
  5. 계층 콘텐츠를 .zip 파일로 압축합니다.

    Linux/macOS
    zip -r layer.zip java/
    PowerShell
    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
    참고

    파일의 루트 수준에 java 디렉터리가 포함되어 있고 그 안에 lib가 있는지 확인하세요. 이 구조는 Lambda가 라이브러리를 찾아서 가져올 수 있도록 합니다. 각 종속성은 uber-jar로 번들링되지 않고 별도의 JAR 파일로 유지됩니다.

Lambda에서 계층 생성

AWS CLI 또는 Lambda 콘솔을 사용하여 계층을 게시할 수 있습니다.

AWS CLI

publish-layer-version AWS CLI 명령을 실행하여 Lambda 계층을 생성합니다.

aws lambda publish-layer-version --layer-name my-layer --zip-file fileb://layer.zip --compatible-runtimes java21

호환되는 런타임 파라미터는 선택 사항입니다. 지정된 경우 Lambda는 이 파라미터를 사용하여 Lambda 콘솔에서 계층을 필터링합니다.

Console
계층을 생성하려면(콘솔)
  1. Lambda 콘솔의 계층 페이지를 엽니다.

  2. 계층 생성을 선택합니다.

  3. .zip 파일 업로드를 선택한 다음 이전에 생성한 .zip 아카이브를 업로드합니다.

  4. (선택 사항) 호환되는 런타임에서 계층을 빌드하는 데 사용한 Java 버전에 해당하는 Java 런타임을 선택합니다.

  5. 생성(Create)을 선택합니다.

함수에 계층 추가

AWS CLI

함수에 계층을 연결하려면 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 CLI 지원되는 글로벌 명령줄 옵션을 AWS Command Line Interface 사용 설명서 버전 2에서 참조하세요.

Console
함수에 계층을 추가하려면 다음을 수행하세요.
  1. Lambda 콘솔의 함수 페이지를 엽니다.

  2. 함수를 선택합니다.

  3. 아래로 스크롤하여 계층 섹션으로 이동하고 계층 추가를 선택하세요.

  4. 계층 선택에서 사용자 지정 계층을 선택하고 계층을 선택합니다.

    참고

    계층을 생성할 때 호환되는 런타임을 추가하지 않은 경우 여기에 계층이 나열되지 않습니다. 대신 계층 ARN을 지정할 수 있습니다.

  5. 추가를 선택합니다.