FOR PROFESSIONALSプロフェッショナル向け

LIaC・CI/CD・開発運用段4設計層とは

AWS CloudFormation とは何か|変更セット・ドリフト・StackSets で基盤をコードで持つ設計の入口

AWS CloudFormation とは何か|変更セット・ドリフト・StackSets で基盤をコードで持つ設計の入口

IaC の入門は済んでいて、テンプレートを書くこと自体は分かる。けれど複数のアカウントを持つ本番では、書いた後が問題になります。壊さずに変える方法、コンソールで直された変更の見つけ方、多数のアカウントへ同じ基盤を配る方法を、どの機能が受けるのか。この記事は CloudFormation の部品を「何を守る機能か」で並べ直し、基盤をスタックで持つときの設計の論点を整理します。

この記事の結論

  • CloudFormation は、テンプレートに書いた資源を「スタック」という単位でまとめて作る・変える・消すサービスです。
  • 本番の更新は、変更セットで先に影響(資源の置き換えがあるか)を見てから実行します。
  • コンソールでの手作業の変更は、ドリフト検出でテンプレートとの差として見つけます。
  • 多数のアカウント・リージョンへは StackSets を使います。Organizations 連携のサービスマネージド型なら、新しいアカウントにも自動で展開できます。
  • 削除や置き換えの事故は、終了保護・DeletionPolicy・スタックポリシーで止めます。

CloudFormation とは何か|テンプレートとスタックで「資源のまとまり」を持つ

AWS CloudFormation は、JSON か YAML で書いたテンプレートを読み、そこに書かれた AWS の資源をまとめて作るサービスです。作られた資源のまとまりはスタックと呼ばれ、作成・更新・削除はスタックを単位に行います。スタックを消せば、そこに属する資源がまとめて片付く(DeletionPolicy で変えない限り)のが、手作業との大きな違いです。

IaC の考え方そのものは IaC とは何か に任せて、ここでは設計に効く点だけを押さえます。

部品 役割 守っているもの
テンプレート 資源の定義書 再現性(同じ構成を何度でも)
スタック 資源のまとまり。変更と削除の単位 一貫性(まとめて作り、まとめて消す)
変更セット 更新前のプレビュー 本番の安全な更新
ドリフト検出 実物とテンプレートの差の発見 定義と実態のずれの把握
StackSets 多数のアカウント・リージョンへの展開 組織全体の統一

SAFE CHANGE LOOP更新の流れ

更新は確認してから実行し、実物との差はあとで見つける

  1. テンプレート

    資源の定義書

  2. 変更セット

    置き換えの有無を確認

  3. 実行

    スタックが更新される

  4. スタック

    資源のまとまり

  5. ドリフト検出

    手作業の差を発見

出典: AWS CloudFormation ユーザーガイド

本番の更新を安全にするには|変更セットで置き換えを先に見る

テンプレートを書き換えて更新すると、プロパティによっては資源が「その場で変わる」のではなく「新しく作り直されて古いものが消える」ことがあります。これが置き換え(Replacement)です。データを持つ資源でこれが起きると、事故になります。

変更セットは、更新を実行する前に「どの資源が追加・変更・削除されるか、置き換えが起きるか」を一覧で見せる機能です。流れは、変更セットを作る、中身を人が確かめる、問題なければ実行する、の3つです。承認を挟むパイプラインなら、この確認を承認の材料にできます。

注意点は、変更セットは「CloudFormation が把握できる範囲の予告」だということです。テンプレート外で変えられた実物の差は別問題で、それは次の章のドリフト検出の守備範囲です。

CHECK 1ここまでの確認

本番のスタックを更新する前に、資源が作り直しになるかどうかを見たいとき、使う機能はどれか?

答えと解説

答え: 2. 変更セット

変更セットは更新を実行する前のプレビューで、資源ごとの変更と置き換えの有無が分かります。ドリフト検出は更新ではなく「いまの実物」を調べる機能です。第2章を読み直してください。

手作業の変更はどう見つける?|ドリフト検出が見るものと見ないもの

障害対応では、急いでコンソールから設定を直すことがあります。その変更がテンプレートに戻らないと、次の更新で意図せず元に戻ったり、環境ごとの差になったりします。この「定義と実物のずれ」がドリフトです。

ドリフト検出は、スタックのテンプレートが期待する設定と、いまの実際の設定を比べ、差のある資源を示す機能です。差はプロパティ単位で、期待する値と実際の値が並んで見えます。

  変更セット ドリフト検出
