この記事では、Serverless Framework(以下Serverless)を使ってサンプルのWebアプリケーションをAWS LambdaとAmazon API Gatewayにデプロイします。
Serverlessとは、マイクロサービスで構成される、サーバレスなアプリケーションの構築を支援するフレームワークです。
現在のところ、AWS Lambdaで動作するアプリケーションで使うことができます。(Azure FunctionsやGoogle CloudFunctionsへの対応はWIPとなっています)
Node.jsとPythonのランタイムはこれまでもサポートされていましたが、現在ベータ版として公開されているv1.0では新しくJavaについてもサポートされています。
それでは、一足早く体験してみましょう。
インストール
node.js
適当な方法でインストールし、npmコマンドが実行できることを確認してください。
ドキュメント上バージョンの指定はありませんが、私はv4.4.7で動作を確認しました。
Serverless
betaを指定してインストールします。
| 1 2 | npm install -g serverless@beta serverless -v  # 1.0.0-beta.1 | 
AWS設定
もしまだの方は、aws configureコマンドを実行してKey ID, Access Keyの設定を行ってください。
一般的な手順ですので、手順の詳細は割愛します。
Serverlessのテンプレート作成
GradleとMavenを使用することができます。
| 1 2 3 4 5 6 7 | mkdir my-first-service && cd my-first-service # Gradleの場合 serverless create --template aws-java-gradle # Mavenの場合 serverless create --template aws-java-maven | 
Gradleの場合、下記のディレクトリ構成になっているはずです。
| 1 2 3 4 5 6 7 8 9 10 11 12 | . |-- build.gradle |-- event.json |-- serverless.env.yml |-- serverless.yml `-- src     `-- main         `-- java             `-- hello                 |-- Handler.java                 |-- Request.java                 `-- Response.java | 
リージョン変更
デフォルトではus-east-1が使われるので、ap-northeast-1に変更します。
ますはserverless.ymlです。コメントアウト行を有効にし、リージョンを書き換えます。
| 1 2 3 4 | # you can overwrite defaults here defaults:   stage: dev   region: ap-northeast-1 | 
次にserverless.env.ymlです。
| 1 2 3 4 5 6 7 | vars: stages:   dev:     vars:     regions:       ap-northeast-1:    # ここを書き換えました         vars: | 
ビルド&デプロイ
| 1 2 3 4 5 6 7 | # Gradleの場合 gradle build # Mavenの場合 mvn package serverless deploy  # 完了まで2,3分ほどかかります | 
正しくデプロイされたことをLambdaの実行によって確認しましょう。
| 1 | serverless invoke --function hello --path event.json | 
"Your function executed successfully!"という文字列を含む、Json形式のレスポンスが返ってきたと思います。
削除
デプロイを実行した際にCloudFormationのスタックが作成されているので、それを削除します。
| 1 | serverless remove | 
Webアプリにする
API Gatewayと連携させて、Webアプリケーションにしてみましょう。
serverless.ymlを編集します。
| 1 2 3 4 5 | functions:   hello:     handler: hello.Handler     events:       - http: GET hello/index    # この行を追加する | 
デプロイします。
| 1 | serverless deploy | 
上記のデプロイコマンドのレスポンスとして、endpointのURLが返ってきています。
curlでアクセスします。
| 1 | curl  https://[英数字の連続].execute-api.ap-northeast-1.amazonaws.com/dev/hello/index | 
先ほどと同様に"Your function executed successfully!"のメッセージを含むJson形式のレスポンスが取得できれば成功です。
動作確認が終われば、こちらも先ほどと同様に後始末をしておきましょう。
| 1 | serverless remove | 
むすびに
非常に簡単にAPI GatewayとLambdaを連携させたWebアプリケーションをデプロイすることができました。
Serverlessは、デプロイされるアプリケーションの詳細には関与しないため、既存のアプリケーションへの導入が比較的容易かと思います。
また、以前のバージョンとは設定ファイルの書き方が大きくなりますが、v1.0の方が洗練され、より使いやすくなった印象を受けました。

 
						