我正在创建一个创建一些资源(如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