AWS 謹製 aws-serverless-express を使って APIGateway + Lambda + Node + Express で RESTful サービスの雛形を最速で作る

  • 27
    いいね
  • 1
    コメント

はじめに

AWS と言えば Lambda、Lambda と言えば サーバレス ですが、サーバレスでサービス全体を作るのはしんどいなと思っている昨今、皆様いかがお過ごしですか。

そんな折、10/04付け AWS ブログで以下の記事がポストされました。

「AWS Lambda と Amazon API Gateway で Express アプリケーションを実行」
https://aws.amazon.com/jp/blogs/news/running-express-applications-on-aws-lambda-and-amazon-api-gateway/

Lambda で Express が動くだと!? なんて日だ!

手順

  1. ローカル環境
    Lambda の Node は 4.3.2 なので、ローカル開発環境も、念のため、合わせておく

    $ nodebrew use v4.3.2
    $ node -v
    v4.3.2
    
  2. サンプルコード取得
    GitHub からサンプルコードを取得する

    $ git clone https://github.com/awslabs/aws-serverless-express.git
    $ cp -r ./aws-serverless-express/example ~/projects/yourProject
    $ cd ~/projects/yourProject
    
  3. コンフィグレーション
    以下で、コンフィグレーションを行う

    $ npm run config <アカウントID> <バケット名> ap-northeast-1
    
    パラメータ 意味
    アカウントID AWS コンソールの アカウント情報で表示されている ID
    バケット名 S3 のバケット名。全世界で唯一の名前である必要がある。
    指定したバケットが存在していないなら、自動で作成してくれる。
    Lambda にコード一式をアップロードするために使用されるだけ。

    スクリーンショット_2016-10-09_16_36_33.png

  4. セットアップ
    たった、これだけ。

    $ npm run setup
    
  5. 動作確認
    CloudFormation が CREATE_COMPLETE になれば、成功。
    Outputs タブに、作成された画面へのリンクが、表示されている。
    スクリーンショット_2016-10-09_16_35_08.png

    • ApiUrl
      サンプル users の RESTful API が表示されている。
      動く、動くよ! スクリーンショット_2016-10-09_16_21_48.png
    • APIGateway スクリーンショット_2016-10-09_16_35_33.png
    • Lambda
      このような Lambda 関数が生成される。これ自体は、たった4行。この Lambda 関数をいじることはない。 スクリーンショット_2016-10-09_16_35_49.png

カスタマイズ

  1. カスタマイズ
    app.js をカスタマイズしていけばよい。
    ここは、今まで通りの、普通の Node + Express だ。

  2. 反映
    次のコマンドで、AWSに反映できる。これだけだ。なんて日だ!

    $ npm run package-upload-update-function
    

ローカル テスト

70行目付近を修正して、ローカルの node で起動してテストできるようにしておきます。

  1. コード修正

    // The aws-serverless-express library creates a server and listens on a Unix
    // Domain Socket for you, so you can remove the usual call to app.listen.
    //app.listen(3000)
    process.env.PORT && app.listen(process.env.PORT)
    
  2. 起動

    $ export PORT=3000
    $ node app.js
    

おわりに

  • コマンドを 3,4 個実行するだけで、ここまでできるとは驚きです。
  • aws-serverless-express の登場で、いきなり、サーバレスでサービスを実現できる気がしてきた。
  • あとは、MongoDB のマネージドサービスがあればなぁ。

TODO

ぱっと思いつくだけでも、まだ先は長い。わかり次第、追記していきます。

  • Lambda での params, context の扱い
  • ローカルでの実行方法、デバッグ方法など