いつ使う 更新の前 運用中(定期的に)
比べるもの 現行スタックと新しいテンプレート テンプレートと実際の資源
分かること 何がどう変わるか、置き換えの有無 テンプレート外で変えられた箇所

見つけるだけで、直しはしません。どちらに合わせるかは運用の判断です。また、ドリフト検出が対応する資源の種類や、検出の細かな範囲は公式ドキュメントの記述に従ってください。対応していない資源は、この機能では見えません。

CHECK 2ここまでの確認

障害対応の最中に画面から直接直された設定を、あとで見つけるにはどうするか?

答えと解説

答え: 3. ドリフト検出を実行する

ドリフト検出は、テンプレートが期待する設定と実際の設定を比べ、差のある資源を示します。見つけるだけで、元に戻す操作は含みません。第3章を読み直してください。

多数のアカウントへ配るには|StackSets と2つの権限モデル

組織で、監査用の IAM ロールや共通の設定を全アカウントに置きたい。アカウントごとにスタックを作る代わりに、StackSets を使います。管理者アカウントで1つのテンプレートから StackSet を作ると、指定したアカウントとリージョンの組み合わせに「スタックインスタンス」が作られ、そこに実際のスタックが置かれます。

THREE LEVELSStackSets の構造

1つの StackSet がアカウント×リージョンのスタックになる

  1. 管理者

    管理者アカウント — テンプレートから StackSet を作る

    展開の指示を1か所で出す

  2. StackSet

    StackSet — 配る定義と対象を持つ

    更新も1か所から

  3. 実体

    スタックインスタンス — アカウントとリージョンの組ごとのスタック

    ここに資源が作られる

出典: AWS CloudFormation ユーザーガイド(StackSets の概念)

権限の与え方が2種類あります。

TWO PERMISSION MODELS権限モデルの違い

新アカウントまで自動で届くのはサービスマネージド型

自己管理型

ロールを自分で用意する

  • 管理者側とターゲット側にIAMロールを用意
  • 対象はアカウントで指定
  • Organizations 外のアカウントにも使える

サービスマネージド型

Organizations と連携する

  • 必要なロールは CloudFormation が用意
  • 対象は OU で指定
  • 自動デプロイで新アカウントにも展開
出典: AWS CloudFormation ユーザーガイド(StackSets の概念)
  • 自己管理型: 管理者アカウントと各ターゲットアカウントに、必要な IAM ロールを自分で用意する。Organizations に属さないアカウントにも使える。
  • サービスマネージド型: AWS Organizations と連携し、対象を OU で指定する。必要なロールは CloudFormation が用意する。自動デプロイを有効にすると、OU に後から加わったアカウントにも展開される。

組織の基盤を配る用途では、新アカウントに自動で届くサービスマネージド型が第一候補になります。展開の失敗をどこまで許すか(失敗許容度)や同時に処理する数も StackSets の設定にあり、細かい扱いは公式ドキュメントで確認してください。

CHECK 3ここまでの確認

組織に後から加わるアカウントにも、同じスタックを自動で配りたい。StackSets ではどの組み合わせか?

答えと解説

答え: 2. サービスマネージド型の権限モデルで自動デプロイを有効にする

サービスマネージド型は AWS Organizations と連携し、対象の OU に自動デプロイを有効にすると新しいアカウントにも展開されます。第4章を読み直してください。

事故を止める仕組み|終了保護・DeletionPolicy・スタックポリシー

似た名前の防御が3つあり、止める対象が違います。

止める対象の違い

  • 終了保護: スタックの削除操作そのものを失敗させる。
  • DeletionPolicy: 削除されるとき、その資源を残す(Retain)か、スナップショットを取る(Snapshot)かを決める。削除自体は止めない。
  • スタックポリシー: スタック更新のとき、指定した資源の更新(置き換えや削除)を拒否する。Deny は Allow に優先する。

運用者が共通基盤のスタックを誤って消す事故には終了保護、データを持つ資源が消えても残したいなら DeletionPolicy、更新で特定の資源が作り直されるのを防ぐならスタックポリシーです。一つで全部は守れないので、事故の型ごとに組み合わせます。

CHECK 4ここまでの確認

共通の基盤スタックを運用者が間違って消す事故を、最も手軽に防ぐ設定はどれか?

答えと解説

答え: 1. 終了保護

終了保護はスタックの削除操作そのものを失敗させます。DeletionPolicy は「削除されるとき資源をどうするか」を決めるもので、削除自体は止めません。第5章を読み直してください。

スタックをどう分けるか|Outputs/ImportValue とネストの判断軸

