Я пытаюсь развернуть docker
образ контейнера для AWS
использования ECS
, но экземпляр EC2 не создается. Я поискал в Интернете объяснение, почему я получаю следующую ошибку:
«Ошибка клиента (InvalidParameterException) произошла при вызове операции RunTask: в вашем кластере не обнаружено ни одного экземпляра контейнера».
Вот мои шаги:
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 для начала !!
источник
Ответы:
Я понял это после еще нескольких часов расследования. Amazon, если вы слушаете, вы должны указать это где-нибудь в консоли управления при создании кластера или добавлении экземпляров в кластер:
Вот вздор:
1. Перейдите на панель управления EC2 и нажмите
Launch Instance
кнопку.2. В разделе «
Community AMIs
Поиск»ecs-optimized
выберите тот, который лучше всего соответствует потребностям вашего проекта. Любой будет работать. Нажмите кнопку "Далее.3. Когда вы перейдете к настройке сведений об экземпляре, нажмите
create new IAM role link
и создайте новую роль с именемecsInstanceRole
.4. Прикрепите
AmazonEC2ContainerServiceforEC2Role
политику к этой роли.5. Затем завершите настройку экземпляра ECS.
ПРИМЕЧАНИЕ. Если вы создаете веб-сервер, вам нужно создать группу безопасности, чтобы разрешить доступ к порту 80.
Через несколько минут, когда экземпляр будет инициализирован и запущен, вы можете обновить вкладку Экземпляры ECS, которые вы также пытаетесь добавить.
источник
EC2
тип запуска, когда вы получили эту ошибку ...#!/bin/bash echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config
в ,Advanced Details -> User data
если у вас есть свой собственный, номер кластер по умолчанию. В противном случае вновь созданный экземпляр EC2 создаст кластер по умолчанию.В настоящее время веб-интерфейс Amazon AWS может автоматически создавать экземпляры с правильным AMI и правильным именем, чтобы он был зарегистрирован в правильном кластере.
Несмотря на то, что все экземпляры были созданы Amazon с правильными настройками, мои экземпляры не регистрировались. На форумах Amazon AWS я нашел подсказку. Оказывается, вашим кластерам нужен доступ в Интернет, и если ваш частный VPC не имеет интернет-шлюза, кластеры не смогут подключиться.
Исправление
На панели управления VPC необходимо создать новый Интернет-шлюз и подключить его к VPC, используемому кластером. После подключения вы должны обновить (или создать) таблицу маршрутов для VPC и добавить в качестве последней строки
Где igw-24b16740 - это имя вашего недавно созданного интернет-шлюза.
источник
aws ec2 associate-route-table --subnet-id $SUBNET_ID --route-table-id $ROUTE_TABLE_ID
могу я предложить добавить это к ответу?Я столкнулся с этой проблемой при использовании Fargate. Исправил когда явно определил
launchType="FARGATE"
при звонкеrun_task
.источник
--launch-type FARGATE
Другие рекомендуемые проверки
Выбор предлагаемого AMI, который был указан для данного региона, решил мою проблему.
Чтобы узнать AMI, установите флажок Запуск экземпляра контейнера Amazon ECS .
По умолчанию все экземпляры ec2 добавляются в кластер по умолчанию. Так что название кластера тоже имеет значение.
См. Пункт 10 в разделе « Запуск экземпляра контейнера Amazon ECS» .
Более подробная информация доступна в этой ветке .
источник
На всякий случай, если кто-то еще заблокирован этой проблемой, как я ... Я перепробовал все здесь и у меня не получилось.
Помимо того, что было сказано здесь, касается роли экземпляра EC2, как здесь прокомментировано , в моем случае работало только в том случае, если я все еще настраивал экземпляр EC2 с простой информацией. Используя пользовательские данные, начальный сценарий, подобный этому:
Сообщение о соответствующем имени кластера ECS, созданном в этом файле конфигурации ecs, решило мою проблему. Без этой конфигурации журнал агента ECS в экземпляре EC2 показывал ошибку, из-за которой невозможно было подключиться к ECS, при этом у меня есть экземпляр EC2, видимый для кластера ECS.
После этого я смог получить экземпляр EC2, доступный для моего кластера EC2:
В документации AWS сказано, что эта часть является необязательной, но в моем случае она не работала без этой «необязательной» конфигурации.
источник
Если вы столкнулись с этой проблемой после создания кластера
Перейдите к экземпляру ECS в списке экземпляров EC2 и проверьте роль IAM, которую вы назначили экземпляру. Вы можете легко идентифицировать экземпляры по имени экземпляра, начинающемуся с
ECS Instance
После этого нажмите на роль IAM, и она направит вас к консоли IAM. Выберите
AmazonEC2ContainerServiceforEC2Role
политику из списка политик разрешений и сохраните роль.Ваши экземпляры будут доступны в кластере вскоре после его сохранения.
источник
Настоящая проблема - отсутствие разрешения. Пока вы создаете и назначаете роль IAM с разрешением AmazonEC2ContainerServiceforEC2Role, проблема исчезает.
источник
Другой возможной причиной, с которой я столкнулся, было обновление AMI моего кластера ECS до AMI «Amazon Linux 2» вместо «AMI Amazon Linux», из-за чего мой скрипт запуска EC2 user_data не работал.
источник
Когда это происходит, вам нужно обратить внимание на следующее:
AmazonEC2ContainerServiceforEC2Role
привязанной к ней управляемой политикой.ecs-optimized
(вы можете проверить это на панели инструментов EC2)В большинстве случаев эта проблема возникает из-за неправильно настроенного VPC. Согласно документации :
ЦИТАТА: Если у вас не настроена конечная точка интерфейса VPC и ваши экземпляры контейнеров не имеют общедоступных IP-адресов, они должны использовать преобразование сетевых адресов (NAT) для обеспечения такого доступа.
Это причины, по которым вы не видите экземпляры EC2 в списке на панели управления ECS.
источник
Я понимаю, что это более старая тема, но я наткнулся на нее, увидев ошибку, упомянутую OP, следуя этому руководству .
Переход на
ecs-optimized
образ AMI не помог. У моего VPC уже был маршрут 0.0.0.0/0, указывающий на подсеть. Мои экземпляры были добавлены в правильный кластер, и у них были соответствующие разрешения.Благодаря ссылке @ sanath_p на эту ветку я нашел решение и сделал следующие шаги:
IP address type
в дополнительных настройках значение «Назначать общедоступный IP-адрес каждому экземпляру».источник