Помилка AWS ECS під час виконання завдання: у вашому кластері не знайдено жодної інстанції контейнера


115

Я намагаюся розгорнути dockerзображення контейнера для AWSвикористання ECS, але екземпляр EC2 не створюється. Я обшукував Інтернет, шукаючи пояснення, чому я отримую таку помилку:

"Під час виклику операції RunTask сталася помилка клієнта (InvalidParameterException). У вашому кластері не знайдено жодних екземплярів контейнерів."

Ось мої кроки:

1. Натиснув зображення докера від Ubuntu до мого репортажу Amazon ECS.

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 для початку !!


Мені здається, що я це бачив, коли швидко пройшов між кроками створення кластеру і виконав завдання.
Бен Крізі

Відповіді:


158

Я зрозумів це після ще кількох годин розслідування. Amazon, якщо ви слухаєте, вам слід вказати це десь на консолі управління під час створення кластера або додавання екземплярів до кластеру:

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

Ось ригмарол:

1. Перейдіть до інформаційної панелі EC2 і натисніть Launch Instanceкнопку.

2. У розділі Community AMIsШукайте ecs-optimizedта виберіть той, який найкраще відповідає вашим потребам проекту. Будь-який буде працювати. Клацніть далі.

3. Дійшовши до Налаштувати деталі екземпляра, натисніть на create new IAM role linkі створіть нову роль, яку називають ecsInstanceRole.

4. Приєднайте AmazonEC2ContainerServiceforEC2Roleполітику до цієї ролі.

5. Потім закінчіть налаштування свого екземпляра ECS.
ПРИМІТКА. Якщо ви створюєте веб-сервер, вам потрібно створити групу безпеки, щоб дозволити доступ до порту 80.

Через декілька хвилин, коли екземпляр ініціалізований і запущений, ви можете оновити вкладку «Екземпляри ECS», ви також намагаєтеся додати екземпляри.


10
Вибір запропонованого ami, який був визначений для даної області, вирішив мою проблему. Щоб дізнатись про ami, слід вибрати цей URL docs.aws.amazon.com/AmazonECS/latest/developerguide/…
sanath_p

1
не бачивши AmazonEC2ContainerServiceforEC2Role, чи є якісь зміни після останнього повідомлення?
BlueDolphin

1
@BlueDolphin Мені вдалося знайти таку політику, коли створив нову роль в IAM.
cyrf

6
Варто зауважити зараз (квітень 2018 року), якщо ви використовуєте поточний Beta Fargate ( aws.amazon.com/fargate ), щоб уникнути цілого типу клопоту, можливо, вам подобається, що ви просто вибрали EC2тип запуску, коли отримали цю помилку ...
скасування

10
І, при створенні EC2, не забудьте додати #!/bin/bash echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.configв , Advanced Details -> User dataякщо у вас є свій власний, номер кластер по замовчуванням. Інший розумний новостворений екземпляр EC2 створить кластер за замовчуванням.
Якуб Чаплічки

40

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

Хоча всі екземпляри були створені Amazon з правильними налаштуваннями, мої екземпляри не реєструвались. На форумах Amazon AWS я знайшов підказку. Виявляється, вашим кластерам потрібен доступ до Інтернету, і якщо у вашого приватного VPC немає шлюзу для Інтернету, кластери не зможуть підключитися.

Виправлення

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

0.0.0.0/0 igw-24b16740  

Де igw-24b16740 - назва вашої щойно створеної Інтернет-шлюзи.


Про це йдеться в docs.aws.amazon.com/AWSEC2/latest/UserGuide/… [EC2-VPC] Перевірте таблицю маршруту для підмережі. Вам потрібен маршрут, який надсилає весь трафік, призначений за межами VPC, на Інтернет-шлюз для VPC.
Джастін М. Кеїс

2
Дякую за підказку! Я призначив групі безпеки для моїх примірників, яка заблокувала весь вихідний трафік, крім трафіку моєму балансиру навантаження. Я переключив це, щоб дозволити весь вихідний трафік, але обмежити вхідний трафік тільки з балансира навантаження, і екземпляри потім з'явилися в моєму кластері EC2.
Мікепот

