- 03-5820-1777平日10:00〜18:00
- お問い合わせ
今回はnodejsとjavaでlambdaレイヤーを使用する簡単な例を試してみたいと思います。
layer作成方法、注意点など解説していきたいと思います。
windows11
node.js v18
maven 3.9.4
今回作成する機能は、以下の通りです。
Layer部分:axiosというhttp通信ライブラリをlayerとして使用します。
lambdaファンクション部分:axiosを使用して、あるURLにアクセスし結果を表示します。
1.ディレクトリを作成します。
今回は「lambda_nodejs_test」というディレクトリを作成しました。
2.ディレクトリ内に移動し次のコマンド実行
npm init
package.jsonファイルが作成されます。
3.axiosライブラリインストールします。
npm install axios
node_modulesディレクトリが作成されます。
AWSにNodejsのLambdaを作成し次のコードを使用します。ランタイムはnode.js 18.xを使用。
Lambdaの名称は「layer_nodejs_test」とします。
以下はnodejsのコードです。
import axios from 'axios';
export const handler = async (event) => {
const response = await axios.get('https://www.distant-view.co.jp');
return response.data;
};
1.nodejsプロジェクト作成でインストールしたaxiosを入っているディレクトリをzip化する。
「node_modules」以下をzipに纏めます。
2.Layerの作成
aws cliで先ほどzip化したファイルを指定してLayerの作成をします。(ここはAWSの画面で作成してzipファイルをアップロードする方法でも良いです)
aws lambda publish-layer-version --layer-name nodejs-layer --zip-file fileb://node_modules.zip --compatible-runtimes node.js 18.x
3.作成したLayerをLambdaに設定する。これは画面でやりました。
正常に動作すると、指定URLのhtmlのコードが返ってきます。
これは、画面からテストで実行しても良いしコマンド実行しても良いです。
コマンドの実行例を下記に記述しておきます。
aws lambda invoke --function-name layer_nodejs_test --payload '{}' outputfile.txt
結果は以下の様なHtmlが返ってきます。(全部は載せてません)
<!DOCTYPE html>\n<html>\n<head prefix=\"og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# article: http://ogp.me/ns/article#\">\n <script src=\"/co
今回作成する機能は、以下の通りです。
Layer部分:okhttpというhttp通信ライブラリをlayerとして使用します。
lambdaファンクション部分:okhttpを使用して、あるURLにアクセスし結果を表示します。
1.次の様なディレクトリを作成します。
パッケージ名は「com.example」、Lambdaクラス名は「LambdaHander」にします。
mvnを使用するのでpom.xmlファイルを用意します。
lambda_java_test/
├── src/
│ └── main/
│ └── java/
│ └── com/
│ └── example/
│ └── LambdaHandler.java
├── pom.xml
2.pom.xmlファイル作成
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>lambda-java-test</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.1</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>1.2.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.2</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/java/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
「okhttp3」ライブラリを依存関係に設定、依存するライブラリを特定のディレクトリに格納する為、「maven-dependency-plugin」を使用するようにpom.xmlを作成します。
ビルドしたファイルは、以下のディレクトリに格納されます。
AWSにJavaのLambdaを作成し次のコードを使用します。ランタイムはjava11を使用。
1.LambdaHandlerクラス作成
Lambda実行のHandlerクラスを作成する。
package com.example;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;
public class LambdaHandler implements RequestHandler<Object, String> {
public String handleRequest(Object input, Context context) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://www.distant-view.co.jp")
.build();
try (Response response = client.newCall(request).execute()) {
return response.body().string();
} catch (IOException e) {
return "Error: " + e.getMessage();
}
}
}
2.ビルドを実行する。
LambdaHandlerファイルを作成したら次のコマンドを「lambda_java_test」ディレクトリで実行します。
npm clean package
このコマンドを実行すると、「/target/lambda-java-test-1.0.0.jar」に「LambdaHandler」のクラスファイルが格納され、「/target/java/lib」以下に依存関係のライブラリが格納されます。
3.Lambdaを作成する
今回はAWSの画面上で行いました。
ランタイムはjava11を使用。
Lambdaの名称は「layer_java_test」とします。
Javaの場合、AWS画面上にコードエディタが無いので、「/target/lambda-java-test-1.0.0.jar」をアップロードします。
1.依存関係ディレクトリをzip化
「/target/java/lib」のjavaディレクトリ以下をzip化します。
2.Layerの作成
aws cliで先ほどzip化したファイルを指定してLayerの作成をします。(ここはAWSの画面で作成してzipファイルをアップロードする方法でも良いです)
aws lambda publish-layer-version --layer-name java-layer --zip-file fileb://java.zip --compatible-runtimes java11
3.作成したLayerをLambdaに設定する。これは画面でやりました。
正常に動作すると、指定URLのhtmlのコードが返ってきます。
これは、画面からテストで実行しても良いしコマンド実行しても良いです。
コマンドの実行例を下記に記述しておきます。
aws lambda invoke --function-name layer_java_test --payload '{}' outputfile.txt
結果は以下の様なHtmlが返ってきます。(全部は載せてません)
<!DOCTYPE html>\n<html>\n<head prefix=\"og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# article: http://ogp.me/ns/article#\">\n <script src=\"/co
以上、nodejsとjavaでlambdaのレイヤー利用を試してみました。レイヤーにアップロードするzip内のディレクトリ名が適切でないと上手く動作しない点など分かりました。
その点が適切にすればレイヤー使用が上手くいく事も分かりました。