30
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Organization

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:

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
30
Help us understand the problem. What are the problem?