AWS Toolkit for Eclipse で Serverless Applicationを作成する
はじめに
AWS Toolkit for EclipseでAPI Gateway + LambdaのServerless Applicationが作成できるようになったので試してみました。JavaでServerless Applicationを作成しようと考えている方にとっては1つの選択肢になるのではないかと思います。
AWS Toolkit for Eclipse: Serverless Applicationsを参考にしたのですが、注意すべきポイントもあったので、それらも加えて書いていきます。
作成手順
作業の流れとしては以下となります。
- AWS Toolkit for Eclipseのインストール
- プロジェクト作成
- serverless.templateの確認
- デプロイ
AWS Toolkit for Eclipseのインストール
EclipseにAWS Toolkit for Eclipseの「AWS Toolkit for Eclipse Core」「AWS CloudFormation Tool」「AWS Lambda Plugin」をインストールしてください。
プロジェクト作成
ツールバーより「AWS Toolkit for Eclipse」を選択し「New AWS Serverless Project」を押下してください。
「Create a new Serverless Java Project」のダイアログが表示されます。「Project Name」には任意のプロジェクト名を、「Select a Blueprint」では今回は「article」を選択してデフォルトのサンプルアプリケーションをデプロイしてみます。
「Finish」を押下するとプロジェクトが作成されます。
serverless.templateの確認
プロジェクト内のserverless.templateを確認してみます。serverless.templateはSAM形式で記述されており、ここでの定義を元にCloudFormationが実行されてデプロイされるようです。SAMについては弊社諏訪の記事を参考にしてください。
デプロイする前にserverless.templateのバケット名、DynamoDBのテーブル名を変更します。今回はバケット名を「article-serverless-blueprint-bucket」、テーブル名を「article-serverless-blueprint-table」としました。特にバケット名については変更しないと、一意制約に引っ掛かることになりそうです・・・。
{ "Description": "Simple article service.", "Parameters" : { "ArticleBucketName" : { "Type" : "String", "Default" : "article-serverless-blueprint-bucket", "Description" : "Name of S3 bucket used to store the article content. If left blank a new bucket will be created.", "MinLength" : "0" }, "ArticleTableName" : { "Type" : "String", "Default" : "article-serverless-blueprint-table", "Description" : "Name of DynamoDB table used to store the article metadata. If left blank a new table will be created.", "MinLength" : "0" },
デプロイ
デプロイを行います。プロジェクトを右クリックし「AWS Web Services」-「Deploy Serverless Project」を選択します。
デプロイ用のダイアログが表示されるので、リージョン・Lambdaのバケット名・CloudFormationのスタック名を入力して「Finish」を押下します。
しばらくするとCloudFormationの処理が開始されます。
デプロイ確認
serverless.templateで指定したバケット・DynamoDBのテーブルと、API Gateway・Lambdaがデプロイされたかを確認してみます。
バケット
DynamoDB
Lambda
API Gateway
動作確認
では動作確認してみます。curlでデータをPOSTし、そのデータをGETしてみます。API GatewayのProdステージのURLを予め確認しておいて下さい。
$ curl --data "Sample Article!" https://API GatewayのURL/Prod/?id=1 Successfully inserted article 1 $ curl -X GET https://API GatewayのURL/Prod?id=1 Sample Article!