我正在創建一個創建一些資源(如EC2實例)的雲信息模板。此模板將用於不同的AWS賬戶。 我們有3個賬戶,一個用於測試環境,一個用於開發環境,另一個用於生產。在每個賬戶中有2個VPC(所有賬戶中的相同區域)。將AZ映射到選定的子網,並將子網映射到選定的VPC
我的問題是,爲了正確構建資源,在創建EC2時,我們需要選擇VPC,同一VPC內的子網以及同一子網的可用區。我需要可用區域,因爲我將EFS掛載到實例的userData中,以便實例可以連接到掛載目標。
衆所周知,每個子網中都有一個目標數量,並且dns會根據AZ進行更改。以下是我放在用戶數據裝入目標:
echo "availability-zone.file-system-id.efs.aws-region.amazonaws.com:/ /efs-mount-point nfs4 nfsvers=4.1 0 0" >> /etc/fstab
我並沒有直接創建實例,但我通過創建一個啓動配置和自動縮放組做。
"Launchconfig":{
"Type":"AWS::AutoScaling::LaunchConfiguration",
"Properties":{
"ImageId":{ "Fn::FindInMap":[ "AWSRegionToAMI", { "Ref":"AWS::Region" }, "AMIID" ] },
"SecurityGroups":[ { "Ref":"EcsSecurityGroup" } ],
"InstanceType": {"Ref":"InstanceType" },
"IamInstanceProfile":{ "Ref":"EC2InstanceProfile" },
"KeyName":{ "Fn::FindInMap" : [ "KeyPairMapping", {"Ref" : "EnvParam"}, "Key"] },
"UserData":{ "Fn::Base64" : {
"Fn::Join" : ["", [
"#!/bin/bash -xe\n",
"echo eu-west-1c.",{ "Fn::FindInMap" : [ "FileSystemMap", {"Ref" : "EnvParam"}, "FileSystemID"] },
".efs.",{ "Ref" : "AWS::Region" },".amazonaws.com:/ /efs-mount-target nfs defaults,vers=4.1 0 0",
" >> /etc/fstab\n"
]]}
}
}
},
"AutoScalingGroup":{
"Type":"AWS::AutoScaling::AutoScalingGroup",
"Properties":{
"VPCZoneIdentifier":{ "Ref":"SubnetID" },
"LaunchConfigurationName":{ "Ref":"Launchconfig" },
"MinSize":"1",
"MaxSize":{ "Ref":"MaxSize" },
"DesiredCapacity":{ "Ref":"DesiredCapacity" }
}
},
我的問題:使用的映射,根據所選擇的子網如何獲得可用性區域的價值在用戶數據?
難道是我還是在聲明中的'AZ'前面忘記了'$'? – Somar
Shell變量賦值通常採用[varname = value]的形式,如[POSIX](http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_23)所定義。 – wjordan
你可以請檢查這[問題](http://stackoverflow.com/questions/42270842/userdata-are-not-getting-executed-after-launching-the-instance-by-cloudformation)請謝謝你 – Somar