この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
前回、Serverless ApplicationをJavaで作成する手段としてAWS Toolkit for Eclipse で Serverless Applicationを作成するという記事を書きました。この方法はEclipseからGUIで操作できることが特徴ですが、使用するライブラリの管理は標準のEclipseプロジェクトと同じ方式のようです。
今回はServerless Frameworkを用いてLambda FunctionをGradleプロジェクトとして作成し、Gradleでライブラリを管理する方法を試してみました。
プロジェクトの作成
先にも書いたようにServerless Frameworkを使用します。このフレームワークはnpmでインストールするため、Javaの他にnpmの実行環境も必要となります。以下、プロジェクトの作成手順となります。
1.Serverless Frameworkのインストール
プロジェクトを作成したいフォルダに移動し、以下のコマンドでServerless Frameworkをインストールします。私は好みでローカルフォルダ内にインストールしましたが、グローバル領域にインストールしたい場合は -g を付けて下さい。
$ npm install serverless
2.プロジェクトの作成
以下のコマンドでプロジェクトを作成します。
$ ./node_modules/.bin/serverless create --template aws-java-gradle
Serverless: Generating boilerplate...
_______ __
| _ .-----.----.--.--.-----.----| .-----.-----.-----.
| |___| -__| _| | | -__| _| | -__|__ --|__ --|
|____ |_____|__| \___/|_____|__| |__|_____|_____|_____|
| | | The Serverless Application Framework
| | serverless.com, v1.3.0
-------'
Serverless: Successfully generated boilerplate for template: "aws-java-gradle"
Serverless: NOTE: Please update the "service" property in serverless.yml with your service name
3.serverless.ymlの修正
上記のプロジェクト作成時の結果にも出ているように、サービス名を修正することにします。またステージとリージョンについても修正しました。修正したserverless.ymlは以下のようになります。
# Welcome to Serverless!
#
# This file is the main config file for your service.
# It's very minimal at this point and uses default values.
# You can always add more config options for more control.
# We've included some commented out config examples here.
# Just uncomment any of them to get that config option.
#
# For full config options, check the docs:
# docs.serverless.com
#
# Happy Coding!
service: serverless-lambda-sample # NOTE: update this with your service name
# You can pin your service to only deploy with a specific Serverless version
# Check out our docs for more details
# frameworkVersion: "=X.X.X"
provider:
name: aws
runtime: java8
# you can overwrite defaults here
# stage: dev
# region: us-east-1
stage: dev
region: ap-northeast-1
(以降略)
デプロイ
作成したプロジェクトには雛形のソースが記述されています。まずは何も修正しないでデプロイしてみたいと思います。
1.ビルド
デプロイする前にビルドを行う必要があります。今回はEclipseのメニューよりGradleのビルドを行いました。
2.デプロイ
以下のコマンドでデプロイを行います。
$ ./node_modules/.bin/serverless deploy
(中略)
Service Information
service: serverless-lambda-sample
stage: dev
region: ap-northeast-1
api keys:
None
endpoints:
None
functions:
serverless-lambda-sample-dev-hello: arn:aws:lambda:ap-northeast-1:xxxxxxxxxx:function:serverless-lambda-sample-dev-hello
CloudFormationが実行され、作成されたLambda FunctionのARNが出力されます。以下、CloudFormationとLambda Functionのスクリーンショットです。
CloudFormation
Lambda Function
Gradleにてライブラリの追加
先ほどのプロジェクトのGradleファイルにライブラリを追加してみます。今回はLombokを追加してみました。
1.build.gradle
build.gradleのLombokを追加します。以下のようになりました。
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
compile (
'com.amazonaws:aws-lambda-java-core:1.1.0',
'com.amazonaws:aws-lambda-java-events:1.3.0'
)
compile('org.projectlombok:lombok:1.16.12')
}
(以降略)
2.プログラム変更
Lombokを追加したので、プログラムを変更して利用してみたいと思います。Getter・Setterのみのクラスが雛形にあったので、それをLombokの@Dataを使用するよう変更しました。
(変更前)Request.java
package hello;
public class Request {
private String key1;
private String key2;
private String key3;
public Request() {
}
public String getKey1() {
return key1;
}
public String getKey2() {
return key2;
}
public String getKey3() {
return key3;
}
public void setKey1(String key1) {
this.key1 = key1;
}
public void setKey2(String key2) {
this.key2 = key2;
}
public void setKey3(String key3) {
this.key3 = key3;
}
}
(変更後)Request.java
package hello;
import lombok.Data;
@Data
public class Request {
private String key1;
private String key2;
private String key3;
}
3.ビルド
プログラムを変更後にGradleのビルドを行います。
4.デプロイ
以下のコマンドでデプロイを行います。
$ ./node_modules/.bin/serverless deploy
まとめ
今回はLambda Functionだけデプロイしましたが、設定を変更することによりAPI Gateway + Lambdaのデプロイも出来るようです。JavaでLambdaを開発する場合、AWS Toolkit for Eclipseと同じく、1つの選択肢になるのではないかと思います。