我有一个嵌套模板设置,我试图将子网值传递给子ELB模板。但是,我一直收到Value of property Subnets must be of type List of String
错误。
这就是我在父模板中设置值的方法:
ELBSubnetAZ: "subnet-*****,subnet-****"
这就是我将值传递给子模板的方式:
ELBSubnetAZ: !FindInMap [ AccountSettings, !Ref "ChefServerRegion", ELBSubnetAZ ]
这就是我在子模板中使用值的方法:
ELBSubnetAZ:
Description: "ELB Subnet 1"
Type: "List<AWS::EC2::Subnet::Id>"
我也尝试过:
ELBSubnetAZ:
Description: "ELB Subnet 1"
Type: CommaDelimitedList
在资源中:
Subnets:
- !Ref ELBSubnetAZ
如果我只从父模板传递单个子网值并在子节点中接受为字符串变量,那么一切正常。 我错过了什么?
答案 0 :(得分:2)
我遇到了同样的问题。 我用于部署ELB的原始AWS CF模板是:
Parameters:
ELBSubnetID:
Type: 'List<AWS::EC2::Subnet::Id>'
Description: Subnet ID for ELB
Resources:
MyLoadBalancer:
Type: 'AWS::ElasticLoadBalancing::LoadBalancer'
Properties:
Listeners:
- LoadBalancerPort: '80'
InstancePort: '80'
Protocol: HTTP
Subnets:
- !Ref ELBSubnetID
当我使用模板在AWS CF中创建堆栈时,它抛出了以下错误消息:
Value of property Subnets must be of type List of String
我修复了模板中的 Subnets 属性部分,如下所示,然后我就能成功创建堆栈:
Parameters:
ELBSubnetID:
Type: 'List<AWS::EC2::Subnet::Id>'
Description: Subnet ID for ELB
Resources:
MyLoadBalancer:
Type: 'AWS::ElasticLoadBalancing::LoadBalancer'
Properties:
Listeners:
- LoadBalancerPort: '80'
InstancePort: '80'
Protocol: HTTP
Subnets:
- !Join
- ','
- !Ref ELBSubnetID
答案 1 :(得分:0)
以下是我解决它的方法:
我没有在父模板中进行任何更改,但在子模板中,我收到的值为String,然后使用Fn :: Split函数将字符串拆分为list。幸运的是,Fn :: Split函数输出返回List。
ELBSubnetAZ:
Description: "ELB Subnets"
Type: String
在我的资源中,这是我分裂它的方式:
Subnets: { "Fn::Split" : [ ",", { "Ref":"ELBSubnetAZ" } ] }