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 について
- 1-1. AWS Systems Manager(SSM)とは
- 1-2. SSM Inventory とは
- 2. SSM Inventory のセットアップ手順
- 2-1. 前提条件: サーバーをSSM管理下にする
- 2-2. SSM Inventory を有効化する
- 2-3. [任意] リソースデータ同期を作成する
- 2-4. [任意] Organizations環境でセットアップする
- 3. SSM Inventory の活用方法
- 3-1. Inventory コンソールで確認する
- 3-2. Fleet Manager コンソールで確認する
- 3-3. Athenaで確認する
- 3-4. Quick Sight で可視化
- 4. まとめ
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上およびマルチクラウドやハイブリッド環境内のリソースを管理」するサービスと記載があります。
... 正直フワッとしていますよね。
一言だと、こう言わざるを得ないぐらいSSMは多機能です。なおかつ様々な他AWSサービスとも連携しています。
SSMの全体像は AWS公式の Black Belt を見るとよいでしょう。
「運用管理」、「アプリケーション管理」、「変更管理」、そして「ノード管理」それぞれのカテゴリごとに SSMのサブ機能がまとめられています。
特に「ノード管理」の機能群が強力です。サーバー(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エージェントをインストールする必要があります。以下を参考に手動でインストールしてください。
- Linux 用 EC2 インスタンスに SSM Agent を手動でインストールおよびアンインストールする - AWS Systems Manager
- Windows Server 用の EC2 インスタンスに SSM Agent を手動でインストールおよびアンインストールする - AWS Systems Manager
適切な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ダッシュボードを作成するハンズオンになっています。
4. まとめ
本記事では AWS Systems Manager および その1機能である Inventory について説明しました。
EC2インスタンスが多数あるような環境では、Systems Manager のパワーを存分に活かしたいですね。他にも Run Command や State Manager 、 Patch Manager など サーバー管理に役立つ機能がたくさんあるので、気になった方は触ってみてください。
クラスメソッドの川原がお届けしました。
著者
クラスメソッド株式会社はアマゾン ウェブ サービスをはじめ、データ分析、モバイル、IoT、AI/機械学習等の分野で企業向け技術支援を行っています。2023年にはアジア最優秀SIパートナーとして「SI Partner of the Year – APJ」を受賞。現在までの技術支援実績は3,000社以上、AWS環境については25,000アカウント以上となりました。社員による技術情報発信にも注力し、オウンドメディア「DevelopersIO」では4万本以上の記事を公開中です。
クラスメソッド株式会社
RECOMMEND
その他のコラム
相談無料!プロが中立的にアドバイスいたします
クラウド・AWS・Azureでお困りの方はお気軽にご相談ください。