2026/2/20 に Kindle で購入し、7/19 に読み終えました。結構かかってしまいました。

AWSコンテナ設計・構築[本格]入門 増補改訂版 amazon.co.jp

ECS 自体は使ったことはあるのですが、業務でゼロから構築した経験はありませんでした。今後 ECS を使うことになりそうなこと、以前触ったのがかなり前だったことから、最近の状況を知るために購入しました。ハンズオンがあることも決め手になりました。

本書の構成

656 ページあります。目次は以下のとおりです。

  • Chapter 1 コンテナの概要
  • Chapter 2 コンテナ設計に必要なAWSの基礎知識
  • Chapter 3 基本的なAWSアーキテクチャデザイン
  • Chapter 4 ECS/Fargateを中心としたコンテナ設計
  • Chapter 5 AWSコンテナアーキテクチャの構築(基礎編)
  • Chapter 6 AWSコンテナアーキテクチャの構築(実践編)

Chapter 1〜4 が設計の座学、Chapter 5〜6 がハンズオンです。P301 から手を動かし始めるので、ページ数で言えば半分くらいがハンズオンになります。

ハンズオン

ハンズオンで使うリポジトリは 4 つです。

ペットショップの見学予約アプリを、フロントエンド・バックエンド・バッチの 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 よりこちらが推奨されている1Bottlerocket をベースにしており、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 してみたら、ちゃんと脅威として検知された。有効化するだけでこれなら、入れておいて損はなさそう。