この記事はハンズラボ Advent Calendar 2018 4日目の記事です。
サービス開発チームで主にフロントエンド(Angular + ngrx)を担当しているhxrxchangです。
#aws-serverless-expressについて
遊びでSPAを作る際のバックエンドを、もっと簡単作れないかなと思っていたとき、
potato4dさんのスライドで、aws-serverless-expressの存在を知りました。
node.jsのwebアプリケーションフレームワークであるExpressの書き方で、デプロイするとAPI Gateway + lambdaで動くという奇跡の代物です。
aws-serverless-expressの良さは上記のスライドに書いてあるので、触ってみて嵌ったところを共有させて頂きたいと思います。
AWS CLI
前提としてAWS CLIの設定が必要になります。
まだ設定が済んでない方はこちらの記事がわかりやすかったです。
https://qiita.com/yuyj109/items/3163a84480da4c8f402c
AWS Access Key IDやAWS Secret Access Keyが分からなくなったら、AWSマネジメントコンソールで
- IAMを開く
- 「ユーザー」をクリック
- 該当のIAMユーザーをクリック
- 認証情報タブを開く
でアクセスキーを作成することができます。
また複数のアクセスキーをaws-cliに登録している場合、今回使用するアクセスキーをdefalutにしないとダメでした。
これから打つコマンドで--profile
オプションをつけても想定通りに行かなかったのでご注意を。
とりあえずデプロイしてみる
まずはAWSが用意してくれてる雛形をデプロイして雰囲気を確かめましょう。
basic-starterのREADME通りです。
cloneする
git clone https://github.com/awslabs/aws-serverless-express.git && cd aws-serverless-express/examples/basic-starter
下記のコマンドを実行
npm run config -- --account-id="<accountId>" --bucket-name="<bucketName>" [--region="<region>" --function-name="<functionName>"]
S3バケット名は他の全ユーザーのバケット名と被らないように。
regionはap-northeast-1
を、function-nameは指定しなければデフォでAwsServerlessExpressFunction
になります。
デプロイ
npm run setup
このコマンドはnpm installとバケット作成とアプリケーションのデプロイをします。
この際にaws-cliでdefaultで設定されているアクセスキーが、accountIdのアカウントにないと上手く動きません。
確認
マネジメントコンソールでcloudformation(https://console.aws.amazon.com/cloudformation/home)
を開き、AwsServerlessExpressStackを選択、「出力」のApiUrlを開いてこんな画面が開いたら成功です。
また/users
にアクセスするとユーザー一覧のJSONが返ってくるように、app.js
に書いてある通りルーティングができていることが分かります。
API Gatewayを見てみよう
ん??
エンドポイント一個だけ?? /users
とかなかったっけ??
現在業務で作ってるアプリがserverless frameworkを使っているため、API Gatewayでルーティンングして、各エンドポイントに対応したlambda functionが動くという想定を勝手にしていました。。
aws-serverless-expressではエンドポイントとlambda functionは一個で、
lambda上でexpressが動いて、そのexpressがルーティングをしてくれているようです。
最後に
サーバレスなのに開発時にいちいちデプロイしないでローカルで動かせるのが最大の嬉しさだと思いました。
本当はDynamoやCognitoなどを組み合わせてアプリケーションを作るところまでやりたかったのですが、続編として別記事で書きたいと思います。(怠けましたすみません )
これからばんばん個人開発やっていくぞ!!
ハンズラボ Advent Calendar 2018、明日の担当は@jnuankさんです。
参考文献