我正在尝试在嵌套的CloudFormation堆栈中重用旧的VPC和ELB模板。
VPC模板:
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Description" : "AppVPC",
"Resources" : {
"AppVPC" : {
"Type" : "AWS::EC2::VPC",
"Properties" : {
"CidrBlock" : "10.100.0.0/16",
"EnableDnsSupport" : "true",
"EnableDnsHostnames" : "true",
"InstanceTenancy" : "default",
"Tags" : [ {"Key" : "Name", "Value" : "appvpc"} ]
}
},
"Pub1" :{
"Type" : "AWS::EC2::Subnet",
"Properties" : {
"VpcId" : { "Ref": "AppVPC" },
"CidrBlock" : "10.100.64.0/26",
"AvailabilityZone" : "us-east-1a",
"Tags" : [ {"Key" : "Name", "Value" : "public-1"} ]
}
} ,
"Outputs" : {
"public1" : {
"Description": "Public Subnets",
"Value" : { "Ref" : "Pub1" }
}
}
}
ELB模板:
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Description" : "ELB",
"Resources" : {
"ELB" : {
"Type": "AWS::ElasticLoadBalancing::LoadBalancer",
"Properties": {
"CrossZone" : "True",
"HealthCheck" : {
"Target" : "HTTP:80/",
"HealthyThreshold" : "3",
"UnhealthyThreshold" : "5",
"Interval" : "30",
"Timeout" : "5"
},
"LoadBalancerName" : "ELB-APP",
"Listeners" : [ {
"LoadBalancerPort" : "80",
"InstancePort" : "80",
"Protocol" : "HTTP"
} ],
"Subnets" : [ "Pub1" ],
"Tags" : [ {"Key" : "Name", "Value" : "ELB-APP"} ]
}
}
}
}
最后我将两个模板嵌套在一个嵌套的Stack中:
{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"VPC": {
"Type": "AWS::CloudFormation::Stack",
"Properties": {
"TemplateURL": "https://s3.amazonaws.com/cloudformation-stack-custom/vpc.json",
"TimeoutInMinutes": "60"
}
},
"ELB": {
"Type": "AWS::CloudFormation::Stack",
"Properties": {
"TemplateURL": "https://s3.amazonaws.com/cloudformation-stack-custom/elb.json",
"Parameters": {
"Pub1" : { "Fn::GetAtt" : [ "VPC", "Outputs.public1" ] },
},
"TimeoutInMinutes": "60"
}
}
}
}
我的问题是ELB模板需要SubnetId并且我传递参数Pub1但它似乎不起作用。
我做错了什么?
答案 0 :(得分:5)
ELB模板缺少Parameters
部分。
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Description" : "ELB",
"Parameters": {
"Pub1": {
"Type": "AWS::EC2::Subnet::Id"
}
},
"Resources" : {
"ELB" : {
"Type": "AWS::ElasticLoadBalancing::LoadBalancer",
"Properties": {
"CrossZone" : "True",
"HealthCheck" : {
"Target" : "HTTP:80/",
"HealthyThreshold" : "3",
"UnhealthyThreshold" : "5",
"Interval" : "30",
"Timeout" : "5"
},
"LoadBalancerName" : "ELB-APP",
"Listeners" : [{
"LoadBalancerPort" : "80",
"InstancePort" : "80",
"Protocol" : "HTTP"
}],
"Subnets" : [{"Ref": "Pub1"}],
"Tags" : [{"Key": "Name", "Value": "ELB-APP"}]
}
}
}
}