CloudFormation・Systems Manager

AWS CloudFormation は AWS のリソースを「コード(テンプレート)」から自動で作るサービス、AWS Systems Manager は多数のサーバーをまとめて運用するためのサービスです。SAA では「同じ環境を手作業なしで何度も作りたい」「SSH のポートを開けずにサーバーを操作したい」「パスワードを安全に保管したい」といった要件から、適切な機能を選べるかが問われます。

ひとことで言うと: CloudFormation は「設計図から建物を建てる自動の工務店」、Systems Manager は「建った建物の管理人室」です。

たとえるなら、CloudFormation に設計図(テンプレート)を渡すと、同じ建物を何棟でも同じように建ててくれます。Systems 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 には次の利点があり、試験ガイドの「インフラストラクチャの整合性を確保するオートメーション戦略」に当たります。

スタックの作成・更新

スタックを作るとき、途中で 1 つでもリソースの作成に失敗すると、既定ではロールバック(作成済みのリソースも削除して、元の状態に戻す)が行われます。中途半端な環境が残らないようにするためです。下の図で流れを確かめてみましょう。

再生型アニメ図解

スタックの作成に失敗するとどうなるか

テンプレート スタック VPC EC2 RDS

※簡略化しています: リソースを 1 つずつ順番に作るように見せていますが、実際は依存関係のないリソースは並行して作られます。失敗したときに作成済みのリソースを残す設定もありますが、図では既定の動き(ロールバック)だけを示しています。

図で省いた点を補足します。失敗時にロールバックせず、正常に作成できたリソースを残す設定を選ぶこともできます。原因を調べて直した後、最初からやり直さずに続きから作れます。

更新前に影響を確かめる: 変更セット

動いているスタックのテンプレートを書き換えて更新すると、変更の内容によってはリソースが置き換え(削除して作り直し)になり、データが消えることがあります。変更セットを作ると、実際に更新する前に「どのリソースが変更・追加・削除・置き換えされるか」を確認できます。本番環境の更新では、変更セットで確認してから実行するのが安全です。

手作業の変更を見つける: ドリフト検出

CloudFormation で作ったリソースでも、コンソールなどから直接設定を変えることはできてしまいます。テンプレートと実際の設定がずれた状態をドリフトと呼び、ドリフト検出でずれを見つけられます。

スタックを消してもデータを残す: 削除ポリシー

リソースごとに DeletionPolicy(削除ポリシー)を指定できます。

DeletionPolicyスタックを削除したときの動き
Deleteリソースも削除する(多くのリソースの既定)
Retainリソースを削除せずに残す。どのリソースにも指定できる
Snapshotスナップショットを作ってから削除する(EBS ボリュームや RDS など、スナップショットに対応したリソースだけ)

「スタックを削除しても S3 バケットや データベースのデータは残したい」という要件には、Retain や Snapshot を使います。

複数アカウント・リージョンへの展開

StackSets を使うと、管理者のアカウントから、1 つのテンプレートで複数のアカウント・複数のリージョンにスタックをまとめて作成・更新・削除できます。「組織の全アカウントに、同じ IAM ロールや AWS Config ルールを配りたい」という要件で使います。AWS Organizations と組み合わせると、組織に新しく加わったアカウントにも自動で展開できます。

テンプレートが大きくなったら、分けて管理します。

なお、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 などのパッチ適用を自動化する。メンテナンスウィンドウ(作業してよい時間帯)と組み合わせる「毎週日曜の深夜に、全サーバーへセキュリティパッチを当てる」
AutomationAMI の作成やインスタンスの再起動など、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,000100,000
値の最大サイズ4 KB8 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)

    引っかけポイント

    まとめ: SAA 試験で押さえるポイント

    確認問題

    参考リンク

    AWS 公式ドキュメント(外部サイトが開きます)。