CannotPullContainerError: ошибка отмены контекста при запуске задачи ECS - PullRequest
0 голосов
/ 04 ноября 2019

Я запускаю задачу ECS с Fargate, и контейнер переходит в состояние STOPPED после нескольких минут ожидания. Статус выдает следующее сообщение об ошибке:

CannotPullContainerError: context canceled

Я использую PrivateLink, чтобы позволить хосту ECS общаться с реестром ECR без необходимости проходить через общедоступный Интернет, и именно так он настроен (безсерверный синтаксисувеличение CloudFormation):

      Properties:
        PrivateDnsEnabled: true
        ServiceName: com.amazonaws.ap-southeast-2.ecr.dkr
        SubnetIds:
          - { Ref: frontendSubnet1 }
          - { Ref: frontendSubnet2 }
        VpcEndpointType: Interface
        VpcId: { Ref: frontendVpc }

Есть идеи, что является причиной ошибки?

1 Ответ

0 голосов
/ 13 ноября 2019

Вы также добавили конечную точку S3? Вот рабочий фрагмент моего шаблона, я смог решить проблему с помощью поддержки aws:

  EcrDkrEndpoint:
Type: 'AWS::EC2::VPCEndpoint'
Properties:
  PrivateDnsEnabled: true
  SecurityGroupIds: [!Ref 'FargateContainerSecurityGroup']
  ServiceName: !Sub 'com.amazonaws.${AWS::Region}.ecr.dkr'
  SubnetIds: [!Ref 'PrivateSubnetOne', !Ref 'PrivateSubnetTwo']
  VpcEndpointType: Interface
  VpcId: !Ref 'VPC'

Для S3 вы должны знать, что таблица маршрутов необходима - обычно вы хотите использоватьтак же, как для интернет-шлюза, содержащего маршрут 0.0.0.0/0

  S3Endpoint:
Type: 'AWS::EC2::VPCEndpoint'
Properties:
  ServiceName: !Sub 'com.amazonaws.${AWS::Region}.s3'
  VpcEndpointType: Gateway
  VpcId: !Ref 'VPC'
  RouteTableIds: [!Ref 'PrivateRouteTable'] 

Без конечной точки для cloudwatch вы получите еще один сбой, он также необходим:

  CloudWatchEndpoint:
Type: 'AWS::EC2::VPCEndpoint'
Properties:
  PrivateDnsEnabled: true
  SecurityGroupIds: [!Ref 'FargateContainerSecurityGroup']
  ServiceName: !Sub 'com.amazonaws.${AWS::Region}.logs'
  SubnetIds: [!Ref 'PrivateSubnetOne', !Ref 'PrivateSubnetTwo']
  VpcEndpointType: Interface
  VpcId: !Ref 'VPC'

EDIT: личная таблица маршрутов:

  PrivateRoute:
Type: AWS::EC2::Route
DependsOn: InternetGatewayAttachement
Properties:
  RouteTableId: !Ref 'PublicRouteTable'
  DestinationCidrBlock: '0.0.0.0/0'
  GatewayId: !Ref 'InternetGateway'
...