CloudFormation VPC GetAtt参数内部故障

我有两个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", 

但文件声称 :

  1. 使用GetAtt获取CIDR块closuresvpc ID应该工作
  2. 对于Fn :: GetAtt属性名称,可以使用Ref函数。

所以我不确定这个用法有什么问题

Fn::GetAtt的第一个参数必须是模板中定义的逻辑资源的名称,所以该string必须是模板中创build的资源之一。

使用AWS参数types时,所有传递给模板的都是该资源的ID,因此{"Ref": "AdminVPC"}包含的唯一值将与vpc-abc123类似。 您不会将VPC传递到模板,只是其ID。

解决您的问题的方法是将CIDR作为参数接收到模板中,创buildVPC的模板应该有一个使用{"Fn::GetAtt": ["AdminVPC", "CidrBlock"]}