web-dev-qa-db-ja.com

シェルスクリプトによるRoute53レコードセットの作成

シェルスクリプトの一部として、AWSRoute53でレコードセットを作成しようとしています。ただし、シェルスクリプト内のaws cliで変数を使用してこれらのレコードセットを作成すると、シェルスクリプトでエクスポートされた変数がaws cliコマンドに渡されません。

AWSが提供するAWSCLIコマンド:

$ aws route53 change-resource-record-sets --hosted-zone-id 1234567890ABC \
  --change-batch file:///path/to/record.json

簡単にするために、コンピューター上に個別のjsonファイルを作成したくありません。すべてのコマンドと変数を、シェルスクリプト内に配置したいと思います。

#!/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)" } ] } } ] }'

この最後のコマンドは、AWSRoute53に次のようにレコードセットを作成しています。

$(TARGET_ENVIRONMENT).company.com

cNAMEを

$(BASE_ENVIRONMENT_DNS)

そして[〜#〜] not [〜#〜]本当に私が望むように、それは:

uat.company.com

cNAMEを使用:

abcd-External-9982627718-1916763929.us-west-1.elb.amazonaws.com

スクリプト内のawscliコマンドに環境変数を渡すにはどうすればよいですか?

どんな助けでも大歓迎です。

ありがとう!

7
arfat619

変数は一重引用符で囲まれません。

変数展開の前に一重引用符を閉じ、直後に再度開くと、目的の効果が得られるはずです。変数を展開するには、変数を二重引用符で囲む必要がある場合とない場合があります。

#!/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"'" } ] } } ] }'
9