Edited at

aws-serverless-expressでサーバレス入門

この記事はハンズラボ 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を開いてこんな画面が開いたら成功です。

スクリーンショット 2018-12-02 14.35.31.png

また/usersにアクセスするとユーザー一覧のJSONが返ってくるように、app.jsに書いてある通りルーティングができていることが分かります。


API Gatewayを見てみよう

スクリーンショット 2018-12-02 15.22.00.png

ん??

エンドポイント一個だけ?? /usersとかなかったっけ??

現在業務で作ってるアプリがserverless frameworkを使っているため、API Gatewayでルーティンングして、各エンドポイントに対応したlambda functionが動くという想定を勝手にしていました。。

aws-serverless-expressではエンドポイントとlambda functionは一個で、

lambda上でexpressが動いて、そのexpressがルーティングをしてくれているようです。


最後に

サーバレスなのに開発時にいちいちデプロイしないでローカルで動かせるのが最大の嬉しさだと思いました。

本当はDynamoやCognitoなどを組み合わせてアプリケーションを作るところまでやりたかったのですが、続編として別記事で書きたいと思います。(怠けましたすみません :bow:)

これからばんばん個人開発やっていくぞ!!

ハンズラボ Advent Calendar 2018、明日の担当は@jnuankさんです。


参考文献 :bow:

https://speakerdeck.com/potato4d/ge-ren-kai-fa-zhe-falsetamefalseaws-serverless-express-number-kyotojs

https://qiita.com/yuyj109/items/3163a84480da4c8f402c

https://github.com/awslabs/aws-serverless-express/tree/master/examples/basic-starter