Make Local Happiness

自分の幸せは自分で作る!!!

「サーバーレスアプリケーション開発ガイド」の感想

f:id:iwate_takayu:20180408171338j:plain

ここ2、3年はインフラ周りをDynamoDBでAPIはAPIGatewayとLambdaを組み合わせで サーバーレスな構成で開発しています。

ただ、サーバーレスな構成はある意味まだ「ドリーム」的なところがあり、 実際にどんな使い方ができるのかの実施例はまだ少なく、私自身も試行錯誤してる部分があります。

最近ですが、AWSの西谷さんが、たまたまTwitterでサーバーレスの献本を募集していたので、 面識はなかったのですがツイートしてみたら、なんと頂けたので読んでみた感想を書いていきます。

西谷さん ありがとうございます!!!

感想

誰もが躓く、疑問に思う点を解消しながら手を動かしてサービスを作ることができる本

だと思いました。 サーバーレスを使ってみたい人は主にインフラというよりは、フロントもしくはサーバーサイドのコードを書いている方だと思うのですが、 サーバーレスの構成で何かを作るといった時に、Cognito、API Gateway、Lambda、DynamoDB、S3と幾つかのサービスを組み合わせてサービスを作っていく必要があり、結構敷居が高いと思っています。

それに加え、結構ハマるポイントも多く、まだまだ「とっつきづらい」と思っています。
しかし、この本を読んで手を動かせばSPAのシステムを簡単にサーバーレスの構成で作れると思いました。

私の独断と偏見によるこの本で紹介されていた良かった点を書いて行きます。

章立てとしては、以下のようになっています。

Chapter1 サーバーレスアプリケーションの概要
Chapter2 Amazon Web Service(AWS)利用の準備
Chapter3 インフラを自動化しよう
Chapter4 Twitterのリアルタイム分析をしよう
Chapter5 写真投稿サイトをシングルページアプリケーションで作ろう
Chapter6 サーバーレスアプリケーションのライフサイクル管理
Chapter7 サーバーレスアプリケーションのトラブルシューティング

なぜサーバーレスの構成にした場合にDynamoDBを使っているのか?

これは最初なぜなんだろうと誰もが思うと思います。 DynamoDBはNoSQLの一種で基本的にRDSのような柔軟なSQLが使えません。 さらにJOINもできません。 そのため、今までのテーブルの設計思想が使えません。 検索が貧弱のため、ユースケースに応じたテーブル、インデックス設計をする必要がでてきます。

実際にはRDSも使えるのですが、 運用を考えた上でDynamoDBを使った方がいい理由がChapter5のp.87-90に詳しく書いてあります。 もしDynamoDBを採用する際に、上司が適当にRDS使ったらと言っても対応することができます。

AmazonさんのドキュメントにはLambdaから利用するDBでなぜDynamoDBを利用した方がいいのかは、 詳しく説明してくれていないので、これは非常に助かります。

※ もう1点掘り下げてほしい点があるので記載します。次回作でお願いします! 自分で調べろよという話しですがw

DBへのアクセスを減らす手段として、通常はキャッシュを検討すると思うのですが、サーバレスでどうやってキャッシュの仕組みを入れていくのか?

CognitoUserPoolのセットアップ

ブラウザからCognitoUserPoolを利用した認証を行う場合に、 Clientの作成でシークレットの生成は行わない(GenerateSecret)設定をする必要があります。 今はエラーメッセージが改善されてすぐに気づくかもしれないですが、私は昔ハマった経験がありました。

github.com

When creating the App, the generate client secret box must be unchecked because the JavaScript SDK doesn't support apps that have a client secret.

Cognitoのトークンを利用したAPI認証について

Cognitoで認証を行うとアクセストークン、IDトークン、リフレッシュトークンと3種類のトークンが付いて来ますが、 それぞれ用途が異なっており、API GatewayAPIの認証を行う場合にどのトークンを使えば最初は迷うと思います。

Chapter5ではAPIの認証部分も細かく実装ベースで書かれているので、これもどのトークンで認証すればいいかは迷わず進めます。

SAMの使い方

Chapter6でSAMの仕様について詳しく書かれています。 aws-sam-localというローカル環境を作る機能があり、Cognito以外はローカルで試すことができます。

まとめ

AWS系の本だとAmazon Management Console(AWSの管理画面)を使ってポチポチ何かすることが多いのですが、 Cliを多用して、コードを沢山書いてサーバーレスのシステムを作る手順が踏める数少ない本だと思いました。

サーバーレスで何かサービスを作ってみたいという方にはとてもオススメの1冊だと思います。

同じサーバーレスネタで最近「aws-amplify」というGoogleのFirebaseみたいに裏側をまとめたツールも出てきているので、 時間ができたら試してみたいと思いました。

aws.github.io