話題の記事

【書評】「サーバーレスアプリケーション 開発ガイド」は初心者から経験者まで AWS でアプリを作るお供にしたい

2018.03.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

2018年3月14日、マイナビブックスより「Amazon Web Servicesを使ったサーバーレスアプリケーション開発ガイド」が発売されました。著者の西谷さんより本書をいただいたので、書評を書きます。

511q14TBbnL.jpg

あれ…同じ日にサーバーレスの本が…?

気づいた方も多いと思いますが、同日3月14日にサーバーレス関連の書籍がもうひとつ発売されています。AWSによるサーバーレスアーキテクチャ です。こちら、私はまだすべて読んでいませんが、本記事のAmazon Web Servicesを使ったサーバーレスアプリケーション開発ガイドとの違いについて気になっている方もいると思います。

結論から言うとこの2冊は 完全に別物 です。

  • サーバーレスアプリケーション開発ガイドは、アプリケーション開発を通してサーバーレスの概要を把握し、AWSの使い方を学べる。Vue.jsによるSPAもあるよ!
  • AWSによるサーバーレスアーキテクチャ は、サーバーレスの可能性として、マイクロサービスのコンテキストを含むいくつかの設計パターンを提案し、大規模なアプリケーションを作って発展的なパターンを学習できる

ということで、「AWSによるサーバーレスアーキテクチャ」の内容を実装するために「サーバーレスアプリケーション開発ガイド」を手元に置くという状況になります!

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

とにかく「この本を見ながら手を動かせばサーバーレスアプリケーションを作ることができる」という点がありがたいです。詰まりがちなポイントもフォローあり。サーバーレスアプリケーションは シングルページアプリケーションと API Gateway + AWS Lambda によるバックエンド を指します。SPA まで作れるので、成果が目に見えて嬉しいです。

AWS アカウントを作成するところから丁寧に説明

以下の章構成です:

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

「ガイド」というタイトルどおり、サーバーレスアプリケーションの開発を丁寧に説明しています。ここでいう丁寧とは、ゼロスタートからでも、「Lambda Function は作ったことあるよ」というレベルの方でも、すぐに次のステップから手を動かせるということです。例えば「AWS、触ったこと無いんだけど」という方は、Chapter2 から始めることでアカウントを作成するところからガイドを得られます。また、「作った Lambda Function を活用したいな」と思っている方は、Chapter5 から始めることで API Gateway とつないでバックエンドとし、それを シングルページアプリケーション(SPA) から利用する方法を学べます。

どうなればOKなの?期待する結果までガイドあり

サーバーレスの話に限らず、AWS CLI の使い方やシェルコマンドの実行方法など、「これをやってね」という説明はあるものの、期待結果が併記されておらず、自分がいま正解をたどっているのかどうかわからない…という経験、ありませんか?本書は、

  • 出力結果があとで必要になるので、控えておく
  • AWSコンソールの画面がこんな感じになればOK
  • 特にエラーがでなければOK

など、コマンドを実行した結果の期待値も丁寧に添えてくれています。これは、ガイドを頼りに開発している立場からすると、とてもうれしいことです。

サーバーレス開発でハマりがちなとても細かいポイントのフォローも完璧!

私自身、シングルページアプリケーションや Lambda Function のバックエンドを開発しているときに、すご〜く細かいんだけどハマって時間を食われる という経験をしました。例を上げるとキリがありませんが、以下のようなことです。

  • Lambda Function で Python を使い、レスポンスJSON を生成するときに 数値は Decimal のデコーダが必要になる
  • API Gateway を SPA から利用する場合の CORS の設定方法
  • いわゆる標準的な「サインアップ」や「ログイン」機能を実現するために、Cognito User Pools はどのような設定が必要なのか
  • SPAでの状態の引き継ぎ方法。Cognito を使ったサインアップ時、仮登録から検証コードを入力する間の遷移で状態を持ち回す必要がある
  • SPAで、Cognito User Pools SDK のコールバック関数をPromiseでラップする方法。コールバックだと、Cognito へアクセスするレイヤと描画レイヤでわけて実装するときに使いにくいため

本書では 上記全ての対応例があります。もっとはやく読みたかった…。

完全にAWS特化、サービスの制限事項を考慮したアーキテクチャ選定理由を明記

サーバーレスアプリケーションはコスト効率が良く、アプリを動かすに至るまでのスピードが早いことが特長です。一方、フルマネージドサービスを駆使することから、各サービスの制限事項を把握しておかないと、思わぬところで運用のボトルネックになりえます。本書ではその一例として、画像データをどのようにアップロードするか という議論がありました。(Chpater5)

  1. Base64エンコードした上でサーバー側でデコードする
  2. ファイルデータを multipart/form-data で送る
  3. ファイルの実体をS3へ直接アップロードし、メタデータを別に保存する
  4. API Gateway と Lambda Function を組み合わせて署名付きURLの生成処理を回避する

結局、JSONでやりとりし、サーバーサイドの処理を極力なくす 理由から、ファイルをS3に、メタデータを DynamoDB に保存するようにしています。なお、ファイルの実体を API Gateway と Lambda Function でアップロードする考え方は、「Lambda Function のペイロード上限 6MG の制限を回避する」ため不採用です。このように、サーバーレスアーキテクチャで使うことになるサービスの制限事項について 具体的な制限の数字を明記 しつつ、実装アーキテクチャの選定理由を添えてくれるため、気持ちよく納得して進められます。

CI/CD、モニタリングもカバー

AWS SAM を利用した継続的なデプロイについても言及されています。個人的には、SAMについて「リファレンス+利用例」をセットで記載してくれいる点がありがたいです。ドキュメントってたいていリファレンスだけがあって、いざ使おうとするとトライ&エラーになりがちですよね。リファレンスに対するサンプルと、実際にデプロイ可能なファイルサンプルどちらもあるのが嬉しいです。

また、Amazon CloudWatch と AWS X-Ray を使ったトラブルシューティングも含まれています。これも良い!「どう使うか」という情報は充実していますが、「各項目をどう見るのか、どうなったら危ないのか」という点について解説があるのは本書ならではといえるでしょう。サーバーレスアプリケーションを運用するにあたり大きな武器になるはずです。

可能な限り AWS コンソールを使わずに CloudFomation / AWS CLI で構築

AWSコンソールは日進月歩です。1ヶ月後にはUIが変わっていることなんてザラです。本書はこのような状況に考慮してか、サーバーレスアプリケーションを構築する手順はほぼコマンドラインで実施するようにしています。コマンドラインにしておくことで、変更に強く、また仮にコマンドが変更になったとしても、何をしたいのか 意図 が読み手に伝わります。すると私たち自身が、ツールに頼り切るのではなく、やっていることを理解して変化に追従しやすいという、親切な設計になっています。

まとめ

サーバーレスアプリケーションを開発するときに是非手元に一冊欲しい本です。特に、詰まりがちなポイントでのフォローと、AWSサービスの制限事項を具体的な数値で明記してくれている点については、西谷さん執筆の本書ならではの内容といえます。是非手にとって読んでみてください!

弊社 サーバーレス開発部 のバイブルにさせていただきます。