2026/2/20 に Kindle で購入し、7/19 に読み終えました。結構かかってしまいました。
ECS 自体は使ったことはあるのですが、業務でゼロから構築した経験はありませんでした。今後 ECS を使うことになりそうなこと、以前触ったのがかなり前だったことから、最近の状況を知るために購入しました。ハンズオンがあることも決め手になりました。
本書の構成
656 ページあります。目次は以下のとおりです。
Chapter 1コンテナの概要Chapter 2コンテナ設計に必要なAWSの基礎知識Chapter 3基本的なAWSアーキテクチャデザインChapter 4ECS/Fargateを中心としたコンテナ設計Chapter 5AWSコンテナアーキテクチャの構築(基礎編)Chapter 6AWSコンテナアーキテクチャの構築(実践編)
Chapter 1〜4 が設計の座学、Chapter 5〜6 がハンズオンです。P301 から手を動かし始めるので、ページ数で言えば半分くらいがハンズオンになります。
ハンズオン
ハンズオンで使うリポジトリは 4 つです。
- https://github.com/uma-arai/sbcntr-resources
- https://github.com/uma-arai/sbcntr-frontend
- https://github.com/uma-arai/sbcntr-backend
- https://github.com/uma-arai/sbcntr-batch
ペットショップの見学予約アプリを、フロントエンド・バックエンド・バッチの 3 つのコンテナで構築していきます。
Chapter 5(基礎編)でやったことは、ざっくりこんな感じです。
- CloudFormation テンプレートで VPC まわりのリソースを作成する
- frontend と backend の Docker image をビルドして、ECR に push する
- Blue/Green デプロイメント用のターゲットグループを 2 つ作り、ALB を作成する
- ECS のタスク定義・クラスター・サービスを作成する
- Aurora PostgreSQL を作成し、認証情報を Secrets Manager 経由でコンテナの環境変数に渡す
- CodeConnections、CodeBuild、CodePipeline で CI/CD パイプラインを作る
なお、本書では開発用の EC2 インスタンスを作って進める流れですが、私はローカルの macOS から構築しました。特に困ることはありませんでしたが、k6 を使用した負荷テストはローカルからだと面倒そうだったので、その時だけ EC2 インスタンスを作りました。
Chapter 6(実践編)は、運用で必要になるものを足していく章です。
- FireLens (Fluent Bit) のサイドカーコンテナを追加し、ログを S3 に送る
- ADOT Collector のサイドカーコンテナを追加し、X-Ray で分散トレーシングする
- Step Functions と EventBridge スケジューラでバッチ処理を構築する
- k6 で負荷テストをして、Auto Scaling の挙動を見る
- サービス間通信を Cloud Map によるサービスディスカバリから ECS Service Connect に移行する
- FIS でバックエンドのプロセスに SIGKILL を注入し、自動復旧を確認する
- GuardDuty の ECS Runtime Monitoring を有効化する
CodePipeline まで構築した後は、fork したフロントエンドのリポジトリの v2 ブランチに push するだけで自動デプロイされるようになります。ここまで来ると、それっぽいものが出来て達成感があります 🎉
料金対策
このハンズオンで一番気を遣ったのは料金でした。実際の請求額は以下のとおりです。
| 利用月 | 請求額 |
|---|---|
| 2026 年 6 月 | USD 16.62 |
| 2026 年 7 月 | USD 82.34 |
一番かかったのはインターフェース型の VPC エンドポイントです。どれくらい上がるのか様子を見たくて数日放置したら、モリモリ上がっていったのですぐ削除しました。
そういうことかと思い、ハンズオンを中断するたびに以下を実行するよう、コマンドで定型化しました。
- Aurora PostgreSQL クラスターを停止する(停止後は最大 7 日で自動的に起動される点に注意)
- VPC エンドポイントを CloudFormation のスタックごと削除する
- ECS サービスの desired count を 0 にする
再開時はこの逆です。予算アラートも設定しました。
ハンズオン用 AWS アカウントの作成
話が前後しますが、ハンズオンが終われば今回のリソースは全て不要になります。そこで事前に AWS Organizations を有効化し、ハンズオン専用の AWS アカウントを作って進めました。
仕事で AWS Organizations を使ったことはありますが、管理者として設定したことはなかったので、IAM Identity Center も含めて理解する良い機会になりました。
少しつまずいたところ
3 つありました。
1 つ目は、フロントエンドのロググループです。本書には「awslogs-create-group は削除」と書かれていたのですが、そのとおりにしたらロググループが作られず、デプロイが失敗し続けました。結局ロググループを手動作成して解決しました。バックエンドの方は CloudFormation テンプレートで作られていたようです。
2 つ目は、CodeBuild の二重トリガーです。ECR のタグをイミュータブルにしたところ、CodeBuild が失敗するようになりました。GitHub の Webhook と CodeBuild の両方でビルドがトリガーされ、同じタグを 2 回 push しようとしていたためです。Webhook を Disable にして解決しました。
3 つ目は、EventBridge の UI です。本書では「バス > ルール」から作ることになっていますが、今は「スケジューラ > スケジュール」から作る必要がありました。
まとめ
5 か月かかりましたが、ECS でひととおり構築できる感覚は掴めました。AWS コンソールでポチポチ設定したことは、後で Terraform を書く時にも活かせるはずです。
今回の増補改訂版は 2026/1/30 発売なので、ECS マネージドインスタンスや ECS Service Connect といった最近の話題も入っています。これから ECS を触る人には良い本だと思いました。
なお、この本の Kindle 版は固定レイアウト型で、ハイライトもメモも書けません。そのため、読書メモは private な GitHub Discussion に書きました。相当な量になりました。この記事はそのまとめです。
どなたかの参考になれば幸いです。
読書メモ
以下、個人的なメモ。
P46. ECS マネージドインスタンス
データプレーンの選択肢が増えていた。
- EC2
- Fargate
- ECS マネージドインスタンス
ECS マネージドインスタンスは 2025/9/30 に発表されたもので、AWS 公式ドキュメントでは Fargate よりこちらが推奨されている1。Bottlerocket をベースにしており、14 日ごとに新しいインスタンスが起動して入れ替わるため、ECS タスクも定期的な入れ替えが必要とのこと。
※ 本書のハンズオンでは Fargate を使用する。
P54. AWS Copilot はメンテナンスモードへ
ECS や App Runner の利用を簡素化するツールとして AWS Copilot が紹介されていたが、調べたらサポート終了 が発表されていた。
似たツールとして ecspresso がある。AWS Copilot がインフラを意識せずに使えるのに対して、ecspresso はインフラを深く理解したユーザーが使うことを想定しているらしい。
ecspresso は以前から興味があったので、触ってみる予定。
P111. ECS サービス間の接続方式
Chapter 2 で 3 つの方式が比較されていた。
- Cloud Map によるサービスディスカバリ
- 最もシンプル。ローリングアップデートなら比較的運用しやすい
- プライベート ALB/NLB 連携
- サービス間で認証処理を挟んだり、Sorry ページを実装したいケースで有用。当然 ALB/NLB の料金がかかる
- ECS Service Connect
- プロキシコンテナがサイドカーとして自動注入され、サービス間のトラフィックとログ・メトリクスを制御する
- 異なる VPC で稼働する ECS サービスからの接続も標準で可能
ローリングアップデートで良いなら Cloud Map、Blue/Green デプロイメントやメトリクス取得が必要なら残りの 2 つ、という判断になりそう。
※ ハンズオンでは最初に Cloud Map で構築し、P585 で ECS Service Connect に移行する。
P135. FireLens
コンテナのログ収集には CloudWatch Logs (awslogs) のほかに FireLens がある。Fluent Bit を使うやつはこれのことだったのか、と腑に落ちた。
CloudWatch Logs に転送してから S3 に送ることも出来るが、料金がかさむので FireLens を使ったほうが良いらしい。
余談だが、7/15 に CloudWatch Logs がストレージのインテリジェントな階層化を発表していた。アクセスパターンに応じて、標準・低頻度アクセス・アーカイブインスタントアクセスの 3 階層に自動で振り分けてくれるらしい。こちらも踏まえてログ戦略を考える必要がありそう。
🔗 Amazon CloudWatch Logs がストレージのインテリジェントな階層化を発表 - AWS
P214. Secrets Manager と SSM パラメータストア SecureString
この 2 つの使い分けをあまり理解できていなかったので、解説があって助かった。
自動ローテーションが要るなら Secrets Manager、そうでなければ SSM パラメータストアの SecureString という整理。
P250. AWS FIS による障害テスト
AWS のカオスエンジニアリングサービスである FIS (Fault Injection Service) を使うと、意図的に障害を注入してシステムの耐障害性を検証できる。
P594 のハンズオンでは、バックエンドに SIGKILL を送ってプロセスを強制停止させ、その後の自動復旧を確認した。実験テンプレートを作って「実験を開始」するだけなので、思ったより手軽だった。
P623. GuardDuty の ECS Runtime Monitoring
GuardDuty のコンソールから Runtime Monitoring (ECS) を有効化するだけで、各タスクにエージェントのサイドカーが自動起動する。
試しに ECS Exec でバックエンドのコンテナに入り、暗号通貨のマイニングプールサービスに nslookup してみたら、ちゃんと脅威として検知された。有効化するだけでこれなら、入れておいて損はなさそう。