■ はじめに
https://dk521123.hatenablog.com/entry/2017/04/05/235618
の続き。 今回は、サーバレスなのに、サーバサイドって変な感じだけど、 Javaでの簡単なサンプルを記す
■ Lambda
料金
https://aws.amazon.com/jp/lambda/pricing/
より Lambda では 1 か月に 1,000,000 件の無料リクエストおよび 400,000 GB-秒のコンピューティング時間が無料利用枠となっています ただし、メモリ量によって、1 か月の無料利用枠の秒数が変わることに注意
■ 構文
http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/java-programming-model-handler-types.html
より 【出力型】 【関数名】(【入力型】 input, Context context) { ... }
■ 手順
* 今回は、Mavenを使って、構築する(Gradle の方がお勧め)
1)Eclipse / Maven を使用したパッケージの作成
[1-1] Eclipseを起動して、[File]-[New]-[Other]-[Maven]-[Maven Project] を選択 [1-2] [New Maven Project] ウィンドウで、[Create a simple project] を選択 (その他はデフォルトのまま)し、「Next」ボタン押下 [1-3] [New Maven Project] の [Configure project] ウィンドウで、 以下を入力し、「Finish」ボタン押下し、プロジェクト作成 ~~~~~ 1-3-1) Group Id: aws-demo 1-3-2) Artifact Id: AwsLambdaDemo (プロジェクト名になる) 1-3-3) Version: 0.0.1-SNAPSHOT 1-3-4) Packaging: jar 1-3-5) Name: AwsLambdaDemo 1-3-6) Description : Demo ~~~~~
2)コード作成/ビルド/JAR作成
[2-1] プロジェクト「AwsLambdaDemo」配下にある「pom.xml」をエディタで開き 以下の「サンプル」の「pom.xml」を参考に記入し、保存する [2-2] 「pom.xml」を右クリックし、[Run As...]-[5 Maven install]を選択 => 「[INFO] BUILD SUCCESS」出たらOK [2-3] プロジェクト「AwsLambdaDemo」配下にある「src/main/java」を右クリックし、 [New]-[Class]で、以下の3つのクラスを作成する (ソースコードの内容は、以下の「サンプル」の「Javaコード」配下を参考) ~~~~~ 2-3-1) com.demo.Main.java 2-3-2) com.demo.Request.java 2-3-3) com.demo.Response.java ~~~~~ [2-4] 「pom.xml」を右クリックし、[Run As...]-[1 Maven build]を選択 => 「[INFO] BUILD SUCCESS」出たらOK => 「[INFO] Replacing C:\【Workspace】\AwsLambdaDemo\target\AwsLambdaDemo-0.0.1-SNAPSHOT.jar ・・・」とあるので 「AwsLambdaDemo-0.0.1-SNAPSHOT.jar」をコピーする(これをアップする)
3)Lambdaファンクションを登録
http://engineer.recruit-lifestyle.co.jp/techblog/2016-11-22-serverless-architecture-lambda/
が参考になる [3-1] AWS にログインし、[Lambda]-[今すぐ始める]を選択し、以下を入力する [3-2] 「設計図の選択」で「Black Function」を選択 [3-3] 「トリガーの設定」で「API Gateway」を選択し、「次へ」ボタン押下 [3-4] 「関数の設定」で以下を入力し、「次へ」ボタン押下 ~~~~~ 3-4-1) 名前 : 任意の名前(例「HelloWorld」) 3-4-2) 説明 : 任意の名前(例「デモ」) 3-4-3) ランタイム : Java8 3-4-4) コードエントリタイプ : .ZIPファイルまたはJARファイルをアップロード 3-4-5) ハンドラ : com.demo.Main::execute (「パッケージ.クラス名::メソッド」で指定) 3-4-6) セキュリティ : Open ~~~~~
4)テスト
[4-1] [Actions]-[Edit/Test]を選択 [4-2] 入力欄に以下を入力し、「テスト」を選択 ~~~~~ { "greeting": "Hello", "name": "Tom" } ~~~~~ 以下が返ってくればOK ~~~~~ { "result"="Hello, Tom" } ~~~~~
■ サンプル
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>aws-demo</groupId> <artifactId>AwsLambdaDemo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>AwsLambdaDemo</name> <description>Demo</description> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-core</artifactId> <version>1.1.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.3</version> <configuration> <createDependencyReducedPom>false</createDependencyReducedPom> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
com.demo.Main.java (Lambda 関数ハンドラー)
package com.demo; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.LambdaLogger; public class Main { public Response execute(Request request, Context context) { LambdaLogger lambdaLogger = context.getLogger(); lambdaLogger.log("Greeting = " + request.getGreeting()); lambdaLogger.log("Name = " + request.getName()); return new Response(request.getGreeting() + ", " + request.getName()); } }
com.demo.Request.java
package com.demo; public class Request { private String greeting; private String name; public Request() { this.greeting = ""; this.name = ""; } public Request(String greeting, String name) { this.greeting = greeting; this.name = name; } public String getGreeting() { return this.greeting; } public void setGreeting(String greeting) { this.greeting = greeting; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } }
com.demo.Response.java
package com.demo; public class Response { private String result; public Response() { this.result = ""; } public Response(String result) { this.result = result; } public String getResult() { return this.result; } public void setResult(String result) { this.result = result; } }
■呼び出し側
* 以下の関連記事を参照のこと
Lambda ~ JavaScript / クライアントサイド編 ~
https://dk521123.hatenablog.com/entry/2017/05/25/233100
参考文献
公式サイト
パッケージの作り方の参考になる
http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/java-create-jar-pkg-maven-and-eclipse.html
Lambda 関数ハンドラー
http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/java-programming-model-handler-types.html
一般サイト
http://qiita.com/Keisuke69/items/fc39a2f464d14480a432
http://yamada.daiji.ro/blog/?p=271
環境変数
http://qiita.com/ukey-ino/items/719fab82f2d570b28a58
関連記事
Lambda ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2017/04/05/235618
Lambda ~ JavaScript / クライアントサイド編 ~
https://dk521123.hatenablog.com/entry/2017/05/25/233100