我不想创建新的子网和我已经创建的VPC,我希望我的cloudformation模板能够使用它们。
我在哪个参数中指定了这个,或者我对这是如何工作感到困惑?
当我查看“AWS :: EC2 :: VPC”和“AWS :: EC2 :: Subnet”的文档时,似乎这些资源仅用于创建新 VPC,子网就是这个正确的吗?
我应该直接将实例资源指向我希望它使用的现有VPC和子网吗?
编辑:
例如,如果我的模板中有实例资源,我将其直接指向现有的子网,如下所示:
let rotate = a => a[0].map((col, c) => a.map((row, r) => a[r][c]).reverse())
验证模板时出现此错误:
{
"Resources": {
"MyServer": {
"Type": "AWS::EC2::Instance",
"Properties": {
"InstanceType": {
"Ref": "InstanceType"
},
"SubnetId": {
"Ref": "subnet-abc123"
},
...
我尝试使用映射执行此操作但仍然出错。 我在映射中有这个:
Template contains errors.: Template format error: Unresolved resource dependencies [subnet-abc123] in the Resources block of the template
这在实例资源中:
"Mappings": {
"SubnetID": {
"TopKey": {
"Default": "subnet-abc123"
}
}
我在尝试验证时遇到此错误:
"SubnetId": {
"Fn::FindInMap": [
"SubnetID",
{
"Ref": "TopKey"
},
"Default"
]
}
答案 0 :(得分:3)
在Parameters
部分指定它们,并在Resources
部分中引用它们。 CF将允许您先选择 VPC ,然后选择子网。
"Parameters" : {
"VpcId" : {
"Type" : "AWS::EC2::VPC::Id",
"Description" : "VPCId of Virtual Private Cloud (VPC).",
"Default" : ""
},
"VpcSubnet": {
"Description" : "SubnetId in VPC",
"Type" : "AWS::EC2::Subnet::Id",
"Default" : ""
},
"Resources" : {
...
"Ec2Instance" : {
"Properties" : {
"SubnetId" : { "Ref" : "VpcSubnet" },
答案 1 :(得分:2)
如果您希望使用特定的VPC和子网,只需插入其值:
{
"Resources": {
"MyServer": {
"Type": "AWS::EC2::Instance",
"Properties": {
"InstanceType": "t2.micro",
"SubnetId": "subnet-abc123",
"ImageId": "ami-abcd1234"
}
}
}
子网始终属于VPC,因此指定子网将自动选择匹配的VPC。