CloudFormation・Systems Manager
AWS CloudFormation は AWS のリソースを「コード(テンプレート)」から自動で作るサービス、AWS Systems Manager は多数のサーバーをまとめて運用するためのサービスです。SAA では「同じ環境を手作業なしで何度も作りたい」「SSH のポートを開けずにサーバーを操作したい」「パスワードを安全に保管したい」といった要件から、適切な機能を選べるかが問われます。
ひとことで言うと: CloudFormation は「設計図から建物を建てる自動の工務店」、Systems Manager は「建った建物の管理人室」です。
たとえるなら、CloudFormation に設計図(テンプレート)を渡すと、同じ建物を何棟でも同じように建ててくれます。Systems Manager は、建物の部屋(サーバー)に合鍵なしで入ったり、全部屋の設備点検(パッチ適用)をまとめて行ったりする管理人室です。
このページで押さえる論点
- CloudFormation の基本(テンプレート・スタック・Infrastructure as Code)
- スタックの作成・更新(失敗時のロールバック、変更セット、ドリフト検出、削除ポリシー)
- 複数アカウント・リージョンへの展開(StackSets)と、スタックの分割
- Systems Manager の基本(マネージドノード、SSM Agent、IAM ロール、ネットワーク)
- Session Manager(ポートを開けないリモート接続)
- Run Command・Patch Manager・Automation・State Manager・Inventory
- Parameter Store と AWS Secrets Manager の使い分け
- 要件から機能を選ぶ(選択フロー)
CloudFormation の基本
手作業で VPC・サブネット・EC2・RDS を 1 つずつ作ると、時間がかかるうえ、本番環境と検証環境で設定が少しずつずれてしまいます。CloudFormation は、作りたいリソースを テンプレート(JSON か YAML 形式のテキストファイル)に書いておき、そのとおりに AWS がリソースを作るサービスです。このように、インフラをコードで管理する考え方を Infrastructure as Code(IaC) と呼びます。
テンプレートから作られたリソースのまとまりを スタック と呼びます。スタックを削除すると、その中のリソースもまとめて削除されます。CloudFormation 自体の利用料金はかからず、作られたリソース(EC2 など)の料金だけがかかります(一部のサードパーティーのリソースを除く)。
| テンプレートの主な部分 | 役割 |
|---|---|
| Resources(必須) | 作るリソース(EC2 インスタンス、S3 バケットなど)とその設定 |
| Parameters | スタックを作るときに入力する値(例: 環境名、インスタンスタイプ)。同じテンプレートを本番と検証で使い回せる |
| Mappings | リージョンごとの AMI ID など、条件に応じて値を切り替える対応表 |
| Outputs | 作った結果(例: ロードバランサーの DNS 名)を出力する。エクスポートすれば別のスタックから参照できる |
IaC には次の利点があり、試験ガイドの「インフラストラクチャの整合性を確保するオートメーション戦略」に当たります。
- 再現性: 同じテンプレートから、別のリージョンや別のアカウントにまったく同じ環境を作れる。災害対策(DR)で「別リージョンにすばやく環境を作り直す」ときにも使える
- 変更の管理: テンプレートを Git などで管理すれば、誰がいつ何を変えたかを追える
- イミュータブルインフラストラクチャ: 動いているサーバーを直接いじらず、新しい設定のリソースを作って入れ替える考え方。設定のずれが起きにくい
スタックの作成・更新
スタックを作るとき、途中で 1 つでもリソースの作成に失敗すると、既定ではロールバック(作成済みのリソースも削除して、元の状態に戻す)が行われます。中途半端な環境が残らないようにするためです。下の図で流れを確かめてみましょう。
スタックの作成に失敗するとどうなるか
※簡略化しています: リソースを 1 つずつ順番に作るように見せていますが、実際は依存関係のないリソースは並行して作られます。失敗したときに作成済みのリソースを残す設定もありますが、図では既定の動き(ロールバック)だけを示しています。
図で省いた点を補足します。失敗時にロールバックせず、正常に作成できたリソースを残す設定を選ぶこともできます。原因を調べて直した後、最初からやり直さずに続きから作れます。
更新前に影響を確かめる: 変更セット
動いているスタックのテンプレートを書き換えて更新すると、変更の内容によってはリソースが置き換え(削除して作り直し)になり、データが消えることがあります。変更セットを作ると、実際に更新する前に「どのリソースが変更・追加・削除・置き換えされるか」を確認できます。本番環境の更新では、変更セットで確認してから実行するのが安全です。
手作業の変更を見つける: ドリフト検出
CloudFormation で作ったリソースでも、コンソールなどから直接設定を変えることはできてしまいます。テンプレートと実際の設定がずれた状態をドリフトと呼び、ドリフト検出でずれを見つけられます。
スタックを消してもデータを残す: 削除ポリシー
リソースごとに DeletionPolicy(削除ポリシー)を指定できます。
| DeletionPolicy | スタックを削除したときの動き |
|---|---|
| Delete | リソースも削除する(多くのリソースの既定) |
| Retain | リソースを削除せずに残す。どのリソースにも指定できる |
| Snapshot | スナップショットを作ってから削除する(EBS ボリュームや RDS など、スナップショットに対応したリソースだけ) |
「スタックを削除しても S3 バケットや データベースのデータは残したい」という要件には、Retain や Snapshot を使います。
複数アカウント・リージョンへの展開
StackSets を使うと、管理者のアカウントから、1 つのテンプレートで複数のアカウント・複数のリージョンにスタックをまとめて作成・更新・削除できます。「組織の全アカウントに、同じ IAM ロールや AWS Config ルールを配りたい」という要件で使います。AWS Organizations と組み合わせると、組織に新しく加わったアカウントにも自動で展開できます。
テンプレートが大きくなったら、分けて管理します。
- ネストされたスタック: よく使う部品(例: ロードバランサーの設定)を別のテンプレートにして、親のスタックから呼び出す
- クロススタック参照: ネットワーク用のスタックが Outputs でエクスポートした値(VPC ID など)を、アプリ用のスタックがインポートして使う。担当チームごとにスタックを分けられる
なお、AWS CDK(使い慣れたプログラミング言語でインフラを定義するツール)や AWS SAM(サーバーレス向けの簡略な書き方)で書いた定義も、最終的には CloudFormation のテンプレートに変換されて展開されます。
Systems Manager の基本
AWS Systems Manager は、EC2 インスタンスやオンプレミスのサーバーをまとめて運用するための機能の集まりです。Systems Manager で管理できる状態になったサーバーをマネージドノードと呼びます。マネージドノードにするには、次の 3 つがそろっている必要があります。
| 必要なもの | 内容 |
|---|---|
| SSM Agent | サーバーで動き、Systems Manager からの指示を受け取るソフトウェア。多くの AWS 提供の AMI にはあらかじめ入っている |
| IAM の権限 | EC2 なら、Systems Manager と通信する権限を持つ IAM ロールをインスタンスプロファイルで付ける |
| ネットワーク | Systems Manager のエンドポイントに届く経路。インターネットに出られないプライベートサブネットなら、Systems Manager 用の VPC エンドポイント(インターフェイス型)を作る |
「Systems Manager の画面にインスタンスが表示されない」という問題では、この 3 つのどれかが欠けていないかを考えます。
Session Manager
Session Manager は、ブラウザ(コンソール)や AWS CLI からサーバーに接続して、コマンドを実行できる機能です。SSH で接続する方法と比べて、次の点が違います。
| 項目 | SSH + 踏み台サーバー | Session Manager |
|---|---|---|
| インバウンドポート | 22 番ポートを開ける必要がある | 開けなくてよい |
| 踏み台サーバー | プライベートサブネットへ入るには必要 | 不要 |
| 鍵の管理 | SSH キーの配布・管理が必要 | 不要(IAM で誰が接続できるかを制御) |
| 操作の記録 | 自分で仕組みを用意する | セッションのログを S3 や CloudWatch Logs に保存できる |
踏み台サーバー(バスティオンホスト)とは、外からの接続を一度受け止めて、その先のプライベートなサーバーへ中継するためのサーバーです。Session Manager なら、これを立てて守る手間がなくなり、攻撃の入り口になるポートも減らせます。
多数のサーバーをまとめて運用する機能
| 機能 | できること | 使う場面 |
|---|---|---|
| Run Command | 選んだサーバー群で、同じコマンドやスクリプトを一斉に実行する | 「100 台のサーバーで設定ファイルを書き換える」を今すぐ 1 回 |
| Patch Manager | パッチの基準(パッチベースライン)に沿って、OS などのパッチ適用を自動化する。メンテナンスウィンドウ(作業してよい時間帯)と組み合わせる | 「毎週日曜の深夜に、全サーバーへセキュリティパッチを当てる」 |
| Automation | AMI の作成やインスタンスの再起動など、AWS の操作を含む手順をランブック(Automation ドキュメント)として自動実行する | 定型の運用手順の自動化。AWS Config の自動修復からも呼び出される |
| State Manager | サーバーを決めた状態(ソフトウェアが入っている、設定がこうなっている)に保ち続ける | 「ウイルス対策ソフトが常に入っているようにする」 |
| Inventory | サーバーに入っているソフトウェアや設定の一覧を集める | 「どのサーバーに古いバージョンのソフトが入っているか調べる」 |
これらはオンプレミスのサーバーにも SSM Agent を入れて登録すれば使えるので、「AWS とオンプレミスのサーバーを 1 か所でまとめて管理したい」というハイブリッド環境の要件にも当てはまります。
Parameter Store と Secrets Manager
アプリの設定値(接続先の URL など)やパスワードを、プログラムのコードや設定ファイルに直接書くと、漏えいや変更漏れの原因になります。これらは専用のサービスに保管し、アプリが実行時に取り出すようにします。
Systems Manager の Parameter Store は、設定値や機密情報を階層的に(例: /prod/db/url)保管する機能です。機密情報は SecureString として KMS で暗号化して保管できます。パラメータには 2 つの階層があります。
| 項目 | 標準パラメータ | アドバンストパラメータ |
|---|---|---|
| パラメータの最大数(アカウント・リージョンあたり) | 10,000 | 100,000 |
| 値の最大サイズ | 4 KB | 8 KB |
| パラメータポリシー(有効期限など) | 使えない | 使える |
| 料金 | 追加料金なし | 料金がかかる |
AWS Secrets Manager は、データベースのパスワードや API キーなどの機密情報(シークレット)専用のサービスです。最大の違いは自動ローテーション(パスワードを定期的に自動で変更し、データベース側の設定も合わせて更新する機能)があることです。
| 要件 | 選ぶサービス |
|---|---|
| DB のパスワードを定期的に自動で変更したい | Secrets Manager |
| 設定値や機密情報を、なるべく低コストで保管したい | Parameter Store(標準パラメータ) |
要件から機能を選ぶ
ここまでの機能を、問題文の要件から選ぶ練習をしてみましょう。
質問に答えて使う機能を選ぶ
やりたいことを思い浮かべて「はい / いいえ」で答えてください。答えた経路が上から順に表示されます。
※簡略化しています: 代表的な機能だけを分岐に入れています。Automation・State Manager・Inventory、CloudFormation の変更セットやドリフト検出は省いています(本文の表を参照)。
問題文のキーワード → 選ぶべき答え
| 問題文によく出る言い回し | 選ぶべき答えと理由 |
|---|---|
| 「同じ環境を繰り返し作る」「インフラをコードで管理」「手作業のミスをなくす」 | CloudFormation |
| 「複数のアカウント・リージョンに同じリソースを展開」 | CloudFormation StackSets |
| 「更新前に、どのリソースが置き換えられるか確認」 | 変更セット |
| 「テンプレートと実際の設定のずれを検出」 | ドリフト検出 |
| 「スタックを削除してもデータは残す」 | DeletionPolicy の Retain(または Snapshot) |
| 「SSH のポートを開けずに」「踏み台サーバーなしで」サーバーに接続 | Session Manager |
| 「多数のサーバーで同じコマンドを実行」 | Run Command |
| 「パッチ適用を自動化」「メンテナンスウィンドウ」 | Patch Manager |
| 「DB の認証情報を自動でローテーション」 | Secrets Manager |
| 「設定値を一元管理」「低コストで」「階層的に」 | Systems Manager Parameter Store |
| 「プライベートサブネットのインスタンスを Systems Manager で管理」「インターネットに出さずに」 | Systems Manager 用の VPC エンドポイント(+ IAM ロールと SSM Agent) |
引っかけポイント
- 「CloudFormation のスタック作成が途中で失敗すると、作成済みのリソースは残る」→ ✕(既定)。既定ではロールバックして作成済みのリソースも削除される
- 「スタックを削除しても、中の S3 バケットや DB は必ず残る」→ ✕。多くのリソースは一緒に削除される。残すには DeletionPolicy の Retain や Snapshot を指定する
- 「パスワードの自動ローテーションには Parameter Store の SecureString を使う」→ ✕。自動ローテーションの機能があるのは Secrets Manager
- 「Session Manager を使うには、セキュリティグループで 22 番ポートを許可する必要がある」→ ✕。インバウンドポートは開けなくてよい
- 「SSM Agent が入っていれば、IAM ロールがなくても Systems Manager で管理できる」→ ✕。Systems Manager と通信する権限(EC2 ならインスタンスプロファイルの IAM ロール)とネットワーク経路も必要
- 「CloudFormation を使うと、テンプレート 1 つにつき利用料金がかかる」→ ✕。CloudFormation 自体は無料で、作られたリソースに料金がかかる(一部のサードパーティーのリソースを除く)
まとめ: SAA 試験で押さえるポイント
- インフラをコードで管理し、同じ環境を何度でも再現する → CloudFormation。複数アカウント・リージョンへ一度に → StackSets
- 作成に失敗したら既定でロールバック。更新前の影響確認は変更セット、手作業のずれはドリフト検出、削除後もデータを残すなら DeletionPolicy(Retain / Snapshot)
- Systems Manager で管理するには、SSM Agent・IAM ロール・ネットワーク経路(プライベートサブネットなら VPC エンドポイント)の 3 つが必要
- ポートを開けず、踏み台なしで接続 → Session Manager。一斉にコマンド実行 → Run Command。パッチの自動化 → Patch Manager
- DB パスワードの自動ローテーション → Secrets Manager。設定値を低コストで保管 → Parameter Store(標準は 10,000 個・4 KB まで・追加料金なし)
確認問題
参考リンク
AWS 公式ドキュメント(外部サイトが開きます)。
- AWS Certified Solutions Architect - Associate (SAA-C03) 試験ガイド
- AWS CloudFormation とは
- スタック障害オプションの概要
- 変更セットを使用して CloudFormation スタックを更新する
- ドリフト検出を使用してアンマネージド型設定変更を検出する
- DeletionPolicy 属性
- StackSets を使用したアカウントとリージョン間のスタックの管理
- AWS Systems Manager とは
- AWS Systems Manager Session Manager
- Session Manager の前提条件
- Systems Manager の VPC エンドポイントを使用して EC2 インスタンスのセキュリティを強化する
- AWS Systems Manager Patch Manager
- パラメータ階層の管理(標準・アドバンスト)
- AWS Secrets Manager シークレットのローテーション