ちょっと話題の記事

AWS Systems Manager(SSM) の数多い機能群を攻略するための図を書いてみた 2021

SSM 攻略マップを作ってみました
2021.05.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

まずまとめ

できた図がこちら

img

AWS Systems Manager(SSM) を理解しようとする上で厄介なのは、 「インスタンス管理(左部分)」で使う機能群、それぞれに関連性があること だと思っています。 なので以降の説明は、 図の左半分 インスタンス管理 の説明が大半です。

さっそく インスタンス管理で使える機能を上から舐めていきましょう。

#1 なにはともあれマネージドインスタンス

img

なにはともあれ EC2インスタンスを マネージドインスタンス 化するところから始まります。 マネージドインスタンスにするために、ざっくりいうと 3つの作業が必要です。

  1. SSM エージェント をインストールすること
  2. 適切なIAMインスタンスプロファイル※ をアタッチしていること
  3. SSM関連エンドポイント※ へのアウトバウンド方向の通信ができること

※ 詳細は以下参照

晴れて マネージドインスタンス化できたら、SSMに入り浸る準備は完了です。 SSH接続することなくインスタンスの操作/管理ができるようになりました。

まずは フリートマネージャー を見てみましょう。 マネージドインスタンスのリスト、および 各マネージドインスタンスの情報を見ることが出来ます。

img

img

#2 マネージドインスタンスを直接操作しよう

img

セッションマネージャー によって SSHやRDPを使うこと無くブラウザからCLI操作ができます 。 踏み台サーバーが要らなくなりますね。 マネージドインスタンス化できれば、まずはこの機能を試してみましょう。

[SSM > セッションマネージャ] からも接続できますが、 以下のように EC2コンソールからも簡単に接続できます。

img

Run Command はマネージドインスタンスに対して タスクを実行する機能 です。 ここでいうタスクとは何か? SSMにおいて このタスクは SSMドキュメント と言われています。 (※ドキュメントについて詳細は次の節で説明)

マネージドインスタンスに対して AWS提供もしくはカスタマー管理のタスク(=SSMドキュメント) を実行できます。 汎用的なタスクとして AWS提供の AWS-RunShellScript があります。 マネージドインスタンスに対してパラメータに指定した シェルスクリプトを実行することができます。

セッションマネージャーは『SSHを使うこと無くコンソール接続できる』ことがメリットでしたが、 Run Command は 『コンソール接続すること無くコマンドを実行できる』 がメリットです。

#3 (自動化の前に) SSMドキュメントを知ろう

img

マネコンのサイドバー底 にある ドキュメント 、SSMを理解する上で一番大事だったりします。

img

SSM の各種機能で実施する定形アクションは SSMドキュメント の構文に従って書かれています。

  • セッションマネージャーで CLI操作を始めるタスク
  • Run Command でマネージドインスタンスに対して実施するタスク
  • オートメーション(後述) で AWS環境に対して実施するタスク
  • ほか

これらタスクは全て SSMドキュメントです。セッションマネージャーを使う上では SSMドキュメントはそこまで気にしなくても良いでしょう。 しかし、Run Command や オートメーション、さらにそれらにぶら下がる機能群を触る場合は、 SSMドキュメントの存在は知っておいたほうが理解がより進みます。

#4 ドキュメント実行を自動化しよう

img

Run Command で『コンソール接続すること無くタスクを実行できる』 ようになりました。 次は これらタスクを 自動実行/定期実行 したくなるでしょう。 そこで役立つのが メンテナンスウィンドウとステートマネージャーです。

メンテナンスウィンドウ はマネージドインスタンスに対して、 SSMドキュメント実行をスケジュールすることができる機能です。 メンテナンスウィンドウでは 変更作業(パッチインストールなど)を許可する時間帯 を指定します。 そして、その時間帯に設定した変更作業のタスク(SSMドキュメントなど)を実行します。

一方で ステートマネージャー も同じようにマネージドインスタンスに対して SSMドキュメント実行をスケジュールできますが、こちらは 「インスタンスをある状態に保つ」 ニュアンスが強いです。 ステートマネージャーは「インスタンスのあるべき状態」を 関連付け という リソースに定義します。 あるべき状態にするためのタスク(SSMドキュメントなど)を指定します。

両者の使い分けは 以下 AWSドキュメントに分かりやすく書かれています。ぜひ御覧ください。

ステートマネージャー または メンテナンスウィンドウ の選択 - AWS Systems Manager

ステートマネージャー と メンテナンスウィンドウ は、 マネージドインスタンスに対して同じような種類の更新を実行できます。 どちらを選択するかは、 システムコンプライアンスを自動化する必要があるか指定した期間中のみ優先度の高い、時間的制約のあるタスクを実行するか によって異なります。

#5 パッチを当てたりパッケージを配布したりしよう

img

メンテナンスウィンドウやステートマネージャーでパッチを当てたり、 パッケージを配布したりするタスク、これらを 機能として切り出したモノ が パッチマネージャーおよびディストリビューターです。

