AWS-RunRemoteScript を利用して S3 から EC2 インスタンスのリソース情報を収集するスクリプトを実行してみた
はじめに
テクニカルサポートの 片方 です。
AWS Systems Manager (SSM) Run Command の AWS-RunRemoteScript ドキュメントを利用して 「S3 に置いたスクリプトを EC2 インスタンス上でダウンロードして実行する」 ことが可能です。
今回は、S3 に保存したシェルスクリプトを Amazon Linux 2023 の EC2 インスタンス上でダウンロード後に実行して、CPU・メモリ・ディスクなどのリソース情報を収集してみました。
なお、本実装にあたり留意事項などを含め、以下を一読されることをお勧めします。
事前準備
- s3:ListBucket および s3:GetObject アクセス許可があるインスタンスプロファイル
- EC2 インスタンス (Amazon Linux 2023)
- S3 バケットに保存するスクリプトファイル
- スクリプトを保存する S3 バケット
※ 本検証時に作成したリソースは全て削除済みです
インスタンスプロファイル作成~ EC2 インスタンス起動
AmazonSSMManagedInstanceCore ロールに以下のポリシーを参考に作成してアタッチします。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::my-script-bucket"
},
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-script-bucket/*"
}
]
}
※ my-script-bucket はスクリプトファイルを保存する自身のバケット名に変更してください
その後、作成したロールを使用してマネージドノードとして登録されるような構成で EC2 インスタンス (Amazon Linux 2023) を起動します。

スクリプトファイル作成 ~ S3 バケットへのアップロード
今回は EC2 インスタンス (Amazon Linux 2023) のリソース情報を表示するだけの簡単なスクリプトを作成します。
get_resource_info.sh
#!/bin/bash
echo "===== System Info ====="
uname -a
echo
echo "===== CPU ====="
lscpu
echo
echo "===== Memory ====="
free -h
echo
echo "===== Disk ====="
df -h
※ 適宜修正してください。
作成したら、S3 バケットへアップロードします。なお、S3 バケットはデフォルト設定で問題ありません。
オブジェクトの URL をメモします。

これで、準備は完了です。お疲れ様でした!
やってみた
1. SSM マネジメントコンソール画面へアクセス
2. 下部の左ペイン Run Command をクリック
3. 検索窓に "AWS-RunRemoteScript" を記載して選択

4. 下部へスクロールを行い、コマンドのパラメータを入力
- Source Type : S3
- Source Info :
例 {"path":"https://s3.aws-api-domain/path to script"}
- Command Line : get_resource_info.sh
- Working Directory(任意):
- タイムアウト(任意)

5. お好みの方法でターゲットを選択

6. 後は、デフォルトのまま、下部へスクロールを行い 実行 します。
設定は以上です。あとは完了までしばらく待ちます。


成功したので、中身を見てみます。

===== System Info =====
Linux ip-10-0-26-227.ap-northeast-1.compute.internal 6.1.158-178.288.amzn2023.x86_64 #1 SMP PREEMPT_DYNAMIC Mon Nov 3 18:38:36 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
===== CPU =====
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Address sizes: 46 bits physical, 48 bits virtual
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Vendor ID: GenuineIntel
BIOS Vendor ID: Intel(R) Corporation
Model name: Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
BIOS Model name: Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
CPU family: 6
Model: 85
Thread(s) per core: 2
Core(s) per socket: 1
Socket(s): 1
Stepping: 7
BogoMIPS: 4999.99
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single pti fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves ida arat pku ospke
Hypervisor vendor: KVM
Virtualization type: full
L1d cache: 32 KiB (1 instance)
L1i cache: 32 KiB (1 instance)
L2 cache: 1 MiB (1 instance)
L3 cache: 35.8 MiB (1 instance)
NUMA node(s): 1
NUMA node0 CPU(s): 0,1
Vulnerability Gather data sampling: Unknown: Dependent on hypervisor status
Vulnerability Indirect target selection: Mitigation; Aligned branch/return thunks
Vulnerability Itlb multihit: KVM: Mitigation: VMX unsupported
Vulnerability L1tf: Mitigation; PTE Inversion
Vulnerability Mds: Vulnerable: Clear CPU buffers attempted, no microcode; SMT Host state unknown
Vulnerability Meltdown: Mitigation; PTI
Vulnerability Mmio stale data: Vulnerable: Clear CPU buffers attempted, no microcode; SMT Host state unknown
Vulnerability Reg file data sampling: Not affected
Vulnerability Retbleed: Vulnerable
Vulnerability Spec rstack overflow: Not affected
Vulnerability Spec store bypass: Vulnerable
Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2: Mitigation; Retpolines; STIBP disabled; RSB filling; PBRSB-eIBRS Not affected; BHI Retpoline
Vulnerability Srbds: Not affected
Vulnerability Tsa: Not affected
Vulnerability Tsx async abort: Not affected
Vulnerability Vmscape: Not affected
===== Memory =====
total used free shared buff/cache available
Mem: 7.6Gi 157Mi 7.2Gi 0.0Ki 255Mi 7.3Gi
Swap: 0B 0B 0B
===== Disk =====
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 1.6G 412K 1.6G 1% /run
/dev/nvme0n1p1 8.0G 1.6G 6.5G 20% /
tmpfs 3.9G 0 3.9G 0% /tmp
/dev/nvme0n1p128 10M 1.3M 8.7M 13% /boot/efi
作成したスクリプトファイルの記述の通り、取得されていました。
なお、対象 EC2 インスタンス側で、SSH 接続後に以下のコマンドを実行すれば、S3 バケットに保存していたスクリプトファイルがダウンロードされていることも確認できます。
sh-5.2$ sudo find /var/lib/amazon/ssm -name "get_resource_info.sh"
/var/lib/amazon/ssm/i-067c109fb4ac3a35b/document/orchestration/08687849-d429-4d7a-854a-f8427641851d/downloads/get_resource_info.sh
※ 適宜修正してください
まとめ
今回、AWS Systems Manager の Run Command を利用して、S3 に配置したシェルスクリプトを Amazon Linux 2023 の EC2 インスタンス上で実行するという一連の流れを確認できました。
本ブログが誰かの参考になれば幸いです。
参考資料
Amazon S3 からのスクリプトの実行 - AWS Systems Manager
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。








