如何正确格式化此 YAML 代码段?

时间:2021-05-20 19:07:26

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

我有一个大致如下所示的 cloudformation 片段:

from collections import Counter


class ChoreTracker:
    def __init__(self):
        self.chores = Counter()

    def add_hours(self, chore, time):
        self.chores[chore] += time

    def print_summary(self):
        for chore, time in self.chores.items():
            print(f"{chore}:", time)


tracker = ChoreTracker()

tracker.add_hours("sweeping", 0.75)
tracker.add_hours("laundry", 0.5)
tracker.add_hours("working", 6)
tracker.add_hours("mopping", 0.5)
tracker.add_hours("laundry", 1)
tracker.add_hours("working", 5.5)

tracker.print_summary()

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

  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

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

1 个答案:

答案 0 :(得分: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
相关问题