模板中不允许使用AWS Cloudformation [/ Resources / PrivateGateway / Properties]'null'值

时间:2019-09-04 14:06:41

标签: amazon-web-services amazon-cloudformation

我正在尝试运行Cloudformation模板来创建私有API网关,但出现空值错误,无法弄清原因,
以下是我正在尝试使用的模板-

AWSTemplateFormatVersion: 2010-09-09
Transform: 'AWS::Serverless-2016-10-31'
Description: Api Template Stack

Parameters:
    VpcId:
        Type: String
        Default: "vpc-xxxxxx"

Resources:
    PrivateGateway:
        Type: 'AWS::ApiGateway::RestApi'
        Properties:
        Name: 'private-gw'
        EndpointConfiguration:
            Types:
            - PRIVATE
        Policy: !Sub |
          {
            "Version": "2012-10-17",
            "Statement": [
                {
                "Effect": "Deny",
                "Principal": "*",
                "Action": "execute-api:Invoke",
                "Resource": "arn:aws:execute-api:us-east-1:${AWS::AccountId}:*/*/*/*",
                "Condition": {
                    "StringNotEquals": {
                    "aws:sourceVpc": !Ref VpcId
                    }
                }
                },
                {
                "Effect": "Allow",
                "Principal": "*",
                "Action": "execute-api:Invoke",
                "Resource": "arn:aws:execute-api:us-east-1:${AWS::AccountId}:*/*/*/*"
                }
            ]
          }

错误-

[/Resources/PrivateGateway/Properties] 'null' values are not allowed in templates

2 个答案:

答案 0 :(得分:1)

据我所知,这似乎是Yaml解析错误,而不是CloudFormation错误。

由于这是一个Yaml模板,因此受yaml specification约束。

  

每个节点必须比其父节点缩进更多。所有同级节点必须使用完全相同的缩进级别。但是,每个同级节点的内容可以独立地进一步缩进。

在您的示例中,Properties下的节点没有进一步缩进,因此它们不被视为该节点的子节点,而是同级节点。这很可能是您收到“空”值消息的原因,因为Properties节点被视为“空”或“空”。

尝试在“属性:”行下的每一行开头添加两个空格。这样会将NameEndpointConfigurationPolicy之类的节点作为Properties节点的子节点。

答案 1 :(得分:0)

能够使用花括号替换策略中的VpcId来解决它-

Promise