2025.09.10
複数の EC2 インスタンスを管理していると OS などのバージョン情報などを確認する機会が多いと思います。
その都度サーバーに接続して情報を取得すると時間がかかってしまうため、AWS サービスの Lambda + SSM を用いて一括で情報を取得する方法をご紹介いたします。
前提条件
・EC2 インスタンス内に ssm-agent がインストール済みであること
・EC2 インスタンスのインスタンスプロファイルに IAM ポリシー AmazonSSMManagedInstanceCore がアタッチされていること
実装イメージ

Lambda 関数を作成
ランタイムは Python 3.13 で用意しました。
ソースコードは下記になります。
対象の EC2 インスタンスを取得
ssm-agent との疎通がオンラインの EC2 インスタンスのみを対象に取得します。
ssm = boto3.client('ssm')
target_instances: list = []
paginator = ssm.get_paginator('describe_instance_information')
pages = paginator.paginate()
for page in pages:
for instance in page['InstanceInformationList']:
is_online = 'Online' in instance['PingStatus']
is_type = 'EC2::Instance' in instance['SourceType']
if is_online and is_type:
target_instances.append(instance['InstanceId'])
対象 EC2 インスタンスにコマンドを一括送信
今回は OS バージョンを取得する想定となります。
注意点として一括で送信可能な EC2 インスタンスの台数は50台までなので、超える場合は分割する必要があります。
# 送信するコマンド
OS_VERSION_COMMAND: str = r"""
if [ -f /etc/os-release ]; then
grep '^PRETTY_NAME=' /etc/os-release | cut -d= -f2 | sed "s/\"//g"
elif [ -f /etc/redhat-release ]; then
cat /etc/redhat-release
elif [ -f /etc/system-release ]; then
cat /etc/system-release
else
echo "-"
fi
"""
# 複数コマンドを送信することが可能
commands = [OS_VERSION_COMMAND]
# 配列データを渡すことで複数 EC2 インスタンスに一括送信が可能
res = ssm.send_command(
InstanceIds=target_instances,
DocumentName="AWS-RunShellScript",
Parameters={
"commands": commands,
"executionTimeout": [
"3000"
]
},
)
command_id: str = res.get('Command', {}).get('CommandId')
for instance_id in target_instances:
waiter = ssm.get_waiter('command_executed')
waiter_config: dict = {
'Delay': 1,
'MaxAttempts': 10
}
# コマンド実行を待機
waiter.wait(
InstanceId=instance_id,
CommandId=command_id,
WaiterConfig=waiter_config
)
# 実行結果を取得
command_result: dict = ssm.get_command_invocation(
InstanceId=instance_id,
CommandId=command_id
)
print(command_result["StandardOutputContent"])
実行結果
実行すると下記のように OS のバージョンが出力されます。
Amazon Linux 2
AlmaLinux 9.6 (Sage Margay)
:
まとめ
上記の構成で複数 EC2 インスタンスに所定のコマンドを実行してその結果を表示することができました。
今回は標準出力をしているだけなので、Google スプレッドシートなどと連携して出力ができるようになるとリソースやバージョンの管理がより楽になると思います。