# Get the list of instance IDs and their states instances=$(aws ec2 describe-instances --query "Reservations[*].Instances[*].[InstanceId,State.Name]" --output text) # aws ssm send-command --document-name AWS-RunShellScript --targets Key=instanceids,Values=i-073378237c5a9dda1 --parameters 'commands=["sudo su - -c \"tail /var/log/cloud-init-output.log\""]' parse_command_id(){ # send_command_output local send_command_output=$1 echo "$send_command_output" | jq -r '.Command.CommandId' } # Loop through each instance ID and state while read -r instance_id state; do if [[ $state == "running" ]]; then echo "Starting session for instance: $instance_id" # Start a session and execute commands (replace with your commands) #aws ssm start-session --target "$instance_id" --document-name "AWS-StartInteractiveCommand" --parameters 'commands=["sudo su -","tail /var/log/cloud-init-output.log"]' #--target "$instance_id" send_command_output=$(aws ssm send-command --document-name "AWS-RunShellScript" --targets "Key=instanceids,Values=$instance_id" --parameters 'commands=["sudo su - -c \"tail /var/log/cloud-init-output.log\""]') # now get the command id command_id=$(parse_command_id send_command_output) # now for 4 times, sleep 1 sec, for i in {1..4}; do sleep 1 command_status=$(aws ssm list-command-invocations --command-id "$command_id" --details) echo "$command_status" done fi done <<< "$instances"