技術書典 応援祭で購入して積んでいた「クラウドネイティブファーストストーリー」を読んでとても良かったので本記事で紹介します。
なぜ読んだのか
Amazon ECS(以下、ECS)における設定方法や CI/CD について知りたかったからです。恥ずかしながら ECS や EKS などコンテナオーケストレーションについてのキャッチアップが全然できていなくて今のクラウドネイティブ界隈からだいぶ遅れを取っていました。職場でも ECS の活用が増えてきており、流石にまずいと思い本書を手にとりました。
章立て
- 第1章 ようこそ、クラウドネイティブの世界へ
- 第2章 AWS で構築するクラウドネイティブサービス
- 第3章 コンテナサービスの構築
- 第4章 CI/CD の構築
第1章
1章ではクラウドネイティブとは何か?クラウドネイティブが求められる背景、コンテナおよびコンテナオーケストレーションの世界についてです。
なぜクラウドネイティブが流行ってきたのか?という疑問がある人は読まれると良いです。
第2章
本書で構築するクラウドネイティブサービスの構成図と構成する上で必要となる AWS サービスについての解説です。
第3章
ハンズオン形式で手をうごかしながらクラウドネイティブサービスを構築します。
まっさらな AWS アカウントで VPC、サブネット、セキュリティグループから始まり、ECS、Fargate、ECR でコンテナに関する設定、ALB/RDS といった Web アプリケーションによく使われている AWS サービスを一通り触っていきます。また、AWS WAF による脆弱性対策(XSS、SQL インジェクション)も行います。
丁寧な説明なので、AWS に慣れていない人や VPC やサブネットなどのネットワークを構築した人でも大丈夫です。ネットワーク設計も用途別にサブネットを分けており、必要最低限のポートと宛先のみセキュリティグループで許可するようにしているのでかなりきっちりしています。VPC エンドポイントでプライベートサブネットから S3 や ECR といった VPC に紐付かない AWS リソースへのアクセスに関しても説明されています。
ここまでの章をすすめると、ECS のサービス更新で CodeDeploy による Blue/Green デプロイができるようになります。
第4章
Code 4兄弟(CodeCommit、CodePipeline、CodeBuild、CodeDeploy)を駆使した CI/CD を構築します。CodeCommit にリポジトリを作成し、Push されると CodePipeline でパイプラインが走り、CodeBuild による Docker ビルドおよび ECR へのプッシュ、CodeDeploy による Blue/Green デプロイがされます。分かりづらい CodePipeline のアーティファクトについても細かに説明されています。
最終節では、開発運用・リリース戦略として環境別のリリースプロセスおよび構築のヒントが紹介されています。開発・ステージング・本番のマルチ AWS アカウントにおけるリリースサイクルを知りたい人は読まれると良いでしょう。
よかったところ
プロダクションレディなアーキテクチャ
よくあるハンズオン形式だとすべてパブリックサブネットだったりセキュリティグループのルールがゆるゆるだったりと、とても本番ではできない設定が多いのですが、本書ではきちんとしたネットワーク設計と必要最小限のセキュリティグループのルール、セキュリティのために VPC エンドポイントや AWS WAF も取り上げられており、本番環境での稼働を意識したつくりになっています。
「何にコストがかかるのか」が詳しい
私は最近 AWS コスト最適化にうるさいので、何にコストがかかるのかについてかなり気にします。本書では何をするとお金がかかるのか、お金がかかりやすいワナについての説明がしっかりされています。例えば ECR は保存したデータ量に応じた課金が発生するのでライフサイクルを適切に設定する、といった具合です。AWS 初心者のみならず中級者でもコスト意識が低い人もいるので、多大な金額が請求されないようにするためにじっくり読まれることをオススメします。
著者が苦労した点やハマったところを惜しみなく書かれている
AWS ドキュメントなどに書かれている内容をそのまま実行しようとすると、動かなかったりと意外と苦労することがあります。本書では著者が過去に苦労・悩んだことやハマったところを教えてくれるので同じようにハマったときにとても助かります。また、途中でエラーをあえて発生させることでエラーの回避方法について書かれているのもポイントが高いです。
まとめ
「クラウドネイティブファーストストーリー」は AWS におけるクラウドネイティブを実現するために必要なことを学べる良本でした。最近のアップデートに追いついていない人は本書を手にとられることをオススメします!
マルチ AWS アカウントにおけるリリース戦略についての本がもし執筆されることを期待しています(もし出たら即買いです)。