不允许使用无关的键 [HealthCheck]

问题描述

我有点被这个奇怪的错误所困扰。 我正在使用 CloudFormation 脚本部署 ECS 任务 (Fargate),它可以工作并成功部署任务。但是当设置 HealthCheck 属性时 Cloudformation 回复

Resource handler returned message: "Model validation Failed (#: extraneous key [HealthCheck] is not permitted)" (RequestToken: xxxxxxx-xxx-xxxx-xxxx-xxxxxxxxxxxx,HandlerErrorCode: InvalidRequest)

我的任务定义是:

  TaskDeFinition:
    Type: AWS::ECS::TaskDeFinition
    Properties:
      Family: !Sub ${ServiceName}-${EnvironmentName}
      cpu: !Ref 'Containercpu'
      Memory: !Ref 'ContainerMemory'
      NetworkMode: awsvpc
      RequiresCompatibilities:
        - FARGATE
      ExecutionRoleArn: arn:aws:iam::xxxxxxxx:role/some-iam-role
      HealthCheck:
        Command:
          - [ CMD-SHELL,./compose/healthcheck.sh || exit 1 ]
        Interval: 10
        Retries: 5
        StartPeriod: 30
        Timeout: 5
      TaskRoleArn:
        Fn::If:
          - 'HasCustomrole'
          - !Ref 'Role'
          - !Ref "AWS::Novalue"
      ContainerDeFinitions:
        - Name: !Ref 'ServiceName'
          cpu: !Ref 'Containercpu'
          Memory: !Ref 'ContainerMemory'
          Image: !Ref 'ImageUrl'
          PortMappings:
            - ContainerPort: !Ref 'ContainerPort'
          LogConfiguration:
            LogDriver: 'awslogs'
            Options:
              awslogs-group: !Sub ${ServiceName}-service-${EnvironmentName}
              awslogs-region: !Ref 'AWS::Region'
              awslogs-stream-prefix: !Ref 'ServiceName'
          Environment:
            - <some other environment that work ok>

解决方法

HealthCheckAWS::ECS::TaskDefinition.ContainerDefinition 的子属性,不是 AWS::ECS::TaskDefinition

的顶级属性