Cloud Formation:如何从 Subnet Id 获取 VPC

Cloud Formation: How to get VPC from Subnet Id

我有一个 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 函数可用于 return 资源属性。是否有等同于 return 资源属性的东西?

从文档 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.

希望这对您有所帮助。

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

检查一下here。希望对你有帮助。