通过Shell脚本创建Route53记录集

arf*_*619 7 shell recordset amazon-web-services amazon-route53 aws-cli

作为我的shell脚本的一部分,我正在尝试在AWS Route53中创建记录集.但是,使用我的shell脚本中的aws cli中的变量来创建这些记录集,我在Shell脚本中导出的变量不会传递给aws cli命令.

AWS提供的AWS CLI命令:

$ aws route53 change-resource-record-sets --hosted-zone-id 1234567890ABC \
  --change-batch file:///path/to/record.json
Run Code Online (Sandbox Code Playgroud)

为简单起见,我不想在我的计算机上创建单独的json文件,我想在shell脚本中包含所有命令和变量.

#!/bin/bash

export TARGET_ENVIRONMENT=uat 
export BASE_ENVIRONMENT_DNS=abcd-External-9982627718-1916763929.us-west-1.elb.amazonaws.com

# Creates route 53 records based on env name

aws route53 change-resource-record-sets --hosted-zone-id 1234567890ABC  
--change-batch '{ "Comment": "Testing creating a record set", 
"Changes": [ { "Action": "CREATE", "ResourceRecordSet": { "Name": 
"$(TARGET_ENVIRONMENT).company.com", "Type": "CNAME", "TTL": 
120, "ResourceRecords": [ { "Value": "$(BASE_ENVIRONMENT_DNS)" } ] } } ] }'
Run Code Online (Sandbox Code Playgroud)

最后一个命令是在AWS Route53上创建一个记录集,如下所示:

$(TARGET_ENVIRONMENT).company.com
Run Code Online (Sandbox Code Playgroud)

与CNAME一样

$(BASE_ENVIRONMENT_DNS)
Run Code Online (Sandbox Code Playgroud)

不是我想要的那样,这是:

uat.company.com
Run Code Online (Sandbox Code Playgroud)

使用CNAME:

abcd-External-9982627718-1916763929.us-west-1.elb.amazonaws.com
Run Code Online (Sandbox Code Playgroud)

如何将环境变量传递到脚本中的aws cli命令?

任何帮助将受到高度赞赏.

谢谢!

nic*_*ild 8

变量不会在单引号内扩展.

如果在变量扩展之前关闭单引号,然后立即再次打开它,它应该产生所需的效果.您可能需要也可能不需要将变量用双引号括起来进行扩展.

#!/bin/bash

ENV=uat 
DNS=abcd-External-9982627718-1916763929.us-west-1.elb.amazonaws.com

# Creates route 53 records based on env name

aws route53 change-resource-record-sets --hosted-zone-id 1234567890ABC  
--change-batch '{ "Comment": "Testing creating a record set", 
"Changes": [ { "Action": "CREATE", "ResourceRecordSet": { "Name": 
"'"$ENV"'.company.com", "Type": "CNAME", "TTL": 
120, "ResourceRecords": [ { "Value": "'"$DNS"'" } ] } } ] }'
Run Code Online (Sandbox Code Playgroud)

  • 对于那些可能会试图理解为什么会这样工作的人来说,shell不需要连接运算符用于相邻的引号文字(当使用双引号时会扩展它们).`echo'a'"b"'c'`说明了这一点.(结果:`abc`之间没有空格.) (6认同)