Подтвердить что ты не робот

AWS ECS Ошибка при выполнении задачи: в вашем кластере не было обнаружено экземпляров контейнера

Я пытаюсь развернуть образ контейнера docker на AWS с помощью ECS, но экземпляр EC2 не создается. Я просмотрел интернет, ища объяснения, почему я получаю следующую ошибку:

"При вызове операции RunTask произошла ошибка клиента (InvalidParameterException): в вашем кластере не было обнаружено экземпляров контейнера".

Вот мои шаги:

1. Вытолкнуло изображение докеров из Ubuntu в мой репозиторий ECAS Amazon.

2. Зарегистрировано определение задачи ECS:

aws ecs register-task-definition --cli-input-json file://path/to/my-task.json 

3. Задание:

aws ecs run-task --task-definition my-task

Тем не менее, он терпит неудачу.

Вот моя задача:

{
  "family": "my-task",
  "containerDefinitions": [
    {
        "environment": [],
        "name": "my-container",
        "image": "my-namespace/my-image",
        "cpu": 10,
        "memory": 500,
        "portMappings": [
            {
                "containerPort": 8080,
                "hostPort": 80
            }
        ],
        "entryPoint": [
            "java",
            "-jar",
            "my-jar.jar"
        ],
        "essential": true
    }
  ]
}

Я также попытался использовать консоль управления для настройки кластера и служб, но я получаю ту же ошибку. Как настроить кластер для экземпляров ec2 и какие экземпляры контейнера мне нужно использовать? Я думал, что весь этот процесс должен был создать экземпляры EC2 для начала!

4b9b3361

Ответ 1

Я понял это после нескольких часов расследования. Amazon, если вы слушаете, вы должны указать это где-то в консоли управления при создании кластера или добавлении экземпляров в кластер:

"Прежде чем вы сможете добавить экземпляры ECS в кластер, вы должны сначала перейти к консоли управления EC2 и создать ecs-optimized с ролью IAM, к AmazonEC2ContainerServiceforEC2Role прикреплена политика AmazonEC2ContainerServiceforEC2Role "

Вот ригмарола:

1. Перейдите на панель инструментов EC2 и нажмите кнопку " Launch Instance.

2. В разделе Community AMIs ecs-optimized и выберите тот, который наилучшим образом соответствует потребностям вашего проекта. Любой будет работать. Нажмите кнопку "Далее.

3. Когда вы доберетесь до Настроить подробности экземпляра, нажмите на create new IAM role link создания новой роли create new IAM role link и создайте новую роль с именем ecsInstanceRole.

4. Присоедините политику AmazonEC2ContainerServiceforEC2Role к этой роли.

5. Затем завершите настройку своего экземпляра ECS.
ПРИМЕЧАНИЕ. Если вы создаете веб-сервер, вам нужно создать группу безопасности, чтобы разрешить доступ к порту 80.

Через несколько минут, когда экземпляр инициализирован и запущен, вы можете обновить вкладку Экземпляры ECS, в которой вы также пытаетесь добавить экземпляры.

Ответ 2

В настоящее время веб-интерфейс Amazon AWS может автоматически создавать экземпляры с правильным AMI и правильным именем, чтобы он регистрировался в правильный кластер.

Несмотря на то, что все экземпляры были созданы Amazon с правильными настройками, мои экземпляры не регистрировались. На форуме Amazon AWS я нашел ключ. Оказывается, ваши кластеры нуждаются в доступе в Интернет, и если ваш частный VPC не имеет интернет-шлюза, кластеры не смогут подключиться.

Исправить

На панели управления VPC вы должны создать новый интернет-шлюз и подключить его к VPC, используемому кластером. После подключения вы должны обновить (или создать) таблицу маршрутов для VPC и добавить в качестве последней строки

0.0.0.0/0 igw-24b16740  

Где igw-24b16740 - это имя вашего недавно созданного интернет-шлюза.

Ответ 3

Другие предлагаемые проверки

  1. Выбор предлагаемого AMI, который был указан для данного региона, решил мою проблему.

    Чтобы узнать AMI - проверьте Запуск экземпляра контейнера Amazon ECS.

  2. По умолчанию все экземпляры ec2 добавляются в кластер по умолчанию. Так что имя кластера также имеет значение.

См. пункт 10 в разделе Запуск экземпляра контейнера Amazon ECS.

Более подробная информация доступна в этой теме.

Ответ 4

Я столкнулся с этой проблемой при использовании Fargate. Я исправил это, когда я явно определил launchType="FARGATE" при вызове run_task.

Ответ 5

Если вы столкнулись с этой проблемой после создания кластера

Перейдите к экземпляру ECS в списке экземпляров EC2 и проверьте роль IAM, назначенную этому экземпляру. Вы можете легко идентифицировать экземпляры по имени экземпляра, которое начинается с ECS Instance

enter image description here

После этого нажмите на роль IAM, и он направит вас к консоли IAM. Выберите политику AmazonEC2ContainerServiceforEC2Role из списка политик разрешений и сохраните роль.

Ваши экземпляры будут доступны в кластере вскоре после его сохранения.

Ответ 6

Настоящая проблема - отсутствие разрешения. Пока вы создаете и назначаете роль IAM с разрешением AmazonEC2ContainerServiceforEC2Role, проблема исчезает.

Ответ 7

На случай, если кто-то еще заблокирован этой проблемой, как я... Я попробовал все здесь и не работал для меня.

Кроме того, что здесь было сказано относительно роли экземпляра EC2, как это прокомментировано здесь, в моем случае это сработало только в том случае, если я все еще настроил экземпляр EC2 с простой информацией. Используя пользовательские данные, начальный скрипт выглядит так:

#!/bin/bash
cat <<'EOF' >> /etc/ecs/ecs.config
ECS_CLUSTER=quarkus-ec2
EOF

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

После этого я смог получить экземпляр EC2 для моего кластера EC2: enter image description here

В документации AWS говорится, что эта часть является необязательной, но в моем случае она не работала без этой "необязательной" конфигурации.

Ответ 8

Другой возможной причиной, с которой я столкнулся, было обновление AMI кластера ECS до AMI Amazon Linux 2 вместо Amazon AMI, что привело к тому, что мой сценарий запуска EC2 user_data не работал.