1
Я б хотів, щоб я міг проголосувати вашу відповідь не один раз. Це вирішило мою точну проблему "У вашому кластері не знайдено жодних екземплярів контейнерів". і початкова відповідь, проголосована більше, не мала нічого спільного з вашим фактичним рішенням. Ще раз дякую вам.
alexkb

Окрім асоціації шлюзу з VPC, можливо, вам буде потрібно маршрутизувати Інтернет-трафік через нього для конкретної підмережі, в якій розміщуються ваші екземпляри ECS. - наприклад, aws ec2 associate-route-table --subnet-id $SUBNET_ID --route-table-id $ROUTE_TABLE_ID- чи можу я запропонувати додати це у відповідь?
Грег

Я думаю, що варто згадати, що в момент додавання маршруту для 0,0.0..0 / 0, що вказує на IGW, підмережа вже не є приватною підмережею. З точки зору безпеки мережі краще створити маршрут, що вказує на шлюз NAT.
Генрік Пінгель

18

Я зіткнувся з цим питанням під час використання Fargate. Я це виправив, коли я чітко визначив, launchType="FARGATE"коли дзвонив run_task.


1
З CLI я додав--launch-type FARGATE
shlomiLan

11

Інші запропоновані перевірки

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

    Щоб дізнатися AMI - перевірте Запуск екземпляра контейнера Амазонки ECS .

  2. За замовчуванням всі екземпляри ec2 додаються до кластеру за замовчуванням. Отже, назва кластеру також має значення.

Дивіться пункт 10 у розділі Запуск екземпляра контейнера ECS-контейнера Amazon .

Більше інформації доступно в цій темі .


3

На всякий випадок, якщо хтось інший заблокував цю проблему, як я ... Я все тут спробував і не працював.

Крім того, що було сказано тут стосовно ролі екземпляра EC2, як це було прокоментовано тут , у моєму випадку працювало лише у тому випадку, якщо я все-таки налаштував інстанцію EC2 простою інформацією. Використання даних користувача початковий сценарій, такий:

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

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

Після цього я міг отримати інстанцію EC2 для мого кластера EC2: введіть тут опис зображення

Документація AWS зазначає, що ця частина не є обов'язковою, але в моєму випадку вона не працює без цієї "необов'язкової" конфігурації.


2

Якщо ви зіткнулися з цим питанням після створення кластеру

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

введіть тут опис зображення

Після цього натисніть на роль IAM, і вона направить вас на консоль IAM. Виберіть AmazonEC2ContainerServiceforEC2Roleполітику зі списку політик дозволів і збережіть роль.

Ваші екземпляри будуть доступні в кластері незабаром після їх збереження.


1

Справжня проблема - відсутність дозволу. Поки ви створюєте та призначаєте роль IAM з дозволом AmazonEC2ContainerServiceforEC2Role, проблема зникає.


0

Ще однією можливою причиною, з якою я зіткнувся, було оновлення мого кластера ECS AMI до AMI Amazon Linux 2 замість "AMI Amazon Linux AMI", через що мій сценарій запуску EC2 user_data не працював.


0

Коли це трапляється, вам потрібно звернутися до наступного:

  1. Ваші екземпляри EC2 повинні мати роль з AmazonEC2ContainerServiceforEC2Roleдоданою до нього керованою політикою
  2. Ваші інстанції EC2 повинні мати зображення AMI, яке є ecs-optimized(ви можете перевірити це на інформаційній панелі EC2)
  3. У приватних підмережах VPC не присвоєні загальнодоступні IP-адреси, АБО не налаштовано кінцеву точку інтерфейсу VPC, АБО не встановлено NAT-шлюз

Найчастіше ця проблема з’являється через неправильно налаштований VPC. Відповідно до Документації :

ЦІТА: Якщо у вас немає налаштованої кінцевої точки інтерфейсу VPC, а екземпляри контейнерів не мають загальнодоступних IP-адрес, вони повинні використовувати трансляцію мережевих адрес (NAT) для надання цього доступу.

  • Для створення кінцевої точки VPC: Дотримуйтесь тут документації
  • Щоб створити NAT-шлюз: Дотримуйтесь тут документації

Це причини, через які ви не бачите екземплярів EC2, перелічених на інформаційній панелі ECS.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.