awsのssmコマンドを使い、各EC2インスタンスでコマンドを実行する
要件
awsのssmコマンドを使い、各EC2インスタンスでコマンドを実行する
タスク
awsのssmコマンドを使い、各EC2インスタンスでコマンドを実行する
参考記事
▼aws-cliに関しての動画です ありがたや!
https://www.udemy.com/course/cloud01-aws-cli/learn/lecture/26557180#questions
▼aws-cliの使い方が分かります!
▼jqコマンドの使い方が分かりやすくまとまってます!
▼evalコマンドに関して コマンドを変数に入れて実行する時は、evalが必要なのです! これは他の言語やっている人はハマりポイントでしょう〜
学べること
awsのssmコマンドを使い、各EC2インスタンスでコマンドを実行する
aws-cliの使い方
jqコマンドの使い方
ヒント
sample.sh
#!/bin/bash
# 各EC2インスタンスで実行するシェルスクリプト
cmd="systemctl is-active docker"
# すべてのEC2インスタンスのID取得
instances=$(aws ec2 describe-instances \
--query 'Reservations[*].Instances[].InstanceId'\
--output text)
# EC2ごとにコマンドの実行とコマンドIDを取得
exec=$(aws ssm send-command \
--instance-ids ${instances} \
--document-name "AWS-RunShellScript" \
--parameters commands="eval ${cmd}" \
--query 'Command.CommandId' \
--output text)
# 各インスタンスに対してのコマンドの実行結果
result_list=$(
aws ssm list-command-invocations --command-id ${exec} --details \
--query "CommandInvocations[].[InstanceId, InstanceName, Status, CommandPlugins[0].Output"] \
--output json
)
# 実行結果をcsvに出力する
echo ${result_list} | jq -r '.[] | [.[0], .[1], .[2], .[3]] | @csv'