0

我有一个Cloud Formation来设置EC2实例。我目前使用参数指定EC2实例的子网ID以及安全组的VPC Id(EC2实例依次使用)。云形成:如何从子网获得VPC Id

在我的情况下,指定的子网ID需要成为VPC的一部分,我只想在参数中指定子网ID。但我找不到从子网ID中获取VPC的方法(http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html

我看到GetAtt函数可用于返回资源属性。是否有相当于返回资源属性的东西?

+1

这将是一个有用的功能,但我不相信CloudFormation有一个本地的方式来做到这一点。如果它足够重要,也许您可​​以使用Lambda支持的自定义资源来执行查找(类似示例:http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/walkthrough-custom-resources-lambda-lookup -amiids.html)。 – jarmod

回答

1

从文档Fn:GetAtt,您只能检索Subnet的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. 

希望这会有所帮助。

+0

感谢您的建议。理想情况下,我希望直接在Cloud Formation控制台中完成,但这似乎不可行。 – ysalmi

+0

正如krisnik所提到的,你需要获得CFN之外的子网的VPC,并将它传递给创建/更新堆栈命令。 – n00b

1

我创建了一个名为cli2cloudformation的小项目。使用该命令,您可以在您的cloudformation堆栈中执行cli命令并使用命令的结果。

只需检查它here。我希望它能帮助你。

+0

啊,这是一个很好的通用解决方案,谢谢。为CF的局限性提供良好的解决方法。 – ysalmi

相关问题