本文へスキップ

AWS ECS on Fargate アーキテクチャ図:サービス、タスク、ロードバランシング

ECS と Fargate で動く本番 Web サービスを図解します。ネットワーク、ALB、IAM、シークレット、スケーリング、Spot、デプロイを扱います。

· 創業者・開発者

公開日:

2 つの Availability Zone にまたがる VPC。ユーザーはパブリックサブネット間の Application Load Balancer に到達し、各プライベートサブネットの Fargate タスクに転送されます。タスクは Multi-AZ の RDS に問い合わせ、ECR、Secrets Manager、CloudWatch Logs には VPC エンドポイント経由で到達します。

イメージを push してサービスを作成しても、最初のタスクが RUNNING に到達しません。ResourceInitializationError で停止し、unable to pull secrets or registry auth と表示されます。イメージに問題はありません。タスクが置かれたプライベートサブネットには Amazon ECR や Secrets Manager へのルートがなく、Fargate がタスクを起動できないのです。

ECS on Fargate の問題の多くは、これに似ています。コンテナは動くのに、その周囲のネットワーク、ロール、ロードバランサーの設定が動かないのです。この記事では、Amazon ECS と AWS Fargate で動く本番 Web サービスを、ネットワークとロードバランシングから IAM、スケーリング、デプロイ、ECS と EKS の比較まで、コピーできる図とともに順に見ていきます。

ECS の概念を 1 つの表で

概念 内容 この例では
クラスター サービスとタスクの論理的なグループ prod
タスク定義 バージョン管理されたひな形:イメージ、CPU、メモリ、ポート、ロール、シークレット、ログ orders-api:42
タスク タスク定義の実行中のコピー。Fargate では専用のカーネル、メモリ、ネットワークインターフェースを持つ 2 から 10 個
サービス 希望するタスク数を維持し、タスクをロードバランサーに登録し、デプロイを実行する orders-api
キャパシティプロバイダー タスクの実行先:FARGATE、FARGATE_SPOT、EC2 Auto Scaling グループ、ECS Managed Instances FARGATE と FARGATE_SPOT

クラスターはネットワークの境界ではありません。タスクは、指定したサブネット内で、タスク専用のセキュリティグループに守られて動きます。ECS はオーケストレーションに課金しません。Fargate は各タスクの vCPU、メモリ、ストレージを秒単位で課金し、最低 1 分です。

ネットワーク:タスクごとに 1 つの ENI

Fargate のタスクは常に awsvpc ネットワークモードを使います。各タスクは専用の Elastic Network Interface(ENI)、サブネットのプライベート IP、専用のセキュリティグループを受け取ります(Fargate のタスクネットワーク)。これには 3 つの影響があります。

  • サブネットには余裕が必要です。 タスクごとに IP を 1 つ使い、AWS はサブネットごとに 5 つを予約します。2 つの AZ に 60 タスクなら 1 サブネットあたり 30 で、200% のローリングデプロイでは一時的に 60 が必要です。/24(利用可能 251)なら収まりますが、/27(利用可能 27)では足りません。
  • セキュリティグループはタスク単位で働きます。 コンテナのポートはロードバランサーのグループにだけ、データベースのポート 5432 はタスクのグループにだけ開けます。
  • タスクには AWS API への経路が必要です。 コードが動く前に、Fargate はタスクの ENI を通してイメージを取得し、シークレットを取得し、ログの送信を始めます。

プライベートサブネットからは、この経路は NAT ゲートウェイか VPC エンドポイントになります(US East の料金、執筆時点の 2026 年 11 月)。

経路 作成するもの コスト トレードオフ
NAT ゲートウェイ AZ ごとに 1 つ、またはリージョナル NAT ゲートウェイ 1 つ AZ あたり 1 時間 $0.045 と 1 GB あたり $0.045 サードパーティの API にも到達できる
VPC エンドポイント インターフェースエンドポイント ecr.api、ecr.dkr、logs、secretsmanager と、S3 ゲートウェイエンドポイント エンドポイントと AZ あたり 1 時間 $0.01 と 1 GB あたり $0.01。S3 ゲートウェイは無料 インターネットへの経路がまったくない

