【问题标题】:How do I properly format this YAML snippet?如何正确格式化此 YAML 代码段?
【发布时间】:2021-08-10 01:49:09
【问题描述】:

我的 cloudformation sn-p 大致如下所示:

  ContainerSecurityGroup:
    Type :  AWS::EC2::SecurityGroup
    Properties : 
       InstanceId: !Ref ContainerSG
       GroupDescription :  "ECS Containers Security Group"
       VpcId :  !Sub {{resolve:ssm:/ca/config/network/vpc_id:${ParamVersion}}}
       GroupName :  !Sub   ${Env}-${ServiceName}-sg
       SecurityGroupIngress :
        -  IpProtocol :  tcp
           FromPort :  8080
           ToPort :  8080
           CidrIp :  10.49.63.0/24
        -  IpProtocol :  tcp
           FromPort :  8080
           ToPort :  8080
           CidrIp :  10.93.0.0/16
        -  IpProtocol :  tcp
           FromPort :  8080
           ToPort :  8080
           CidrIp :  10.97.0.0/16
        -  IpProtocol :  tcp
           FromPort :  8080
           ToPort :  8080
           CidrIp :  10.50.128.0/21
        -  IpProtocol :  tcp
           FromPort :  8080
           ToPort :  8080
           CidrIp :  10.50.144.0/24
        -  IpProtocol :  tcp
           FromPort :  8080
           ToPort :  8080
           CidrIp :  172.25.0.0/16

我在这里做错了什么?我收到以下错误:

Template contains errors.: Template format error: YAML not well-formed.

有人可以帮我解决这个问题吗?有没有我没有考虑过的解决方法?

【问题讨论】:

    标签: amazon-web-services yaml amazon-cloudformation aws-security-group


    【解决方案1】:

    YAML 需要一致的缩进间距。确保为每个缩进使用相同的间距。您发布的示例为某些缩进 2 个空格,为其他缩进 3 个空格。如果您在现代 IDE(即VSCode)中编辑 YAML 文件,它应该为您格式化并进行缩进,这样您就不必考虑它了。

    另外,VpcId 行不正确,{{resolve:}} 机制目前无法与!Sub 组合参数化值,这必须是硬编码。您可能想改用SSM Parameter types,或者只是硬编码。

    ContainerSecurityGroup:
      Type: AWS::EC2::SecurityGroup
      Properties:
        InstanceId: !Ref ContainerSG
        GroupDescription: "ECS Containers Security Group"
        VpcId: {{resolve:ssm:/ca/config/network/vpc_id:1}}
        GroupName: !Sub ${Env}-${ServiceName}-sg
        SecurityGroupIngress:
          - IpProtocol: tcp
            FromPort: 8080
            ToPort: 8080
            CidrIp: 10.49.63.0/24
          - IpProtocol: tcp
            FromPort: 8080
            ToPort: 8080
            CidrIp: 10.93.0.0/16
          - IpProtocol: tcp
            FromPort: 8080
            ToPort: 8080
            CidrIp: 10.97.0.0/16
          - IpProtocol: tcp
            FromPort: 8080
            ToPort: 8080
            CidrIp: 10.50.128.0/21
          - IpProtocol: tcp
            FromPort: 8080
            ToPort: 8080
            CidrIp: 10.50.144.0/24
          - IpProtocol: tcp
            FromPort: 8080
            ToPort: 8080
            CidrIp: 172.25.0.0/16
    

    【讨论】:

    • 您好,感谢您的输入和解释。我尝试使用您的硬编码示例,但仍然出现格式错误([/Resources/ContainerSecurityGroup/Type/VpcId/Fn::Sub] 映射键必须是字符串;而是收到了映射)。你知道这是为什么吗?
    • 对不起,我有错字(我没有测试),我在我的回答中从 VpcID 中删除了 !Sub,试试这个
    • 再次感谢您的回答,但我仍然收到格式错误([/Resources/ContainerSecurityGroup/Type/VpcId] 映射键必须是字符串;而是收到了映射)。我是 CloudFormation 的新手,所以这真的很令人困惑,会碰巧知道如何解决这个问题吗?
    • 这不是真的。 Resolve 与 Sub 一起使用,您只需将 resolve 部分用引号括起来。
    猜你喜欢
    • 2010-09-07
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多