AWS ECS не удалось разместить задачу, потому что ни один контейнер не выполнил все его требования - PullRequest
1 голос
/ 12 марта 2019

Я использую .NET Core WEBAPI и ниже Dockerfile

FROM microsoft/dotnet:sdk AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM microsoft/dotnet:aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "DummyService.dll"]

В моем шаблоне облачной информации часть ECS выглядит следующим образом

  dummyWebApiEcsTaskDefinition:
Type: AWS::ECS::TaskDefinition
Properties:
  Family: !Ref AWS::StackName
  TaskRoleArn: !GetAtt dummyWebApiIamRole.Arn
  ContainerDefinitions:
    - Name: !Ref AWS::StackName
      Image: MY IMAGE URL
      DnsSearchDomains:
        - !Join [".", [{"Fn::ImportValue": !Sub "${accountStackName}-${AWS::Region}-envName"}, "connected", !If [chinaPartition, "TEST", "CORP"], "cloud"]]
      LogConfiguration:
        LogDriver: splunk
        Options:
          splunk-token: {"Fn::ImportValue": !Sub "${splunkHECStackName}-${AWS::Region}-SplunkHECToken"}
          splunk-url: "http://splunk-forwarder:8088"
          splunk-insecureskipverify: True
          tag: !Ref AWS::StackName
          splunk-format: json
          splunk-source: !Ref AWS::StackName
          splunk-sourcetype: AWS:ECS
      EntryPoint: []
      PortMappings:
        - ContainerPort: 5000
      Command: []
      Cpu: 0
      Environment:
        - Name: BindAddress
          Value: http://0.0.0.0:5000
        - Name: MinLogLevel
          Value: !If [isProduction, "Information", "Debug"]
      Ulimits: []
      DnsServers: []
      MountPoints: []
      DockerSecurityOptions: []
      Memory: 512
      VolumesFrom: []
      Essential: true
      ExtraHosts: []
      ReadonlyRootFilesystem: false
      DockerLabels: {}
      Privileged: false

  dummyEcsService:
Type: AWS::ECS::Service
DependsOn:
  - dummyWebApiIamRole
  - dummyInternalAlb
  - dummyAlbTargetGroup
Properties:
  Cluster:
    Fn::ImportValue: !Sub "cld-core-ecs-${AWS::Region}-ECSCluster"
  DeploymentConfiguration:
    MaximumPercent: 200
    MinimumHealthyPercent: 50
  DesiredCount: 2
  LoadBalancers:
    - ContainerName: !Ref AWS::StackName
      ContainerPort: 5000
      TargetGroupArn: !Ref dummyAlbTargetGroup
  PlacementStrategies:
    - Type: spread
      Field: attribute:ecs.availability-zone
  TaskDefinition: !Ref dummyWebApiEcsTaskDefinition
  ServiceName: !Ref AWS::StackName
  Role: !Sub "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS"

Не удалось завершить развертывание, и я вижу эту ошибку на вкладке «События службы ECS»

service cld-dummy-test не смог разместить задачу, поскольку ни один экземпляр контейнера не удовлетворял всем его требованиям. Причина: в вашем кластере не найдено ни одного экземпляра контейнера.

Ответы [ 2 ]

2 голосов
/ 14 марта 2019

Я в конце концов понял это.Приведенное ниже сообщение об ошибке указывает на то, что в этом кластере нет EC2, и, следовательно, контейнер не может быть запущен.Мы не используем Fargate.

Служба cld-dummy-test не смогла разместить задачу, поскольку ни один экземпляр контейнера не выполнил все его требования.Причина: в вашем кластере не найдено ни одного экземпляра контейнера.

Чтобы зарегистрировать EC2 в кластере, необходимо следовать этой статье AWS.https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_container_instance.html

Имейте в виду, что для запуска EC2 необходимо иметь ниже пользовательских данных, чтобы их можно было зарегистрировать.

#!/bin/bash
echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config

После того, как вышеописанное выполнено, вы не должны видетьошибка об отсутствии контейнера.Тем не менее, если вы похожи на меня, есть раздел журнала Spunk в шаблоне.У вас будет другая проблема, в которой говорится, что для задачи может использоваться что-то вроде контейнера, так как в нем отсутствует атрибут.Это довольно расплывчатое сообщение, и атрибутом может быть что угодно, что указано в нижней части страницы определения вашей задачи.

В моем случае это была запись спленка.Добавленный драйвер должен быть добавлен к экземпляру EC2.Позже я узнал, что мы больше не нуждаемся в разделении, поэтому я удалил раздел.Но если вы хотите сделать это, вам, вероятно, нужно добавить следующую строку в ваши пользовательские данные.

ECS_AVAILABLE_LOGGING_DRIVERS=["splunk","awslogs"]

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 14 марта 2019

AWS ECS имеет два типа конфигурации:

  • Fargate
  • Fargate + EC2

в обоих случаях вы не можете получить доступ к базовым ресурсам.

поэтому может быть возможной причиной ошибки в конфигурации типа запуска, если вы не можете раскрутить задачу, в противном случае на панели управления ecs вы можете выбрать тип запуска, а также выбрать определение задачи.

...