AWS 基礎コース / Chapter 11

ECSタスク定義を、コンテナ実行の契約として読む

タスク定義はDockerイメージの指定だけではない。CPU・メモリ・ポート・ログ・権限を一つの版として束ね、ECSが起動できる形にする契約書である。

TL;DR

  1. クラスターは実行先の論理的な入れ物、タスク定義は起動するコンテナの設計図。
  2. 実行ロールはECSの起動準備、タスクロールはアプリ本体のAWSアクセスに使う。
  3. Fargateではネットワーク、セキュリティグループ、イメージ、ログを合わせて定義する。

01ECSの部品を「場所・設計図・実体」に分ける

クラスター、タスク定義、タスクの役割を混同しない

ECSクラスター、タスク定義、実行中タスクの関係
設計図のリビジョンから、実行中のタスクが作られる。

ECSクラスターはタスクを動かすための論理的な場所で、タスク定義は起動条件を記述した版、タスクはその実体だ。障害時は「どの版の、どのタスクか」で追跡する。

コンテナを変更しても、タスク定義の新しいリビジョンを使わなければ実行中の条件は変わらない。

02起動準備の権限とアプリ権限を分ける

どの処理が誰の権限でAWSへアクセスするかを明確にする

ECSタスク実行ロールとタスクロールの使い分け
起動に必要な権限と、アプリの権限を別のロールにする。

ECSがイメージを取得してログやシークレットを扱う処理と、コンテナのアプリがAWS APIを呼ぶ処理は主体が違う。二つのロールを分けると、権限を広げずに必要な操作を許可できる。

アプリがS3へ触れない問題を、実行ロールへ権限追加して解決しようとしない。まずタスクロールを確認する。

03Fargate起動に必要な宣言を揃える

イメージだけでは起動しない。ネットワークと観測先まで決める

Fargateタスクを起動するための定義要素
タスク定義とネットワーク設定が揃って初めてコンテナを起動できる。

Fargateではコンテナイメージ、リソース量、ポート、ログ設定に加え、タスクに接続するサブネットとセキュリティグループを揃える。どれか一つでも不一致なら、起動または通信で失敗する。

タスク定義の設定値はアプリの性能・通信・観測性に直結する。本番用の値をローカル用の感覚で決めない。

結論

  1. タスク定義はコンテナを起動するための版管理された契約。
  2. 実行ロールとタスクロールを目的別に分ける。
  3. Fargateではイメージ、リソース、ネットワーク、ログを一体で確認する。