我有两个Cloudformation文件被用来制作两个不同的包含VPC的堆栈。 一个是pipe理VPC,将用于通过SSH访问其他VPC,这是典型的bastiony用例。
我启动pipe理VPC,然后将其ID作为VPC Idtypes的parameter passing给第二个CF文件:
"AdminVPC": { "Description": "ID of the admin VPC", "Type": "AWS::EC2::VPC::Id" }
但是当我尝试设置VPC的networkingACL时,我正在做
"Type": "AWS::EC2::NetworkAclEntry", "Properties": { "CidrBlock": { "Fn::GetAtt": [ { "Ref": "AdminVPC" }, "CidrBlock" ] },
其中,当我运行ecs cfvalidation时,只产生消息
An error occurred (ValidationError) when calling the ValidateTemplate operation: Internal Failure
它工作正常,如果我只是硬编码像CIDR块
"CidrBlock": "0.0.0.0/0",
但文件声称 :
所以我不确定这个用法有什么问题
Fn::GetAtt
的第一个参数必须是模板中定义的逻辑资源的名称,所以该string必须是模板中创build的资源之一。
使用AWS参数types时,所有传递给模板的都是该资源的ID,因此{"Ref": "AdminVPC"}
包含的唯一值将与vpc-abc123
类似。 您不会将VPC传递到模板,只是其ID。
解决您的问题的方法是将CIDR作为参数接收到模板中,创buildVPC的模板应该有一个使用{"Fn::GetAtt": ["AdminVPC", "CidrBlock"]}