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|generateGenerate 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アプリケーションがデプロイできました。