I'm trying to dynamically get the ec2 instance information in my bash script. Following is the script.
#!/bin/bash
#Login to an EC2 instance using AWS CLI
#Return public DNS name from instance name tag
function ec2_hostname_from_tag() {
echo $(aws ec2 describe-instances --filters "{\"Name\":\"tag:Environment\",
\"Values\":[\"BetaCanopy\"]}" --
query='Reservations[$1].Instances[0].PublicDnsName' | tr -d '"')
}
#Get the number of ec2 instances
function number_of_ec2_instances(){
echo $(aws ec2 describe-instances --filters "{\"Name\":\"tag:Environment\",
\"Values\":[\"BetaCanopy\"]}" --query 'Reservations[*].Instances[*].
[InstanceId]' --output text | wc -l)
}
NUMBER_OF_INSTANCES=$(number_of_ec2_instances)
echo $NUMBER_OF_INSTANCES
COUNTER=0
while [ $COUNTER -lt ${NUMBER_OF_INSTANCES} ]; do
HOST_NAME=$(ec2_hostname_from_tag "$COUNTER")
echo $HOST_NAME
#ssh -tt -i /Users/amilasembunaidelage/.ssh/BETA.pem ec2-user@$HOST_NAME <<
EOF
#ps aux | grep java
#logout
#EOF
let COUNTER=COUNTER+1
done
When I run this, it gives the following error.
Bad value for --query Reservations[$var].Instances[0].PublicDnsName: Bad
jmespath expression: Unknown token $:
Reservations[$var].Instances[0].PublicDnsName
But when I give a direct value to 'Reservations' array (like Reservations[0]), it works.
Does anyone know the solution for this?