LoginSignup
81
80

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-10-09

はじめに

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 の扱い
  • ローカルでの実行方法、デバッグ方法など
81
80
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
81
80