S3 ゲートウェイエンドポイントは省かないでください。ECR はイメージレイヤーを S3 に保存しています(ECR のインターフェースエンドポイント)。2 つの AZ に 4 つのインターフェースエンドポイントを置くと、データ料金を除いて月に約 $58 かかります(8 × $0.01 × 730 時間)。これは $66 の NAT ゲートウェイ 2 つに近い額です。したがって、データ料金とプライバシーではエンドポイントが、到達範囲では NAT が勝ります。2025 年 11 月以降、リージョナル NAT ゲートウェイは AZ をまたいで自動的に動作し、パブリックサブネットも不要です。タスクにパブリック IP を付ける方法も使えますが、すべてのタスクがセキュリティグループのルール 1 つでインターネットに露出します。AWS VPC 図では、ルートと NAT の配置を扱っています。

ロードバランサー:ターゲットグループとヘルスチェック

ALB には少なくとも 2 つの AZ のサブネットが必要で、それぞれ /27 以上で空きアドレスが 8 つ必要です。awsvpc のタスクは EC2 インスタンスではなく ENI なので、ターゲットグループのタイプは ip にします。ターゲットグループはサービスごとに 1 つ使い、タスクの登録と登録解除は ECS が行います。

設定 デフォルト 検討する値
ヘルスチェック間隔 30 秒 サービスが 10 秒未満で起動するなら 5 秒(AWS の推奨)
異常しきい値 2 回 失敗するタスクは約 1 分で切り離される
正常しきい値 5 回 新しいターゲットは 1 回の成功で足りる
登録解除の遅延(deregistration delay) 300 秒 短いリクエストなら 30 秒以下。古いタスクはこの間ドレインされうる
healthCheckGracePeriodSeconds 0 起動時間をカバーする。さもないと起動の遅いタスクが繰り返し置き換えられる

2025 年 11 月以降、ECS Express Mode はコンテナイメージから、この ALB、HTTPS、スケーリングの構成を作成できます。ロードバランサー図では、ヘルスチェックとドレインを一般的な形で扱っています。

IAM:実行ロールとタスクロール

ロールは 2 つあり、役割が異なります。

  • タスク実行ロールを使うのは、コードではなく ECS と Fargate エージェントです。イメージを取得し、ログを書き込み、タスク定義に書かれたシークレットを読みます(タスク実行ロール)。AmazonECSTaskExecutionRolePolicy は ECR とログをカバーします。secretsmanager:GetSecretValue は自分で追加し、カスタマーマネージドキーには kms:Decrypt も追加します。
  • タスクロールは、コードが AWS SDK を通じて S3 や SQS に使うロールで、ECS Exec にも必要です。

シークレットは環境変数として渡されます。

"secrets": [{
  "name": "DB_PASSWORD",
  "valueFrom": "arn:aws:secretsmanager:us-east-1:111122223333:secret:prod/orders/db-AbCdEf:password::"
}]

ECS はコンテナの起動時に値を読み取ります。ローテーションされたシークレットは実行中のタスクには届かないため、ローテーション後に再デプロイするか、アプリにタスクロールでシークレットを読ませてください。上のように JSON のキーを 1 つ選ぶには、現在の LATEST であるプラットフォームバージョン 1.4.0 が必要です。

スケーリング:ターゲット追跡と Fargate Spot

Service Auto Scaling では、まず ECSServiceAverageCPUUtilization、ECSServiceAverageMemoryUtilization、ALBRequestCountPerTarget のいずれかでターゲット追跡を使います。スケールアウトは速く、スケールインは遅く、デプロイ中はスケールインを一時停止します。複数のポリシーがある場合は、すべてが同意したときだけスケールインします。AZ ごとに少なくとも 1 つのタスクを維持してください。

Fargate Spot は最大 70% 安くなります。AWS が容量を回収するとき、タスクには 2 分間の警告が、停止コード SpotInterruption の EventBridge イベントと SIGTERM として届きます(Fargate のキャパシティプロバイダー)。stopTimeout の上限は 120 秒で、Fargate が自動的に通常の容量へ切り替わることはないため、base を設定します。

"capacityProviderStrategy": [
  { "capacityProvider": "FARGATE", "base": 2, "weight": 1 },
  { "capacityProvider": "FARGATE_SPOT", "weight": 1 }
]

最初の 2 つのタスクは常に通常の Fargate で動き、残りは 1 対 1 に分かれます。Spot 上のタスクが 1 つだけのサービスは、容量が戻るまで停止します。

デプロイ:ローリング、blue/green、linear、canary

