我有一个Cloud Formation来设置EC2实例。我目前正在使用参数来指定EC2实例的子网ID以及安全组的VPC ID(由EC2实例依次使用)。
在我的情况下,指定的子网ID必须是VPC的一部分,我只想在参数中指定子网ID。但我找不到从子网ID(http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html)
中获取VPC的方法我看到GetAtt函数可用于返回资源属性。有没有相当于返回资源属性的东西?
答案 0 :(得分:2)
从文档Fn:GetAtt中,您只能检索子网的AvailabilityZone和Ipv6CidrBlocks详细信息。在CFn模板中没有内置支持来获取给定子网的VpcId。
虽然有一种解决方法。如果您使用的是aws-cli documentation,则可以使用describe-subnets
方法获取所需子网的VpcId,并将其作为输入传递给Cloudformation模板create_stack
。
即使您使用任何SDK,此方法仍然有效。例如,在Java中。
//pseudo code only!
DescribeSubnetsRequest request = new DescribeSubnetsRequest();
request.withSubnetIds("subnet-abcdefgh");
DescribeSubnetsResult result = awsClient.describeSubnets(request);
String myVpc = result.getSubnets().get(0).getVpcId();
// add the above VPC Id to the parameters of your Cloud formation template create stack request.
希望这会有所帮助。
答案 1 :(得分:1)
我创建了一个名为cli2cloudformation的小项目。使用它,您就可以在cloudformation堆栈中执行cli命令并使用命令的结果。
只需检查here即可。我希望它可以帮助你。