AWS ECS: недействительный сервис в ARN (Сервис: AmazonECS; ...) - PullRequest
0 голосов
/ 20 марта 2019

Попытка создать службу ECS (на Fargate) с облачной информацией, но получена ошибка:

Недопустимый сервис в ARN (Сервис: AmazonECS; Код состояния: 400; Ошибка Код: InvalidParameterException; Идентификатор запроса: ххх).

Согласно сообщению об ошибке, кажется, что некоторые ARN неправильные, но я не нашел причину, я проверил ARN ролей IAM и все в порядке. Другие ARN передаются с функцией! Ref (поэтому не опечатка)

Создаются все ресурсы (в том числе из всех других вложенных шаблонов, vpc, cluster, alb и т. Д.), Кроме ресурса "Служба" (служба ECS).

Ниже приведен используемый шаблон (вложенный шаблон). Все параметры в порядке (передается из корневого шаблона). Параметры TaskExecutionRole и ServiceRole являются ARN из ролей IAM, созданных мастером ECS:

Description: >
  Deploys xxx ECS service, with load balancer listener rule,
  target group, task definition, service definition and auto scaling

Parameters:
  EnvironmentName:
    Description: An environment name that will be prefixed to resource names
    Type: String
  EnvironmentType:
    Description: See master template
    Type: String
  VpcId:
    Type: String
  PublicSubnet1:
    Type: String
  PublicSubnet2:
    Type: String
  ALBListener:
    Description: ALB listener
    Type: String
  Cluster:
    Description: ECS Cluster
    Type: String
  TaskExecutionRole:
    Description: See master template
    Type: String
  ServiceRole:
    Description: See master template
    Type: String
  ServiceName:
    Description: Service name (used as a variable)
    Type: String
    Default: xxx
  Cpu:
    Description: Task size (CPU)
    Type: String
  Memory:
    Description: Task size (memory)
    Type: String

Conditions:
  HasHttps: !Equals [!Ref EnvironmentType, production]
  HasNotHttps: !Not [!Equals [!Ref EnvironmentType, production]]

Resources:
  ServiceTargetGroup:
    Type: AWS::ElasticLoadBalancingV2::TargetGroup
    Properties:
      Name: !Sub '${EnvironmentName}-${ServiceName}'
      VpcId: !Ref VpcId
      TargetType: ip
      Port: 80
      Protocol: HTTP

  AlbListenerRule:
    Type: AWS::ElasticLoadBalancingV2::ListenerRule
    Properties:
      Actions:
      - Type: forward
        TargetGroupArn: !Ref ServiceTargetGroup
      Conditions:
      - Field: host-header
        Values: [www.mydomain.com] # test
      ListenerArn: !Ref ALBListener
      Priority: 1

  TaskDefinition:
    Type: AWS::ECS::TaskDefinition
    Properties:
      Family: !Sub '${EnvironmentName}-${ServiceName}-Task'
      ContainerDefinitions:
        - Name: !Ref ServiceName
          Image: nginx
          PortMappings:
          - ContainerPort: 80
          LogConfiguration:
            LogDriver: awslogs
            Options:
              awslogs-group: !Ref EnvironmentName
              awslogs-region: !Ref AWS::Region
              awslogs-stream-prefix: !Ref ServiceName
      NetworkMode: awsvpc
      RequiresCompatibilities: [FARGATE]
      Cpu: !Ref Cpu
      Memory: !Ref Memory
      ExecutionRoleArn: !Ref TaskExecutionRole

  Service:
    Type: AWS::ECS::Service
    DependsOn: TaskDefinition
    Properties:
      Cluster: !Ref Cluster
      ServiceName: !Ref ServiceName
      TaskDefinition: !Ref TaskDefinition
      LaunchType: FARGATE
      DesiredCount: 1
      LoadBalancers:
      - ContainerName: !Ref ServiceName
        ContainerPort: 80
        TargetGroupArn: !Ref ServiceTargetGroup
      NetworkConfiguration:
        AwsvpcConfiguration:
          AssignPublicIp: ENABLED
          Subnets:
            - !Ref PublicSubnet1
            - !Ref PublicSubnet2
      Role: !Ref ServiceRole

Я потерял несколько часов на этом и не смог решить, я много пересмотрел в документации, но ничего, если кто-то знает, как помочь.

Спасибо!

...