Java Lambda 関数のレイヤーを操作する - AWS Lambda

Java Lambda 関数のレイヤーを操作する

Lambda レイヤーを使用して、複数の関数間で再利用するコードおよび依存関係をパッケージ化できます。レイヤーには通常、ライブラリの依存関係、カスタムランタイム、または設定ファイルが含まれています。レイヤーの作成には、次の 3 つの一般的な手順が含まれます。

  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> セクションでは、maven-dependency-plugin を使用して、依存関係を 1 つの uber-jar にバンドルするのではなく、依存関係ごとに個別の 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. プロジェクトをビルドします。このコマンドを実行すると、依存関係のすべての JAR ファイルが target/lib/ ディレクトリに生成されます。

    mvn clean package
  3. レイヤーに必要なディレクトリ構造を作成します。

    mkdir -p java/lib
  4. 依存関係 JAR ファイルを java/lib ディレクトリにコピーします。

    cp target/lib/*.jar java/lib/
  5. レイヤーコンテンツを圧縮します。

    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
    注記

    zip ファイルには、ルートレベルに 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 コンソールの [Layers (レイヤー)] ページを開きます。

  2. [Create layer] (レイヤーの作成) を選択します。

  3. [.zip ファイルをアップロードする]を選択し、前の手順で作成しておいた .zip アーカイブをアップロードします。

  4. (オプション) [互換性のあるランタイム] では、 Java バージョンに対応する Java ランタイムを選択できます。

  5. [作成] を選択します。

レイヤーを関数に追加する

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"

AWS CLI バージョン 2 を使用している場合、cli-binary-format オプションは必須です。これをデフォルト設定にするには、aws configure set cli-binary-format raw-in-base64-out を実行します。詳細については、バージョン 2 の AWS Command Line Interface ユーザーガイドの「AWS CLI でサポートされているグローバルコマンドラインオプション」を参照してください。

Console
関数にレイヤーを追加する方法
  1. Lambda コンソールの [関数] ページを開きます。

  2. 関数を選択します。

  3. [レイヤー] セクションまで下にスクロールし、[レイヤーの追加] を選択します。

  4. [レイヤーの選択][カスタムレイヤー] を選択し、レイヤーを指定します。

    注記

    レイヤーの作成時に互換性のあるランタイムを追加しなかった場合、レイヤーはここには表示されません。代わりにレイヤー ARN を指定できます。

  5. [Add] (追加) を選択します。