パッチマネージャー はインスタンスへのパッチ当てプロセスを自動化するための機能ですが、 実態は「 AWS-RunPatchBaseline SSM ドキュメント を実行して パッチ適用のタスクを実行する仕組み」です。 ほか パッチマネージャーを使う上で抑えておく必要がある概念として パッチベースラインパッチグループ があります。 ざっくりいうと パッチベースラインは「どのような内容でパッチを適用するか定義したもの」、 パッチグループは「パッチベースラインとパッチ対象インスタンスを紐付けるもの」です。 ※ 詳細は以下 図解ブログがとても参考になります。

ディストリビューター はインスタンスへのパッケージ配布を自動化するための機能ですが、 こちらも実態は「 AWS-ConfigureAWSPackage SSMドキュメントを実行して インスタンスにパッケージを配布する仕組み」です。 パッケージドキュメント と呼ばれる 「配布したいパッケージの情報を記述したSSMドキュメント」を事前に作成しておきます。 このパッケージドキュメントをパラメータに指定して、 AWS-ConfigureAWSPackage を実行することでインスタンスへのパッケージ配布が完了します。 ※ 詳細はやはり以下 図解ブログがとても参考になります。

#6 結果を眺めよう

img

この 2つは、 マネージドインスタンスの情報やステータスを確認するための機能 と言ってもいいでしょう。

コンプライアンス では、 パッチマネージャーによるパッチ適用の結果※ や、 ステートマネージャー定義している関連付けの実行ステータスなどを確認することができます。

※ パッチマネージャーの画面でも見られるようになっています (参考)

インベントリ はマネージドインスタンスからメタデータを収集して、情報表示する機能です。 OSやアプリケーション、ネットワーク設定などの情報を収集してくれます (メタデータのみ収集します。機密情報や実データへのアクセスは無いです)。 この機能は AWS-GatherSoftwareInventory というSSMドキュメントを ステートマネージャーで実行することで 使えるようになります。 AWS Configと連携しており 特定アプリケーションがインストールされているか、 検知を行うこともできます(▼参考)。

#7 ほか機能

img

インスタンス管理部分の長い説明が終わりました。 最後に 右半分(↑) の機能群の説明をざっくりしていきます。

オンプレサーバー管理

img

ハイブリッドアクティベーションオンプレサーバーをマネージドインスタンスとして扱えるようにする機能 です。 マネージドインスタンスとすることでオンプレサーバーに直接入ること無く 他 EC2インスタンスのように Run Command など実行できます。

変更管理

img

オートメーション が重要です。 これは SSMドキュメントですが、 EC2インスタンスだけでなく他 AWSリソースに対する一連の操作を実行できる点で、 Run Command とは違います。 (オートメーションで使われる SSMドキュメントは ランブック(runbook) と呼ばれます) 「EC2インスタンスの起動/停止」や 「承認プロセスを含んだ CFnスタック作成フロー」などがユースケースです。

Run Command 同様に、オートメーションもメンテナンスウィンドウやステートマネージャー を使うことで定期実行することができます。

オートメーション実行の可否を柔軟に指定したいときに Change Calendar は役立ちます。 カレンダーベースに、変更作業を 許可する期間 or 禁止する期間 を設定することで、オートメーションの定期実行を制御することができます。

Change Manager は変更管理プロセスに承認フローを容易に組み込める機能です。 実態はオートメーションといっていいでしょう。

運用管理

img

運用管理では、EC2関係なく AWS環境全般の監視トピックを集約/管理するための機能が揃っています。 以下 3つの SSM機能と PHD/CWダッシュボード をマネジメントコンソールから確認/操作できます。

  • エクスプローラー … EC2やSSM関連の情報だけでなく、 Trusted Advisor や Configルールの準拠/非準拠状況など 幅広いサービスの情報をダッシュボードに配置できる機能です
  • OpsCenter … CloudWatch アラームや EventBridge で発生するイベントを OpsItems という運用作業項目としてまとめ、 原因調査や解決の場として活用するための機能です
  • インシデントマネージャー … CloudWatch アラームや EventBridge イベントで検出された 異常な状態/イベントをインシデントとして管理する機能です。 メール/Slackへの通知や 電話連絡も可能です

▼ 参考

アプリ管理

img

アプリ管理も EC2/SSM関係無く、幅広い AWSサービスと関連があります。 AWS上のアプリケーションの設定やステータスを管理するために役立つ機能群です。

  • アプリケーションマネージャー … CFnスタックや 共通タグ、リソースグループなどで AWS上のコンポーネントをアプリケーションとしてグループ化する 機能です。 アプリケーションに関する情報を集約、可視化できます
  • AppConfig … アプリケーションの設定情報を保存、管理するための機能です。 Lambda や ECSで AppConfig から設定情報を取得、反映させます。
  • パラメータストア … 設定値や認証情報などのパラメータを保存。管理するための機能です。 AppConfig同様に、Lambda や ECS などで利用できるだけでなく、 CloudFormation におけるリソースパラメータとしても利用できます。 幅広く活用できる機能です。

おわりに

改めて図を載せます。

img

数多い SSMの機能を攻略していく際の参考になれば幸いです。

参考