云形成:如何从子网ID获取VPC

时间:2017-08-02 12:22:42

标签: amazon-web-services amazon-ec2 amazon-cloudformation amazon-vpc

我有一个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函数可用于返回资源属性。有没有相当于返回资源属性的东西?

2 个答案:

答案 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即可。我希望它可以帮助你。