はじめに
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
1. サンプルコード取得
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 のバケット名。全世界で唯一の名前である必要がある。<br>指定したバケットが存在していないなら、自動で作成してくれる。<br>Lambda にコード一式をアップロードするために使用されるだけ。|
![スクリーンショット_2016-10-09_16_36_33.png](https://qiita-image-store.s3.amazonaws.com/0/69410/6548c8ca-1341-5baa-832c-b31637f05dd6.png)
1. セットアップ
たった、これだけ。
```
$ npm run setup
- ApiUrl
サンプル users の RESTful API が表示されている。
動く、動くよ!
- APIGateway
- Lambda
このような Lambda 関数が生成される。これ自体は、たった4行。この Lambda 関数をいじることはない。
カスタマイズ
-
カスタマイズ
app.js をカスタマイズしていけばよい。
ここは、今まで通りの、普通の Node + Express だ。 -
反映
次のコマンドで、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)
-
起動
$ export PORT=3000
$ node app.js
# おわりに
- コマンドを 3,4 個実行するだけで、ここまでできるとは驚きです。
- aws-serverless-express の登場で、いきなり、サーバレスでサービスを実現できる気がしてきた。
- あとは、MongoDB のマネージドサービスがあればなぁ。
# TODO
ぱっと思いつくだけでも、まだ先は長い。わかり次第、追記していきます。
- [ ] Lambda での params, context の扱い
- [x] ローカルでの実行方法、デバッグ方法など