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。希望对你有帮助。
我有一个 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。希望对你有帮助。