0

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?

Amila Fonseka
  • 392
  • 1
  • 5
  • 15

0 Answers0