SystemsManager の機能を試してみる RunCommand編
はじめに
こんにちは am です。
AWS の Run Command機能を使って、EC2にログインせずコマンド実行をしたいと思います。
サーバに必要なもの
- SSM Agent のインストール
SSM Agentがプリインストールされた AMIs があります。これらの AMI を利用していない場合は手動でインストールしてください - SystemManager への通信経路(インターネットゲートウェイ、NATGateway、Systems Manager用のエンドポイント)
※ サーバ環境要件に合わせて必要な通信経路を用意してください。
今回はインターネットゲートウェイを利用して通信経路を確保しています。 - IAMRole の設定 (EC2 の場合)
IAM Role
SSM で触れるように EC2 用の role を作成します。
作成、割当手順詳細は割愛しますが、AmazonSSMManagedInstanceCore を利用しました。
RunCommand でシェルスクリプトの実行
SystemsManager の左ペインから Run Command を選択し、
コマンドを実行するをクリックします
AWS-RunShellScript を選択します。
実行するコマンドを入力します。
インスタンスはSSMのインストールなどが問題なければ表示されているので、対象機器を選択してください。
通知などが可能ですが、一旦割愛します。
実行!
結果
ip-192-168-19-254.ap-northeast-1.compute.internal
03:27:45 up 2:00, 1 user, load average: 0.00, 0.00, 0.00
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
ec2-user pts/0 01:35 8:52 0.06s 0.02s sshd: ec2-user [priv]
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 1.6 105156 16528 ? Ss 01:27 0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize=32
root 2 0.0 0.0 0 0 ? S 01:27 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 01:27 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< 01:27 0:00 [rcu_par_gp]
root 5 0.0 0.0 0 0 ? I< 01:27 0:00 [slub_flushwq]
root 6 0.0 0.0 0 0 ? I< 01:27 0:00 [netns]
root 8 0.0 0.0 0 0 ? I< 01:27 0:00 [kworker/0:0H-events_highpri]
root 10 0.0 0.0 0 0 ? I< 01:27 0:00 [mm_percpu_wq]
root 11 0.0 0.0 0 0 ? I 01:27 0:00 [rcu_tasks_kthread]
root 12 0.0 0.0 0 0 ? I 01:27 0:00 [rcu_tasks_rude_kthread]
root 13 0.0 0.0 0 0 ? I 01:27 0:00 [rcu_tasks_trace_kthread]
root 14 0.0 0.0 0 0 ? S 01:27 0:00 [ksoftirqd/0]
root 15 0.0 0.0 0 0 ? I 01:27 0:00 [rcu_preempt]
root 16 0.0 0.0 0 0 ? S 01:27 0:00 [migration/0]
root 18 0.0 0.0 0 0 ? S 01:27 0:00 [cpuhp/0]
root 20 0.0 0.0 0 0 ? S 01:27 0:00 [kdevtmpfs]
root 21 0.0 0.0 0 0 ? I< 01:27 0:00 [inet_frag_wq]
root 22 0.0 0.0 0 0 ? S 01:27 0:00 [kauditd]
root 23 0.0 0.0 0 0 ? S 01:27 0:00 [khungtaskd]
root 24 0.0 0.0 0 0 ? S 01:27 0:00 [oom_reaper]
root 27 0.0 0.0 0 0 ? I< 01:27 0:00 [writeback]
root 28 0.0 0.0 0 0 ? S 01:27 0:00 [kcompactd0]
root 29 0.0 0.0 0 0 ? SN 01:27 0:00 [khugepaged]
root 30 0.0 0.0 0 0 ? I< 01:27 0:00 [kintegrityd]
root 31 0.0 0.0 0 0 ? I< 01:27 0:00 [kblockd]
root 32 0.0 0.0 0 0 ? I< 01:27 0:00 [blkcg_punt_bio]
root 33 0.0 0.0 0 0 ? S 01:27 0:00 [xen-balloon]
root 34 0.0 0.0 0 0 ? I< 01:27 0:00 [tpm_dev_wq]
root 35 0.0 0.0 0 0 ? I< 01:27 0:00 [md]
root 36 0.0 0.0 0 0 ? I< 01:27 0:00 [edac-poller]
root 37 0.0 0.0 0 0 ? S 01:27 0:00 [watchdogd]
root 38 0.0 0.0 0 0 ? I< 01:27 0:00 [kworker/0:1H-kblockd]
root 73 0.0 0.0 0 0 ? S 01:27 0:00 [kswapd0]
root 75 0.0 0.0 0 0 ? I< 01:27 0:00 [xfsalloc]
root 77 0.0 0.0 0 0 ? I< 01:27 0:00 [xfs_mru_cache]
root 80 0.0 0.0 0 0 ? I< 01:27 0:00 [kthrotld]
root 95 0.0 0.0 0 0 ? S 01:27 0:00 [xenbus]
root 96 0.0 0.0 0 0 ? S 01:27 0:00 [xenwatch]
root 133 0.0 0.0 0 0 ? I< 01:27 0:00 [nvme-wq]
root 135 0.0 0.0 0 0 ? I< 01:27 0:00 [nvme-reset-wq]
root 137 0.0 0.0 0 0 ? I< 01:27 0:00 [nvme-delete-wq]
root 160 0.0 0.0 0 0 ? I< 01:27 0:00 [mld]
root 161 0.0 0.0 0 0 ? I< 01:27 0:00 [ipv6_addrconf]
root 171 0.0 0.0 0 0 ? I< 01:27 0:00 [kstrp]
root 183 0.0 0.0 0 0 ? I< 01:27 0:00 [zswap-shrink]
root 184 0.0 0.0 0 0 ? I< 01:27 0:00 [kworker/u31:0]
root 975 0.0 0.0 0 0 ? I< 01:27 0:00 [xfs-buf/xvda1]
root 976 0.0 0.0 0 0 ? I< 01:27 0:00 [xfs-conv/xvda1]
root 977 0.0 0.0 0 0 ? I< 01:27 0:00 [xfs-reclaim/xvd]
root 978 0.0 0.0 0 0 ? I< 01:27 0:00 [xfs-blockgc/xvd]
root 979 0.0 0.0 0 0 ? I< 01:27 0:00 [xfs-inodegc/xvd]
root 980 0.0 0.0 0 0 ? I< 01:27 0:00 [xfs-log/xvda1]
root 981 0.0 0.0 0 0 ? I< 01:27 0:00 [xfs-cil/xvda1]
root 982 0.0 0.0 0 0 ? S 01:27 0:01 [xfsaild/xvda1]
root 1042 0.0 1.5 52560 15152 ? Ss 01:27 0:00 /usr/lib/systemd/systemd-journald
root 1709 0.0 1.1 30600 11280 ? Ss 01:27 0:00 /usr/lib/systemd/systemd-udevd
systemd+ 1713 0.0 1.4 21200 14520 ? Ss 01:27 0:00 /usr/lib/systemd/systemd-resolved
root 1726 0.0 0.2 29256 2296 ? S<sl 01:27 0:00 /sbin/auditd
root 1812 0.0 0.0 0 0 ? I< 01:27 0:00 [cryptd]
root 1855 0.0 0.0 0 0 ? I< 01:27 0:00 [ata_sff]
root 1870 0.0 0.0 0 0 ? S 01:27 0:00 [scsi_eh_0]
root 1873 0.0 0.0 0 0 ? I< 01:27 0:00 [scsi_tmf_0]
root 1878 0.0 0.0 0 0 ? S 01:27 0:00 [scsi_eh_1]
root 1879 0.0 0.0 0 0 ? I< 01:27 0:00 [scsi_tmf_1]
root 1928 0.0 0.0 0 0 ? I< 01:27 0:00 [rpciod]
root 1929 0.0 0.0 0 0 ? I< 01:27 0:00 [xprtiod]
root 1949 0.0 0.6 15288 6488 ? Ss 01:27 0:00 /usr/bin/systemd-inhibit --what=handle-suspend-key:handle-hibernate-key --who=noah --why=acpid instead --mode=block /usr/sbin/acpid -f
libstor+ 1953 0.0 0.1 2752 1932 ? Ss 01:27 0:00 /usr/bin/lsmd -d
root 1955 0.1 0.6 88908 5836 ? Ssl 01:27 0:12 /usr/sbin/rngd -f -x pkcs11 -x nist
root 1956 0.0 1.1 240052 10724 ? Ss 01:27 0:00 /usr/sbin/sssd -i --logger=files
root 1961 0.0 0.7 15772 7696 ? Ss 01:27 0:00 /usr/lib/systemd/systemd-homed
dbus 1966 0.0 0.3 8372 3776 ? Ss 01:27 0:00 /usr/bin/dbus-broker-launch --scope system --audit
systemd+ 1970 0.0 0.9 235864 9704 ? Ss 01:27 0:00 /usr/lib/systemd/systemd-networkd
dbus 1975 0.0 0.2 5264 2792 ? S 01:27 0:00 dbus-broker --log 4 --controller 9 --machine-id 3356686e235346f99462d3ffc6f7e325 --max-bytes 536870912 --max-fds 4096 --max-matches 16384 --audit
root 1978 0.0 1.3 243752 12936 ? S 01:27 0:00 /usr/libexec/sssd/sssd_be --domain implicit_files --uid 0 --gid 0 --logger=files
root 1981 0.0 0.3 281020 3472 ? Ssl 01:27 0:00 /usr/sbin/gssproxy -D
root 1987 0.0 4.0 267452 39520 ? S 01:27 0:00 /usr/libexec/sssd/sssd_nss --uid 0 --gid 0 --logger=files
root 1988 0.0 1.0 17616 9736 ? Ss 01:27 0:00 /usr/lib/systemd/systemd-logind
root 2004 0.0 0.1 2668 1148 ? S 01:27 0:00 /usr/sbin/acpid -f
root 2208 0.0 1.7 724372 17140 ? Ssl 01:27 0:00 /usr/bin/amazon-ssm-agent
root 2213 0.0 0.7 29116 7692 ? Ss 01:27 0:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root 2222 0.0 0.2 20544 2512 ? Ss 01:27 0:00 /usr/sbin/atd -f
root 2223 0.0 0.1 221344 1084 tty1 Ss+ 01:27 0:00 /sbin/agetty -o -p -- \u --noclear - linux
root 2224 0.0 0.1 221388 1088 ttyS0 Ss+ 01:27 0:00 /sbin/agetty -o -p -- \u --keep-baud 115200,57600,38400,9600 - vt220
chrony 2242 0.0 0.3 95552 3156 ? S 01:27 0:00 /usr/sbin/chronyd -F 2
root 2490 0.0 1.0 41880 10684 ? Ss 01:35 0:00 sshd: ec2-user [priv]
root 2495 0.0 0.6 15288 6692 ? Ss 01:35 0:00 /usr/lib/systemd/systemd-userdbd
ec2-user 2537 0.0 1.3 19888 12792 ? Ss 01:35 0:00 /usr/lib/systemd/systemd --user
ec2-user 2546 0.0 0.6 126828 6472 ? S 01:35 0:00 (sd-pam)
ec2-user 2553 0.0 0.6 41880 6304 ? S 01:35 0:00 sshd: ec2-user@pts/0
ec2-user 2555 0.0 0.5 233060 5000 pts/0 Ss 01:35 0:00 -bash
root 4754 0.0 0.0 0 0 ? I 03:04 0:00 [kworker/u30:0-events_unbound]
root 4867 0.0 0.0 0 0 ? I 03:10 0:00 [kworker/0:3-xfs-inodegc/xvda1]
root 5043 0.0 0.0 0 0 ? I 03:16 0:00 [kworker/0:1-cgroup_destroy]
root 5047 0.0 0.8 260308 8312 pts/0 S 03:17 0:00 sudo su -
root 5050 0.0 0.4 245540 4708 pts/0 S 03:17 0:00 su -
root 5051 0.0 0.5 233444 5328 pts/0 S+ 03:17 0:00 -bash
root 5190 0.0 0.0 0 0 ? I 03:18 0:00 [kworker/u30:2-writeback]
root 5243 0.0 2.5 733668 25036 ? Sl 03:19 0:00 /usr/bin/ssm-agent-worker
root 5349 0.0 0.6 15644 6572 ? S 03:22 0:00 systemd-userwork: waiting...
root 5350 0.0 0.6 15644 6568 ? S 03:22 0:00 systemd-userwork: waiting...
root 5351 0.0 0.6 15644 6580 ? S 03:22 0:00 systemd-userwork: waiting...
root 5449 0.0 0.0 0 0 ? I 03:26 0:00 [kworker/0:0-events_power_efficient]
root 5452 0.0 2.5 732056 24972 ? Sl 03:27 0:00 /usr/bin/ssm-document-worker a902ab0a-98e3-4cef-aebb-ce2b0137c4d6
root 5459 0.0 0.3 232036 3612 ? S 03:27 0:00 sh -c /var/lib/amazon/ssm/i-0b6b93dbdc998a1f8/document/orchestration/a902ab0a-98e3-4cef-aebb-ce2b0137c4d6/awsrunShellScript/0.awsrunShellScript/_script.sh
root 5462 0.0 0.2 232520 2716 ? R 03:27 0:00 ps auxwww
起動したばかりの amazon linux2023 なので特別なにか動いているわけではありませんが、
実行結果が取得できました。
終わりに
コマンド実行するだけならSSHすればいいじゃないっていうもあるかと思いますが、
SSHできないような環境にいる場合やポリシー的にSSHを利用しないサーバ、オートスケールで一時的に増えたサーバなどに対してもログインせず、セキュアにコマンドが実行可能です。
また実行結果が残ること、コマンド再実行も可能になっています。
複数インスタンスにも実行可能なので、1つのサービス郡のサーバでまとめてログを調べたり、以前と全く同じコマンドを使って、複数台調査するといったことが比較的容易になります。
通常SSHをして ログを見て…と実行しようとすると1台1台作業が必要になるため、何度も同じことをしたり複数台同時に実行できれば…といった状況であれば非常に有効活用できるかと思います。
今回はここまで!
今後は余裕があれば他の SystemsManager 利用も使ったブログを書きたいと思います。
読んでいただき、ありがとうございました。