ローリングがデフォルトです。minimumHealthyPercent が 100、maximumPercent が 200 なら、ECS は古いタスクを止める前に新しいタスクを起動します。ロールバック付きの deployment circuit breaker を有効にしてください。デフォルトでは、失敗したタスクが希望数の半分(最小 3、最大 200)に達するとデプロイを失敗にします。CloudWatch アラームでも同じロールバックを起動できます。

2025 年 7 月以降、ECS は CodeDeploy なしで blue/green デプロイを自分で実行し、2025 年 10 月以降は linear と canary も実行します。新しいリビジョンを 2 つ目のターゲットグループの背後で起動し、リスナーのトラフィックを移し、古いタスクをベイクタイムのあいだ残すので、ロールバックはトラフィックの切り替えで済みます。

戦略 トラフィックの移行 ロールバック 追加容量
Rolling タスクをバッチで置き換える 再デプロイ maximumPercent まで
Blue/green 任意のテストトラフィックの後、一度にすべて 切り戻す 2 倍
Linear 数分ごとに 10% など、等しいステップ 切り戻す 2 倍
Canary まず少量、その後に残り 切り戻す 2 倍

Lambda や一時停止のフックで、各ステージにゲートを設けられます。ALBRequestCountPerTarget に対するターゲット追跡は blue/green ではサポートされません。デプロイ戦略図でパターンを比較しています。

オブザーバビリティ

awslogs ドライバーには awslogs-group、awslogs-region が必要で、Fargate では awslogs-stream-prefix も必要です。2025 年 6 月 25 日以降、デフォルトは 10 MB のバッファを持つ non-blocking モードです。CloudWatch の不調でアプリが固まることはなくなりましたが、バッファが満杯になると行が失われます。拡張オブザーバビリティ付きの Container Insights、シェル用の ECS Exec、タスクの状態変更に対する EventBridge ルールを追加してください。停止理由(stopped reason)を見れば、タスクが終了した理由が分かります。トレースには、OpenTelemetry Collector をタスク内のサイドカーとして動かします。これは OpenTelemetry で扱うログ、メトリクス、トレースのパイプラインにおけるエージェント層です。

ECS と EKS

Amazon ECS Amazon EKS
コントロールプレーン 無料 クラスターあたり 1 時間 $0.10、月に約 $73
API AWS のタスク定義とサービス Kubernetes、Helm、オペレーター
コンピュート Fargate、EC2、ECS Managed Instances Fargate、EC2 ノードグループ、EKS Auto Mode
アップグレード コントロールプレーンには不要 Kubernetes バージョンごとに 14 か月の標準サポート、その後はクラスターあたり 1 時間 $0.60
組み込みのデプロイ Rolling、blue/green、linear、canary Rolling。ほかは Argo Rollouts などのツールで

料金は、執筆時点(2026 年 11 月)の EKS の料金ページによります。Kubernetes のポータビリティやエコシステムが必要なら EKS を選びます。その構成は Kubernetes アーキテクチャ図で見られます。短時間で終わるイベント駆動の処理なら、Lambda ベースのサーバーレス構成には常時稼働のサービスがまったく要りません。

ECS on Fargate の図

2 つの Availability Zone にまたがる VPC。ユーザーはパブリックサブネット間の Application Load Balancer に到達し、各プライベートサブネットの Fargate タスクに転送されます。タスクは Multi-AZ の RDS に問い合わせ、ECR、Secrets Manager、CloudWatch Logs には VPC エンドポイント経由で到達します。

22 個のコンポーネント · 10 個の接続

Archboard で開く
ダイアグラムの内容
  • VPC
  • Public subnet · AZ a
  • Public subnet · AZ b
  • Private subnet · AZ a
  • Private subnet · AZ b
  • Application Load Balancer
  • orders-api task
  • RDS for PostgreSQL
  • VPC endpoints
  • Users
  • Amazon ECR
  • Secrets Manager
  • CloudWatch Logs
  • HTTPS 443
  • HTTP 8080
  • SQL 5432
  • image pull
  • secrets at start
  • awslogs
2 つの Availability Zone にまたがる Fargate 上の ECS サービスです。パブリックサブネットの ALB がプライベートサブネットのタスク IP に転送し、タスクは ECR、Secrets Manager、CloudWatch Logs にインターネットではなく VPC エンドポイント経由で到達します。

