Symfoware

Symfowareについての考察blog

GradleでAWS Lambda + Java用のデプロイパッケージを作成

AWS LambdaでJavaを動かしてみます。
Gradleでアップロード可能なzipファイル作成を試してみました。

動かすプログラム



例: ハンドラーの入出力に POJO を使用する (Java)
こちらのプログラムをそのまま試してみます。

手順を最初から。
helloディレクトリを作成して移動。
gradle initでプロジェクトの雛形を作成します。


$ mkdir hello
$ cd hello
$ gradle init



src/main/java/exampleディレクトリを作成。


$ mkdir -p src/main/java/example



ソースファイルを3つ作成。
※参考サイトと同じ内容です。

・HelloPojo.java


  1. package example;
  2. import com.amazonaws.services.lambda.runtime.Context;
  3. import com.amazonaws.services.lambda.runtime.RequestHandler;
  4. public class HelloPojo implements RequestHandler<RequestClass, ResponseClass>{
  5.     public ResponseClass handleRequest(RequestClass request, Context context){
  6.         String greetingString = String.format("Hello %s, %s.", request.firstName, request.lastName);
  7.         return new ResponseClass(greetingString);
  8.     }
  9. }



・RequestClass.java


  1. package example;
  2. public class RequestClass {
  3.     String firstName;
  4.     String lastName;
  5.     public String getFirstName() {
  6.         return firstName;
  7.     }
  8.     public void setFirstName(String firstName) {
  9.         this.firstName = firstName;
  10.     }
  11.     public String getLastName() {
  12.         return lastName;
  13.     }
  14.     public void setLastName(String lastName) {
  15.         this.lastName = lastName;
  16.     }
  17.     public RequestClass(String firstName, String lastName) {
  18.         this.firstName = firstName;
  19.         this.lastName = lastName;
  20.     }
  21.     public RequestClass() {
  22.     }
  23. }



・ResponseClass.java


  1. package example;
  2.         
  3. public class ResponseClass {
  4.     String greetings;
  5.     public String getGreetings() {
  6.         return greetings;
  7.     }
  8.     public void setGreetings(String greetings) {
  9.         this.greetings = greetings;
  10.     }
  11.     public ResponseClass(String greetings) {
  12.         this.greetings = greetings;
  13.     }
  14.     public ResponseClass() {
  15.     }
  16. }



これがLambdaで実行するプログラムになります。



ビルドとアップロード用のzip



.zip デプロイパッケージの作成 (Java)
こちらを参考に、アップロード用のzipファイルを作成します。

諸事情で依存関係を指定してリポジトリからjarファイルがダウンロードできなかったので、
手動でjarファイルをダウンロードしました。

必要なのは、aws-lambda-java-coreとaws-lambda-java-events。
aws-lambda-java-core
aws-lambda-java-events

各々、「jar」のリンクをクリックしてダウンロード。

886_01.png

hello/libフォルダを作成して配置します。

この時点で、こんな階層になりました。

886_02.png


build.gradle



サイトを参考に、build.gradleを編集します。


  1. apply plugin: 'java'
  2. sourceCompatibility = '1.8'
  3. targetCompatibility = '1.8'
  4. dependencies {
  5.     compile fileTree(dir: 'lib', include: '*.jar')
  6. }
  7. task buildZip(type: Zip) {
  8.     from compileJava
  9.     from processResources            
  10.     into('lib') {
  11.         from configurations.runtime
  12.     }        
  13. }
  14. build.dependsOn buildZip



LambdaがJava 8なので、targetCompatibilityに1.8を指定しています。
ここまで準備できたら、gradle buildを実行。


$ gradle build



hello/distributionsに「hello.zip」が出力されます。

886_03.png

このzipファイルをLambdaにアップロードします。



Lambda関数の作成とテストの実行



Lambdaは「一から作成」を選択しました。
適当に名前を入力。ランタイムはもちろん「Java 8」を選択します。

886_04.png

関数が作成できたら、アップロードで作成したzipファイルを指定。
ハンドラに「example.HelloPojo::handleRequest」を入力します。
※パッケージ名::関数名で指定

886_05.png

「テスト」をクリック。

886_06.png

適当に名前をつけて、テスト用に投入するデータを指定します。
見切れていますが、画面下部の保存をクリックして登録します。

886_07.png


  1. {
  2.     "firstName": "John",
  3.     "lastName": "Doe"
  4. }



テストボタン右の「保存」をクリック、設定を保存。
「テスト」をクリックして、テストを実行してみます。

886_08.png

ちゃんと実行できたようです。

886_09.png
関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2018/05/22(火) 22:21:26|
  2. Java
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<AWS Lambda + Javaで同梱した設定ファイルを読み込む | ホーム | VS Code + Ubuntu 18.04でJavaプログラムのデバッグ実行>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
https://symfoware.blog.fc2.com/tb.php/2186-1f2cf5bd
この記事にトラックバックする(FC2ブログユーザー)