Java Lambda 関数のレイヤーを操作する
Lambda レイヤーを使用して、複数の関数間で再利用するコードおよび依存関係をパッケージ化できます。レイヤーには通常、ライブラリの依存関係、カスタムランタイム、または設定ファイルが含まれています。レイヤーの作成には、次の 3 つの一般的な手順が含まれます。
-
レイヤーコンテンツのパッケージ化。これは、関数で使用する依存関係を含む .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>
セクションでは、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>
-
プロジェクトをビルドします。このコマンドを実行すると、依存関係のすべての JAR ファイルが
target/lib/
ディレクトリに生成されます。mvn clean package
-
レイヤーに必要なディレクトリ構造を作成します。
mkdir -p java/lib
-
依存関係 JAR ファイルを
java/lib
ディレクトリにコピーします。cp target/lib/*.jar java/lib/
-
レイヤーコンテンツを圧縮します。
.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 コンソールを使用して、レイヤーを発行できます。