はじめに
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 が動くだと!? なんて日だ!
手順
-
ローカル環境
Lambda の Node は 4.3.2 なので、ローカル開発環境も、念のため、合わせておく$ nodebrew use v4.3.2 $ node -v v4.3.2
-
サンプルコード取得
GitHub からサンプルコードを取得する$ git clone https://github.com/awslabs/aws-serverless-express.git $ cp -r ./aws-serverless-express/example ~/projects/yourProject $ cd ~/projects/yourProject
-
コンフィグレーション
以下で、コンフィグレーションを行う$ npm run config <アカウントID> <バケット名> ap-northeast-1
パラメータ 意味 アカウントID AWS コンソールの アカウント情報で表示されている ID バケット名 S3 のバケット名。全世界で唯一の名前である必要がある。
指定したバケットが存在していないなら、自動で作成してくれる。
Lambda にコード一式をアップロードするために使用されるだけ。 -
セットアップ
たった、これだけ。$ npm run setup
-
動作確認
CloudFormation が CREATE_COMPLETE になれば、成功。
Outputs タブに、作成された画面へのリンクが、表示されている。
カスタマイズ
カスタマイズ
app.js をカスタマイズしていけばよい。
ここは、今まで通りの、普通の Node + Express だ。-
反映
次のコマンドで、AWSに反映できる。これだけだ。なんて日だ!$ npm run package-upload-update-function
ローカル テスト
70行目付近を修正して、ローカルの node で起動してテストできるようにしておきます。
-
コード修正
// 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)
-
起動
$ export PORT=3000 $ node app.js
おわりに
- コマンドを 3,4 個実行するだけで、ここまでできるとは驚きです。
- aws-serverless-express の登場で、いきなり、サーバレスでサービスを実現できる気がしてきた。
- あとは、MongoDB のマネージドサービスがあればなぁ。
TODO
ぱっと思いつくだけでも、まだ先は長い。わかり次第、追記していきます。
- Lambda での params, context の扱い
- ローカルでの実行方法、デバッグ方法など