在创建子网时,在CloudFormation脚本中引用现有的AWS VPC Id

10
如何在CloudFormation脚本中引用已经在另一个CloudFormation脚本中创建的现有VPC的VPC Id,以便在VPC中创建子网?
3个回答

9
在定义 VPC 的模板中,在输出部分包含 VPC ID:
"Outputs" : {
    "VPC" : {
        "Value" : {"Ref":"VPC"},
        "Description" : "VPC ID"
    },
    ...
}

在使用VPC的堆栈模板中,定义一个用于VPC ID的参数:
"Parameters" : {
    "VPC" : {
        "Type" : "String",
    },
    ...
}

在创建此堆栈时,请在定义VPC的堆栈上调用describe-stack以获取输出中的ID,并将其作为VPC参数传递给create-stack

基本上是正确的 - 但是对于VPC,"Type"不能简单地是字符串,它必须是"AWS::EC2::VPC::Id",就像这里所记录的一样:http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html - jebbie
字符串应该可以正常工作(或者至少在我编写这段代码时是这样的),但使用更具体的类型会更好。谢谢。 - bsvingen
在我正在使用的最新awscli中,至少会因为模板未使用特定类型而导致验证错误 ;) - jebbie
如果您这样做,然后删除此堆栈,它会删除那个VPC吗?这将是不好的,因为它不是由此堆栈创建的... - Dasmowenator
如果您删除创建 VPC 的堆栈,则 VPC 将被删除。如果您仅引用 VPC 的堆栈进行删除,则不会删除 VPC。 - bsvingen

5

或者从输入中获取vpc id,例如

 "VpcId" : {
      "Type" : "AWS::EC2::VPC::Id",
      "Description" : "VpcId of your existing Virtual Private Cloud (VPC)",
      "ConstraintDescription" : "must be the VPC Id of an existing Virtual Private Cloud."
    },

-2

看起来我需要有一个Parameter或者Mapping,然后硬编码VPC ID,并在子网脚本中引用它,除非VPC和Subnet都是在同一个脚本中创建的,这样我才能使用"VpcId" : { "Ref" : "myVPC" } 引用VPC ID。 - Roobie
1
如果您已经有一个VPC,则可以在ref中使用它的ID。例如:"VpcId":{"Ref": "vpc-123456"} - bennie j
1
无法工作:模板验证错误:模板格式错误:未解决的资源依赖... - Ashesh
@benniej的建议对我也不起作用。我将尝试使用参数和映射选项。 - Sam Hammamy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接