fluctでお手軽!EC2レスなAWS(API Gateway + Lambda)〜導入編【cloudpack 大阪 BLOG】

API Gatewayの登場によって、AWSの使いどころの幅がグッと広がったように思います。
とくにLambdaと組み合わせることで、EC2を使わないAWS環境もより実現しやすくなりました。
API GatewayとLambdaの相性のたまものか、すでに両者を使うためのRailsのようなフレームワークが登場しています。フレームワークの名前はfluctと言い、r7kamuraさんにて開発されています。
今回は、fluctを使った簡単なwebサービスを作ってみます。
fluctのインストール
mac(10.10.5)にインストールしてみます。 fluctはNode.jsで動作します。インストールはnpmで行います。
また、fluctではaws-cliも内部で使うので、未設定ならこちらの設定も必要です。
$ brew install node
$ npm install fluct --global
インストールが終わったら、確認してみます。railsのようなコマンドが使えることが確認できます。
$ fluct --help
Usage: fluct [options] [command]
Commands:
d|deploy Deploy actions to AWS
l|deployments List recent deployments
g|generate Generate a new resource from (e.g. "action")
n|new Generate a new application
o|open Open the production root URL in your browser
r|routes List all routes
s|server [options] Launch a web server
Options:
-h, --help output usage information
fluctアプリケーションの構築
newコマンドでアプリケーションを作成します。
railsのように、ディレクトリが作られて、その中に環境のベースが作られます。
$ fluct new testapp $ cd testapp/
次にリソースを作ります。ここでは、"hello"という名前のリソースを作ります。
'Hello, world!'と出力するスクリプトが自動生成されます。せっかくなのでちょっと変更してみましょう。
$ fluct generate hello
$ vi ./actions/hello/index.js
$ cat ./actions/hello/index.js
exports.handler = function (event, context) {
context.succeed('Hello, no-ec2 world!');
};
つぎにリソースのpackage.jsonをいじります。今回はpathをリソース名に合わせておきます。
$ vi ./actions/hello/package.json $ cat ./actions/hello/package.json { "name": "hello", "private": true, "fluct": { "contentType": "text/html", "httpMethod": "GET", "path": "/hello", "statusCode": 200 } }
最後に、アプリケーション側のpackage.jsonを設定します。
IAMサービスにて、AWSLambdaBasicExecutionRoleのポリシーを付与したRoleを作っておきます。
AWSアカウントIDおよび上記のRole名を設定します。
$ vi ./package.json $ cat ./package.json { "name": "testapp", "private": true, "fluct": { "accountId": "123456789012", "restapiId": null, "roleName": "<Role名>" } }
restapiIdはあとで自動的に割り振られるので、ここではnullでOKです。
初回デプロイ時に割り当てられて更新されます。
では、デプロイしてみましょう!
$ fluct deploy Created zip: ./actions/hello/lambda.zip Uploaded function: hello Created restapi: hogefuga Updated endpoint: GET /hello2 Deployed: https://hogefuga.execute-api.us-east-1.amazonaws.com/production
表示されたURLに、pathを付与してアクセスして確認します。

生成されたAWSリソースも確認しておきましょう。
・Lambda


以上で、EC2を使わないWebアプリケーションがデプロイできました。