AWSのSystems ManagerのRun CommandでEC2のシェルを実行するサンプルです。
目次
サンプル | Systems ManagerのRun CommandでEC2のシェルを実行する概要 |
EC2に確認用のシェルファイルを作成する | |
Roleを作成しEC2に追加します。 | |
Systems ManagerのRun Commandを実行する | |
Run Commandで対象インスタンスが表示されない時 |
Systems ManagerのRun CommandでEC2のシェルを実行する概要
- EC2(test-ec2)にshファイルを配置し、System Managerからrun commandでshファイルを実行します。
- Publicのsubnetです。
EC2に確認用のシェルファイルを作成する
/home/ec2-user配下にtest1.shを作成します。
test1.sh
#!/bin/bash
echo 'hello world'
date '+%T'
./test1.shで実行すると文字列(hello world)と1:14:58等の時分秒が表示されます。
Roleを作成しEC2に追加します。
1.Roleを作成し以下のポリシーを追加します。
・AmazonSSMManagedInstanceCore
※AmazonEC2RoleforSSMはThis policy will soon be deprecatedの記載があります。
2.EC2に作成したポリシーを追加します。
Systems ManagerのRun Commandを実行する
1.対象のEC2を起動します。
2.検索乱でsystem managerで検索して、System Managerの画面を開きます。
3.検索欄でAWS-RunShellScriptで検索してチェックを入れます。
4.コマンドのパラメータには、パスとshファイル名を入力します。
/home/ec2-user/test1.sh
5.「インスタンスを手動で選択する」をチェックしインスタンスを選択します。
4.S3 バケットへの書き込みを有効化するのチェックは今回は使用しないので外しました。
5.実行をクリックするとシェルが実行されます。
6.実行結果が表示されます。円の矢印のボタンを押すとリフレッシュされます。
7.上記実行結果の下にあるインスタンスIDのリンクをクリックします。
8.OutPutの下三角形をクリックするとシェルの実行結果が表示されます。
Run Commandで対象インスタンスが表示されない時
SSMエージェントの確認
EC2にSystemsManagerエージェントが入っていて動いているか確認します。
OSによってコマンドが異なります。
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/ssm-agent-status-and-restart.html
Amazon Linux 2の場合
[ec2-user@ip-10-0-10-4 ~]$ sudo systemctl status amazon-ssm-agent
● amazon-ssm-agent.service - amazon-ssm-agent
Loaded: loaded (/etc/systemd/system/amazon-ssm-agent.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2022-12-28 00:41:20 JST; 43min ago
Main PID: 3608 (amazon-ssm-agen)
CGroup: /system.slice/amazon-ssm-agent.service
tq3608 /usr/bin/amazon-ssm-agent
mq3679 /usr/bin/ssm-agent-worker
1行目は、sudo systemctl status amazon-ssm-agentを実行しています。
4行目は、activeとなっているので動いています。
ssm-cliコマンドで状況を確認
1.ssm-cli get-diagnostics --output tableを入力するとテーブルで状況が表示されます。
Connectivity to ssm endpointがfailedになっていました。
2.上記のfailedをSuccessにした手順です。
VPCのDNS解決が有効であることを確認します。
3.VPCのDHCPオプションセットのリンクをクリックします。
4.ドメインネームサーバーをAmazonProvidedDNSに変更したところ解決しました。
AmazonProvidedDNSとは
Amazon DNSサーバー = Amazon Route 53 Resolver でVPC作成時に自動で作成されるDNSサーバです。VPC内での名前解決で使用されます。
10.0.0.0/16 ネットワークのAmazon DNS サーバーのIPアドレスは 10.0.0.2(2を追加したもの)でこれはAWSの仕様です。
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-dns.html
Systems Manager コンソールの [マネージドインスタンス] に EC2 インスタンスが表示されないのはなぜですか?
https://aws.amazon.com/jp/premiumsupport/knowledge-center/systems-manager-ec2-instance-not-appear/
関連の記事