ECSの設定値を3系統に分ける ─ タスク定義・Secrets Manager・Terraformの管理範囲

 公開 2026-09-14

ECSの環境変数とシークレットを、インフラ管理値・運用設定値・機密値の3系統に分ける。タスク定義の値の指定方式とTerraformのstateの性質から、誰がどの値を変え、変更がいつ反映されるかを整理する。

ECSで動くアプリケーションは、環境変数とシークレットを必ず持つ。 その値を誰が変え、変えた値がいつ反映されるのかを決めておかないと、設定値を1つ変えるたびにインフラ担当への依頼が発生するか、機密値がインフラの管理情報に紛れ込む。

本稿では、ECSのタスク定義とTerraformの性質から、設定値を3つの系統に分けて管理する考え方を整理する。

1. タスク定義の値の指定方式は2つある

ECSでは、コンテナの環境変数はタスク定義に含まれる。タスク定義を変えるには、新しいリビジョンを作る。 値の指定方式には次の2つがある。

方式
タスク定義に記録されるもの
値を変えたとき
直接指定(value
値そのもの
新しいタスク定義リビジョンを作り、再デプロイする
参照指定(valueFrom
Secrets ManagerなどのARN
参照先の値を変え、既存のタスク定義のまま新しいタスクを起動する

参照指定の値は、コンテナの起動時に注入される。値を更新しても、動いているコンテナには自動で反映されない。 反映するには、新しいタスクを起動するか、サービスを強制的に新規デプロイする必要がある。

したがって参照指定の利点は「値を変えても再デプロイが要らない」ことではない。 値を変えるたびにタスク定義のリビジョンを増やさずに済むことである。

2. Terraformで値を管理するときの注意

インフラ管理にTerraformを使う場合、もう一つの性質が加わる。 設定に直接書いた秘密値は、Terraformのstateとplanファイルに保存される。 変数を sensitive に指定するとCLIの表示では伏せられるが、保存そのものは防げない。

APIキーやパスワードの実値をTerraformで管理すると、stateやplanファイルを参照できる人と経路がすべて機密値へ到達できることになる。

一方、Terraformには「リソースは作るが、特定の属性の変更は追わない」という指定がある(lifecycleignore_changes)。 これを使うと、入れ物だけをTerraformで作り、値の変更はTerraformの外に置くことができる。

3. 3系統の分類

1章と2章の性質を組み合わせると、設定値は次の3系統に分けられる。

系統
タスク定義での指定
値を変える人
Terraformの扱い
値を変えたとき
インフラ管理値
直接指定
インフラ管理
入れ物も値も管理する
タスク定義の新規作成が必要
運用設定値(非機密)
直接指定
運用担当
入れ物だけを作る
タスク定義の新規作成が必要
機密値
参照指定
運用担当
ARNの文字列だけを管理し、実値は追わない
タスク定義の新規作成は不要。新しいタスクの起動で反映
インフラ管理が構成から決まる値を、運用担当が動作設定をそれぞれ直接指定の値として持ち、どちらもタスク定義の新しいリビジョンを経て新しいECSタスクに入る。運用担当が持つAPIキーやパスワードは参照指定の機密値として、新しいECSタスクの起動時に注入されることを示す図

運用設定値と機密値の保管先には、当社ではSecrets Managerを使っている。 キーと値の組をコンソールで確認・編集できるため、運用担当がブラウザから扱いやすいことを理由にした判断である。

4. 責務分離の成立

3系統に分けると、次の責任分担が成り立つ。

責任主体
担当範囲
インフラ管理
保管先(入れ物)を作る。インフラ管理値を維持する。運用設定値と機密値の実値は持たない
CI/CD
保管先から最新の値を集め、コンテナイメージと合わせて新しいタスク定義を組み立てる
運用担当
運用設定値と機密値を変更し、デプロイを起動して反映する
  • 運用担当は、インフラ管理の変更を待たずに設定値とシークレットを更新できる。
  • 機密値の実値はTerraformのstateとplanに入らない。
  • 値の反映はデプロイ(新しいタスクの起動)で行う、という1つの規則にそろう。「値を変えたのに反映されない」という状況を、仕組みとして説明できる。

この分け方はデプロイの方式に依存しない。Blue/Greenでもローリング更新でも同じ考え方を使える。 デプロイ方式の選び方はECS Blue/Greenデプロイの2つの方式で扱う。

5. まとめ

設計判断
内容
値の指定方式を使い分ける
機密値は参照指定にし、値の変更でタスク定義のリビジョンを増やさない
反映は新しいタスクの起動で行う
参照指定の値も起動時に注入されるため、反映の規則をデプロイに一本化する
実値をTerraformに入れない
stateとplanに保存される性質を踏まえ、Terraformは入れ物とARNだけを持つ
組み立てはCI/CDに寄せる
保管先から最新値を集めてタスク定義を作る処理を、インフラ管理から切り離す

設定値の管理で決めるべきことは、どこに保存するかよりも、誰が変え、いつ反映されるかである。 3系統に分けると、その答えが値の種類ごとに1つに定まる。