この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
AWS Systems Manager(SSM) インベントリ はマネージドインスタンスからメタデータを収集して、情報表示する機能です。 OSやアプリケーション、ネットワーク設定などの情報を収集してくれます (メタデータのみ収集します。機密情報や実データへのアクセスは無いです)。
今回はインベントリを使った「インスタンスのアプリケーションインストール状況調査」 の方法を紹介します。
目次
- セットアップ
- インスタンスのアプリケーションインストール状況調査
- マネジメントコンソールから確認
- AWS CLI から確認
- (オプション) S3へ保存
セットアップ
前提条件
EC2インスタンスがSSM管理下(マネージドインスタンス)であることが前提条件です。
マネージドインスタンスにする方法については以下ブログ/解説動画が参考になります。
- EC2 インスタンスが AWS Systems Manager のマネージドインスタンス一覧に表示されません | DevelopersIO
- マネージドインスタンスを設定してみた #SSM #AWS入門 #AWS Systems Manager #AWSチョットサワル | YouTube
関連付けの作成(インベントリ セットアップ)
インベントリはバックグラウンドで SSM ステートマネージャー を機能させることで 実現しています。
マネコンから 1-Click で この機能を有効化できます。設定方法は以下参照ください。
インベントリ収集の設定 - AWS Systems Manager
マネジメントコンソールから確認
インベントリ > ダッシュボード
ダッシュボードでインスタンスの OS情報やアプリケーション情報の簡単な統計を見ることが出来ます。
フリートマネージャー > インベントリ
各インスタンスのアプリケーションインストール状況を見たい場合はフリートマネージャーを見ましょう。
[インベントリ] タブからインベントリタイプ AWS:Application
とすることで
インストールされているアプリケーション一覧を表示できます。
検索欄から名前やバージョンでフィルタ可能です。
AWS CLI から確認
先程のフリートマネージャーで確認した情報を AWS CLIから確認する方法を紹介します。
ssm list-inventory-entries コマンドを使います。
以下は特定インスタンスに入っているアプリケーション情報 (名前, バージョン, インストール時間)を 10個出力する例です。
aws ssm list-inventory-entries --output table \
--instance-id i-xxx --type-name "AWS:Application" --max-results 10 \
--query "Entries[].[Name, Version, InstalledTime]"
# ↓ 出力例
# -----------------------------------------------------------
# | ListInventoryEntries |
# +--------------------+-----------+------------------------+
# | libpwquality | 1.2.3 | 2017-12-13T05:16:09Z |
# | bash | 4.2.46 | 2017-12-13T05:15:49Z |
# | libselinux-python | 2.5 | 2017-12-13T05:16:10Z |
# | libselinux | 2.5 | 2017-12-13T05:15:50Z |
# | gettext-libs | 0.19.8.1 | 2017-12-13T05:16:11Z |
# | sed | 4.2.2 | 2017-12-13T05:15:51Z |
# | python-markupsafe | 0.11 | 2017-12-13T05:16:12Z |
# | readline | 6.2 | 2017-12-13T05:15:51Z |
# | python2-rsa | 3.4.1 | 2017-12-13T05:16:14Z |
# | pystache | 0.5.3 | 2017-12-13T05:16:14Z |
# +--------------------+-----------+------------------------+
特定のアプリケーションの情報を見たいときには --filters
オプションを使って
フィルタしましょう。以下 特定インスタンスの sudo パッケージの情報を取得する例です。
aws ssm list-inventory-entries --output yaml \
--instance-id i-xxx --type-name "AWS:Application" \
--filters Key=Name,Values=sudo,Type=Equal
# ↓ 出力例
# CaptureTime: '2021-06-08T07:36:36Z'
# Entries:
# - ApplicationType: Applications/System
# Architecture: x86_64
# InstalledTime: '2021-03-26T08:56:10Z'
# Name: sudo
# PackageId: sudo-1.8.23-10.amzn2.1.src.rpm
# Publisher: Amazon Linux
# Release: 10.amzn2.1
# Summary: Allows restricted root access for specified users
# URL: http://www.courtesan.com/sudo/
# Version: 1.8.23
# InstanceId: i-xxx
# SchemaVersion: '1.1'
# TypeName: AWS:Application
フィルタの Type
には [NotEqual, BeginWith, Equal, LessThan, GreaterThan, Exists]
が使用できます。
Key
は AWS:Application
の場合は以下値を使えます。
- Name
- ApplicationType
- Publisher
- Version
- InstalledTime
- Architecture
- URL
- Release
- Epoch
(オプション) S3へ保存
「リソースデータの同期」を作成することで S3バケットへインベントリ情報を格納できます。
Amazon Athena を使って分析、必要に応じて QuickSight などで可視化することも可能です。
詳細は以下チュートリアルを参照ください。
おわりに
以上、SSMインベントリの活用例でした。 インベントリはEC2インスタンスへ直接入ることなく、各種メタデータを収集してくれる便利機能です。 ぜひ活用してみてください。
インベントリは AWS Config と連携していて、Configルールを活用することで 特定アプリケーションのインストール状況の監視なども可能です。 (参考: 【AWS Config】EC2インスタンスに特定アプリケーションがインストールされているかチェックして通知する | DevelopersIO)
少しでも参考になれば幸いです。
参考
- DevelopersIO
- AWS Documents