AWS ECS:ECS 服务 Cloudformation 模板中的严重错误

AWS ECS: Severe bug in ECS Service Cloudformation template

尝试通过以下具有适当导入的清单使用 cloudformation 创建 ECS 服务

 UIService:
        Type: AWS::ECS::Service
        Properties:
          Cluster: !ImportValue ECSClusterName
          DesiredCount: 1
          LaunchType: EC2
          LoadBalancers:
            - ContainerName: !ImportValue UIContainerName
              ContainerPort: '80'
              TargetGroupArn: !ImportValue UITGArn
          ServiceName: ui-service
          ServiceRegistries:
           - RegistryArn: arn:aws:servicediscovery:eu-west-1:944094092130:service/srv-oIclu40KCKM3esez7
          TaskDefinition: !ImportValue UITaskArn

失败并显示以下消息:

When specifying 'host' or 'bridge' for networkMode, values for 'containerName' and 'containerPort' must be specified from the task definition.

然而,当我添加想要的值时(在 serviceregistry 属性 中,它让我假设它们是必需的?)

  UIService:
    Type: AWS::ECS::Service
    Properties:
      Cluster: !ImportValue ECSClusterName
      DesiredCount: 1
      LaunchType: EC2
      LoadBalancers:
        - ContainerName: !ImportValue UIContainerName
          ContainerPort: '80'
          TargetGroupArn: !ImportValue UITGArn
      ServiceName: ui-service
      ServiceRegistries:
       - RegistryArn: arn:aws:servicediscovery:eu-west-1:944094092130:service/srv-oIclu40KCKM3esez7
         ContainerName: !ImportValue UIContainerName
         ContainerPort: '80'
      TaskDefinition: !ImportValue UITaskArn

...我遇到以下故障:

Encountered unsupported property ContainerName

这是 AWS 的一个错误,其中 cloudformation 当前不支持 containerNamecontainerPort 属性。这是 cloudformation 的官方 docs for ServiceRegistry, and here is the docs。如果我没记错的话,service discovery发布的时候只支持awsvpc组网方式,后来加入了bridge/host。它解释了为什么我们有这样的差异。

目前,您可以创建基本的 ECS cloudformation,并使用 CLI/API/SDK 进行相应更新,或者您可以等待一段时间,以便 AWS 团队添加对相同内容的支持。

更新:根据此 new feature (introduced on 24 Sep 2018), now you can specify the containerName and containerPort in the Service Registry

根据最新 feature (introduced today), now you can specific the containerName and containerPort in ServiceRegistry

我已经快速测试过了,似乎工作正常。