COLUMN

AWS Systems Manager InventoryでEC2インスタンスを棚卸ししよう

川原です。普段はクラスメソッド株式会社でソリューションアーキテクトとして活動しています。今回は縁あってこちらのコラムに寄稿することになりました。

稼働している「サーバーがどのような設定か」や「どのようなソフトウェアが入っているのか」など、いわゆる「棚卸し」作業はよくあると思います。

クラウド(AWS)の利用によって、大量のコンピューティングリソース(EC2など)を迅速に建てられるようになりました。このような状況下で、各リソースのメタデータを手動でトラッキングするのは骨が折れます。

そんなときには、 AWS Systems Manager(特に Systems Manager Inventory) が役に立ちます。Systems Manager を使うことでサーバーを一元管理できます。

今回はこの Systems Manager、および その1機能である Inventory を紹介していきます。

1. Systems Manager(SSM), SSM Inventory について

根幹となるサービスである Systems Manager (SSM) について簡単に紹介します。

その後、SSMの1機能(本ブログのメイン)である Inventory について解説します。

1-1. AWS Systems Manager(SSM)とは

AWS Systems Manager (以降SSM) は管理・運用で役立つサービスです。

公式ページ(https://aws.amazon.com/jp/systems-manager/)には「AWS上およびマルチクラウドやハイブリッド環境内のリソースを管理」するサービスと記載があります。

画像引用: AWS Systems Manager | AWS

... 正直フワッとしていますよね。

一言だと、こう言わざるを得ないぐらいSSMは多機能です。なおかつ様々な他AWSサービスとも連携しています。

SSMの全体像は AWS公式の Black Belt を見るとよいでしょう。

「運用管理」、「アプリケーション管理」、「変更管理」、そして「ノード管理」それぞれのカテゴリごとに SSMのサブ機能がまとめられています。

画像引用: AWS Systems Manager Overview | AWS Black Belt Online Seminar

特に「ノード管理」の機能群が強力です。サーバー(EC2インスタンスやオンプレミスのサーバー)を "SSM管理下" にすることで、AWS上で各サーバーを操作/統制ができるようになります。

例えば以下のような操作ができます。

  • Session Manager : SSHキー管理することなくセッションを開始
  • Run Command : 複数インスタンスにコマンドを投入
  • Inventory : OS情報を取得 (今回紹介する機能)
  • ...その他にも多数

1-2. SSM Inventory とは

SSM Inventory はサーバーのインベントリデータを収集する機能です。

ここでいうインベントリデータは以下のようなメタデータです。

  • OS情報
  • インストールされているアプリケーション情報
  • ネットワーク情報 ...など

裏では「State Manager」と「AWS-GatherSoftwareInventory」が動いています。(が、これらは特に意識しなくてもインベントリ有効化〜活用は可能です。)

以降、気になる方向けの簡単な説明です。

SSM State Manager は、これもまた SSMの1機能です。サーバに対して特定のSSMドキュメントを定期実行する機能です。

SSMドキュメント自体は「サーバ上で実行するアクションがまとめられた手順書」ぐらいの認識で問題ありません。

そのSSMドキュメントの1つに AWS-GatherSoftwareInventory というものがあります。このドキュメントを使うことでサーバー内のインベントリデータが SSM Inventory へ送信されます。

AWS-GatherSoftwareInventory を State Manager を使って定期実行することで、SSM Inventory が成り立っています。

2. SSM Inventory のセットアップ手順

SSM Inventory のセットアップについて説明します。マネジメントコンソールから簡単に有効化できます。

2-1. 前提条件: サーバーをSSM管理下にする

前提としてサーバー(EC2インスタンス等) をSSM管理下にする必要があります。

SSM管理下にするには主に以下のような設定が必要です。

SSMエージェントがインストールされていること

Amazon Linux系など、AWSが提供する主要なAMIには、デフォルトでSSMエージェントがインストールされています。

カスタムAMIなどで入っていない場合は、初回のみSSH接続して、SSMエージェントをインストールする必要があります。以下を参考に手動でインストールしてください。

適切なIAMロールがアタッチされていること

EC2インスタンスに対してIAMロールをアタッチしましょう。

最低限 AmazonSSMManagedInstanceCore 権限が必要です。

各種SSMエンドポイントと疎通できること

SSMエージェントは以下のエンドポイントと HTTPSで通信を行うことで、各種SSM機能を実現しています

  • ssm( ssm.[region].amazonaws.com )
  • ec2messages( ec2messages.[region].amazonaws.com )
  • ssmmessages( ssmmessages.[region].amazonaws.com )

インターネットゲートウェイや NATゲートウェイへのルートが無いような、完全なプライベート環境である場合は、これらエンドポイントを置く必要が出てきます。

2-2. SSM Inventory を有効化する

Systems Manager のコンソールから [インベントリ > セットアップインベントリ] を選択します。

特に「対象のインスタンスを絞りたい」といった要件が無い場合は、基本的な設定(名前やターゲットなど)はデフォルトでOKです。

パラメータ では取得する情報を選びます。

ファイル(File) や Windows レジストリを ONにする場合は、

別途パス等の指定が必要です。

詳細設定 では「実行履歴をS3に書き込むか」を設定できます。書き込む場合は、出力先のS3バケット(およびプレフィクス)を指定します。

ここまで設定を入力して [セットアップインベントリ] を押下します。これで SSMインベントリ環境を作成できました。簡単ですね。

[補足] 内部的には SSM State Manager を使っていると、先ほど説明していました。セットアップインベントリ後には State Manager に新規関連付けが作成されています。

2-3. [任意] リソースデータ同期を作成する

オプションでリソースデータ同期を作成できます。これはS3へSSM Inventoryデータをダンプする機能です。

リソースデータ同期作成にあたって、必要な手順を以下に記載します。

S3バケットの用意と、適切なバケットポリシーの設定

SSM Inventory データ格納用のS3バケットを用意します。"ssm.amazonaws.com" サービスからの S3 PutObject 等の権限を許可する必要があります。

バケットポリシーは以下公式ドキュメントを参照ください。

リソースデータ同期の作成

マネジメントコンソールの [インベントリ > リソースデータの同期] から

[リソースデータの同期の作成] を選択して作成できます。

2-4. [任意] Organizations環境でセットアップする

AWS Organizationsを使ったマルチアカウント環境の場合は、AWS Systems Manager Quick Setup が Inventory セットアップに役立ちます。Quick Setup の 「EC2ホスト管理」を使うことで SSM Inventory の設定を組織全体(もしくは特定OU)へ適用できます。

また、リソースデータ同期もマルチアカウント環境下の場合は集約可能です。以下の構成のように、1つのS3バケットに集約できます。

3. SSM Inventory の活用方法

SSM Inventory 活用を以下の表に簡単にまとめました。

使うサービス、機能 できること 補足
Inventoryコンソール 簡易なインベントリ統計の閲覧
Fleet Managerコンソール サーバーごとのインベントリ閲覧
Athena 柔軟なインベントリ分析 要 リソース
データ同期
QuickSight インベントリ分析の可視化、共有 要 リソース
データ同期

それぞれ順番に紹介します。

3-1. Inventory コンソールで確認する

[SSM > インベントリ] にて収集したインベントリの統計を見ることができます。リソースグループやタグなどでフィルタも可能です。

確認できるダッシュボードは以下の 8種類です。

  • インベントリが有効になっているマネージドインスタンス
  • タイプごとのインベントリカバレッジ
  • カスタムインベントリタイプのトップ 10
  • トップ 5 の OS バージョン
  • トップ 5 のアプリケーション
  • トップ 5 のサーバーロール
  • トップ 5 のサービス
  • 対応するマネージドインスタンス

3-2. Fleet Manager コンソールで確認する

各サーバーのインベントリ情報を深堀りしたい場合は、Fleet Manager が役に立ちます。Fleet Manager も SSM の1機能です。「SSM管理下のサーバー(マネージドノード)」一覧の管理コンソールを提供します。

Fleet Manager から特定のマネージドノードを選択します。[プロパティ > インベントリ] を選ぶことで、そのサーバーのインベントリ情報を確認できます。

インベントリタイプから閲覧したいデータタイプを選択します。

例えば AWS:Applications ではインストールされているアプリケーション一覧が表示されます。以下のようにフィルタも可能です。

3-3. Athenaで確認する

リソースデータ同期を作成している場合は、S3にインベントリデータがあるため、より柔軟なデータ分析が可能になります。

特に良く使う分析として Amazon Athena を使った分析を紹介します。

前提としてインベントリ情報が置かれたS3バケットを参照するテーブルを作成する必要があります。Athenaのテーブル作成については以下を参照ください。

例えば、サーバーの curl アプリケーションのバージョン一覧を棚卸ししたい場合には、

以下のような SQL で取得できます。

WITH
  instances AS (
    SELECT * FROM aws_instanceinformation WHERE instancestatus != 'Terminated'
  ),
  tag AS (
    SELECT * FROM aws_tag WHERE key = 'Name'
  ),
  app AS (
    SELECT * FROM aws_application
    WHERE name = 'curl'
  )
SELECT
  tag.value as NameTag,
  instances.instanceid as InstanceID,
  app.name as AppName,
  app.version as AppVersion,
  instances.accountid as AccountID,
  instances.region as Region
FROM
  app INNER JOIN instances
  ON app.resourceid = instances.resourceid
  LEFT JOIN tag
  ON app.resourceid = tag.resourceid

その他の Athenaクエリ例については以下にサンプルをいくつか載せているので、参考いただければと思います。

3-4. Quick Sight で可視化

インベントリ情報を可視化して、ダッシュボードとして関係者に公開したり、洞察を発見したりしたい場合には Amazon QuickSight が役に立ちます。

これに関しては、AWSが提供しているハンズオンが参考になります。以下のようなアーキテクチャ、QuickSightダッシュボードを作成するハンズオンになっています。

画像引用: Systems Manager & QuickSight ハンズオン | AWS workshop studio

4. まとめ

本記事では AWS Systems Manager および その1機能である Inventory について説明しました。

EC2インスタンスが多数あるような環境では、Systems Manager のパワーを存分に活かしたいですね。他にも Run Command や State Manager 、 Patch Manager など サーバー管理に役立つ機能がたくさんあるので、気になった方は触ってみてください。

クラスメソッドの川原がお届けしました。

著者

クラスメソッド株式会社

AWS事業本部 コンサルティング部

川原 征大

https://dev.classmethod.jp/author/kawahara-masahiro/

クラスメソッド株式会社はアマゾン ウェブ サービスをはじめ、データ分析、モバイル、IoT、AI/機械学習等の分野で企業向け技術支援を行っています。2023年にはアジア最優秀SIパートナーとして「SI Partner of the Year – APJ」を受賞。現在までの技術支援実績は3,000社以上、AWS環境については25,000アカウント以上となりました。社員による技術情報発信にも注力し、オウンドメディア「DevelopersIO」では4万本以上の記事を公開中です。

クラスメソッド株式会社

https://classmethod.jp/

技術ブログ「DevelopersIO」

ページ上部へ戻る

相談無料!プロが中立的にアドバイスいたします

クラウド・AWS・Azureでお困りの方はお気軽にご相談ください。