2016-04-09 2 views
39

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

"A client error (InvalidParameterException) occurred when calling the RunTask operation: No Container Instances were found in your cluster."

Вот мои шаги:

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 для начала!

ответ

65

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

"Before you can add ECS instances to a cluster you must first go to the EC2 Management Console and create ecs-optimized instances with an IAM role that has the AmazonEC2ContainerServiceforEC2Role policy attached"

Вот в канитель:

1. Перейдите на EC2 Dashboard, и нажмите кнопку Launch Instance.

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

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

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

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

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

+4

Выбор предлагаемого ami, который был указан для данного региона, решил мою проблему. Чтобы узнать ami, вы должны выбрать этот URL-адрес http://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_container_instance.html – user3716835

+1

не видя AmazonEC2ContainerServiceforEC2Role, есть ли какие-либо изменения со времени вашего последнего сообщения? – BlueDolphin

+0

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

10

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

1) Выбор предложенного AMI, который был определен для данного региона решить мою проблему. Чтобы узнать AMI - проверить этот адрес http://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_container_instance.html

2) По defaault всех экземпляров EC2 добавляются по умолчанию кластера. Поэтому также важно название кластера.

См пункт 10 здесь http://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_container_instance.html

Более подробная информация доступна в этой теме https://forums.aws.amazon.com/thread.jspa?threadID=189513

15

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

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

Исправление

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

0.0.0.0/0 igw-24b16740 

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

+0

Ваш ответ исправил вопрос о том, что для меня не найдено экземпляров контейнера для контейнеров. Большое спасибо! –

+0

Это указано в http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html * [EC2-VPC] Проверьте таблицу маршрутов для подсети. Вам нужен маршрут, который отправляет весь трафик, предназначенный за пределами VPC, для интернет-шлюза для VPC. * –

+0

Спасибо за подсказку! Я назначил группу безопасности моим экземплярам, ​​которые блокировали весь исходящий трафик, за исключением трафика на мой балансировщик нагрузки. Я включил это, чтобы разрешить весь исходящий трафик, но ограничивать входящий трафик только от балансировщика нагрузки, и экземпляры появились в моем кластере EC2. – Mikepote