1つのスタックに全部を入れると、変更の影響範囲が広がり、更新も遅くなります。分け方の軸は「変更の頻度と持ち主」です。ネットワーク基盤のように変わりにくく専任のチームがいるものと、アプリのように頻繁に変わるものは、別のスタックにします。

  • スタック間の参照: 基盤側が Outputs で値を Export し、アプリ側が Fn::ImportValue で参照する。IDを手でコピーしなくて済む。参照されている間は、エクスポート元のスタックの該当出力を消せないので、基盤の変更に制約が生まれる。
  • ネストされたスタック: 共通の部品(同じ構成の ALB など)を別テンプレートにして、親スタックの一部として取り込む。部品の修正を1箇所で済ませられる。

前者は「別の持ち主のスタックをゆるく結ぶ」、後者は「1つのまとまりを部品に割る」ためと覚えると、使い分けられます。

CDK・Terraform とどう使い分けるか(位置づけのみ)

CDK は、プログラミング言語で定義を書き、CloudFormation のテンプレートに変換してデプロイします。だから本記事の変更セット・ドリフト・StackSets はそのまま関わります。Terraform は別の道具で、状態を自前のファイルで持つ点が異なります。選ぶ軸は、チームが書きやすい言語と、状態をどこで持つかの方針です。細部は公式ドキュメントで確認してください。

まとめ

CloudFormation は部品ごとに守るものが違います。更新の前は変更セット、運用中の実物はドリフト検出、組織への展開は StackSets、事故は終了保護・DeletionPolicy・スタックポリシーで受けます。そのうえでスタックを変更の頻度と持ち主で分けると、基盤をコードで持つ設計の見通しが立ちます。次は、複数アカウントそのものの切り方を multi-account-sekkei で確かめてください。

READ ALSO — プロフェッショナル向け・段4 設計 マルチアカウント設計|アカウントを「境界」として使い、Organizations と SCP で組織のガードレールを引く

参照ソース

SCOREこの記事の確認テスト

0/4問 正解

各章の「ここまでの確認」に答えると、ここに集まります。結果はこの端末のブラウザにだけ残り、サーバには送りません。

PRACTICEこの記事の論点を練習問題で確かめる

この記事が扱うサービスの問題だけを続けて解けます。練習問題は Google でログインした人が使えます(練習問題の一覧)。

HAND IT OVER人に渡すなら

一言で説明するなら

CloudFormation は、建物の設計図と台帳を一体で持つ仕組みです。改装前に図面で影響を確かめ、無断の改造は台帳との差で見つけ、同じ図面を全支店へ配れます。

前提を持たない人にそのまま渡せる記事です。「後輩に説明する」「顧客に理由を伝える」の材料として。

FAQよくある質問

CloudFormation と CDK はどちらを使うのか?

二者択一ではありません。CDK はプログラミング言語で書いた定義を、最終的に CloudFormation のテンプレートに変換してデプロイします。つまり実際に資源を作る土台は CloudFormation で、CDK はその書き方の選択肢です。スタックの更新・ドリフト・StackSets といった本記事の論点は、CDK を使っても同じように関わります。

ドリフトは検出すれば自動で直るのか?

直りません。ドリフト検出はテンプレートと実際の設定の差を示すだけです。差を実物に合わせてテンプレートを直すか、テンプレートに合わせて実物を戻すかは運用の判断になります。具体的な扱いは公式ドキュメントで確認してください。

この記事の次は何を読めばよいのか?

複数アカウントの切り分けと統制の考え方は multi-account-sekkei、変更を流す仕組みは cicd-shikumi が受けます。この記事は、その間にある「基盤をスタックで持つ」部分の入口です。

SAME TRACK同じ領域の記事

CloudFormation のスタックが失敗したときの直し方|イベントを読み、ロールバックを続けるか止めるか決める運用
CloudFormation のスタックが失敗したときの直し方|イベントを読み、ロールバックを続けるか止めるか決める運用 段2 構成運用
デプロイ方式の選び方|インプレース・ブルー/グリーン・カナリアを「戻しやすさ」と「止められない度」で決める設計
デプロイ方式の選び方|インプレース・ブルー/グリーン・カナリアを「戻しやすさ」と「止められない度」で決める設計 段2 構成設計
CI/CD の仕組み|コミットから本番まで、ビルド・テスト・デプロイが自動で流れて止まる理由
CI/CD の仕組み|コミットから本番まで、ビルド・テスト・デプロイが自動で流れて止まる理由 段2 構成仕組み