我正在尝试在我的bash脚本中动态获取ec2实例信息。以下是脚本。
#!/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
运行此命令时,会出现以下错误。
Bad value for --query Reservations[$var].Instances[0].PublicDnsName: Bad
jmespath expression: Unknown token $:
Reservations[$var].Instances[0].PublicDnsName
但是当我直接给'Reservations'数组赋值时(例如Reservations [0]),它就可以工作。
有人知道解决方案吗?