pict3の日記

AWSネタを中心に

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

f:id:pict3:20150831125448p:plain

 

API Gatewayの登場によって、AWSの使いどころの幅がグッと広がったように思います。
とくにLambdaと組み合わせることで、EC2を使わないAWS環境もより実現しやすくなりました。

 

API GatewayLambdaの相性のたまものか、すでに両者を使うための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を付与してアクセスして確認します。 

f:id:pict3:20150831161617p:plain

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

・Lambda

f:id:pict3:20150831163045p:plain

API Gateway

f:id:pict3:20150831163056p:plain

 

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

API Gateway + Lambdaのお勉強にも、構成を自動的に生成してくれるfluctは役に立ちそうです!