この記事では、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の方が洗練され、より使いやすくなった印象を受けました。