図の読み方は次のとおりです。

  • AZ は行です。 各 AZ にパブリックとプライベートのサブネットが 1 つずつあります。ALB、RDS、エンドポイントは行の間にあります。どれも両方の AZ にまたがるためです。各パブリックサブネットに ALB ノードがあり、データベースには Multi-AZ のスタンバイがあります。
  • 青の実線はリクエストの経路です:ALB への HTTPS、AZ ごとに 1 つのタスクへの HTTP 8080、ポート 5432 の SQL。
  • 紫の破線はプラットフォームのトラフィックです:イメージの取得、シークレット、ログで、Fargate がタスク実行ロールを使って VPC エンドポイント経由で送ります。
  • 0.0.0.0/0 をインターネットゲートウェイにルーティングするのはパブリックサブネットだけです。
  • Markdown ブロックにはサービスの設定を一覧にしています。

ECS の図を分かりやすく描く

  • タスクは AZ ごとのサブネットの中に置きます。 すべてを囲む「ECS クラスター」の枠は、タスクがどこで動き、何に到達できるかを隠してしまいます。
  • AZ ごとに 1 つのタスクを描き、その横にスケーリングの範囲を書きます。
  • ECR、Secrets Manager、CloudWatch Logs への経路を示します。 経路が欠けているのは、タスクが起動しない一般的な原因です。
  • ALB のエッジにはポートとターゲットタイプを付け、破線のエッジの背後にあるロールは凡例で名前を示します。
  • 省くもの: サイドカー、CI/CD、DNS レコード。図の主題でない限り描きません。

AWS 3 層アーキテクチャのテンプレートは、EC2 で同じ VPC 構成を使っています。

Archboard で作る

  1. Google または GitHub でサインインし、ダイアグラムを作成します。
  2. ネットワークパックから VPC を追加し、その中に サブネット ノードを 4 つ、各 AZ にパブリックとプライベートを 1 つずつ置きます。
  3. クラウドパックから クラウドロードバランサー をパブリックサブネットの間に追加し、パブリックサブネットにはルートと ALB ノード用の テキスト ノートを追加します。
  4. クラウドパックから コンピューティング ノードを各プライベートサブネットに追加し、タスクのサイズをインスタンスタイプのフィールドに入力します。
  5. プライベートサブネットの間に、高可用性をオンにした マネージドデータベース と、VPC エンドポイント用の クラウドリソース を追加します。どちらもクラウドパックのものです。
  6. VPC の外に、ネットワークパックから インターネット、Docker パックから レジストリ、セキュリティパックから ボールト、DevOps パックから ログ を追加します。
  7. ラベル付きのエッジを描き、プラットフォームのトラフィックは破線にして、基本パックから設定を書いた Markdown ブロックを追加します。

CloudFormation からダイアグラムと Terraform からダイアグラムのツールを使うと、既存のスタックのコードから最初のたたき台を作れます。Terraform からサービスを図にするときは、たたき台を絞り込み、リクエストの経路を手で書き足します。

この例で使うダイアグラムノードは 15 個で、Free プランの範囲に収まります。

よくある質問

Fargate には awsvpc ネットワークモードが必須ですか? はい。Fargate の各タスクは専用のネットワークインターフェースとプライベート IP アドレスを受け取るため、ターゲットグループにはターゲットタイプ ip を使う必要があります。

ECS のタスクロールとタスク実行ロールの違いは何ですか? 実行ロールは、ECS がタスクを起動するためのものです。イメージの取得、シークレットの取得、ログの送信を行います。タスクロールは、アプリケーションのコードが自分の AWS 呼び出しに使うものです。

プライベートサブネットの Fargate タスクに NAT ゲートウェイは必要ですか? AWS サービスに対しては不要です。ECR、CloudWatch Logs、Secrets Manager のインターフェースエンドポイントと、S3 ゲートウェイエンドポイントがあれば足ります。NAT が必要なのは、インターネットに到達するときだけです。

ECS は CodeDeploy なしで blue/green デプロイをサポートしていますか? はい。ECS は 2025 年 7 月から blue/green を、2025 年 10 月から linear と canary をネイティブに実行しており、ベイクタイム、ライフサイクルフック、アラームに基づくロールバックにも対応しています。

ECS は EKS より安いですか? コントロールプレーンについては安いです。ECS にはオーケストレーション料金がなく、EKS クラスターは標準サポートで 1 時間 $0.10 かかります。Fargate と EC2 インスタンスの料金は、どちらでも同じです。

無料で始める — 1 シート、クレジットカード不要。

関連記事

← ブログに戻る

1分でキャンバスを開く

Google または GitHub でサインイン。1シートは無料で、チームが加わったらアップグレード。