无法将动态值传递给AWS CLI查询选项

时间:2018-06-28 21:58:42

标签: arrays bash amazon-web-services amazon-ec2 command-line-interface

我正在尝试在我的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]),它就可以工作。

有人知道解决方案吗?

0 个答案:

没有答案