2016-04-09 14 views
39

Próbuję wdrożyć obraz kontenera docker do AWS przy użyciu ECS, ale instancja EC2 nie jest tworzona. Mam prana internet patrząc na wyjaśnienie, dlaczego ja dostaję następujący błąd:AWS Błąd ECS podczas uruchamiania zadania: Nie znaleziono instancji kontenera w klastrze

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

Oto moje kroki:

1. pchnął obraz Döcker Ubuntu do mojego Amazon ECS repo.

2. Zarejestrowana definicję ECS zadanie:

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

3. Ran zadanie:

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

Ale to się nie powiedzie.

Oto moje zadanie:

{ 
    "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 
    } 
    ] 
} 

Próbowałem również przy użyciu konsoli zarządzania skonfigurować klaster i usług, ale mam ten sam błąd. Jak skonfigurować, aby klaster miał instancje EC2 i jakiego rodzaju instancji kontenera potrzebuję użyć? Myślałem, że cały ten proces polega na stworzeniu instancji EC2 na początek!

Odpowiedz

65

Wymyśliłem to po kilku godzinach śledztwa. Amazon, jeśli słuchasz, należy podać ten gdzieś w konsoli zarządzania podczas tworzenia klastra lub dodawania instancji do klastra:

"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"

Oto żmudną procedurę:

1. przejdź do EC2 Dashboard i kliknij przycisk Launch Instance.

2. Pod Community AMIs, Wyszukaj ecs-optimized i wybierz ten, który najlepiej pasuje do Twoich potrzeb projektu. Każdy będzie działać. Kliknij Następny.

3. Po skonfigurowaniu szczegółów instancji kliknij create new IAM role link i utwórz nową rolę o nazwie ecsInstanceRole.

4. Dołącz do tej roli zasadę AmazonEC2ContainerServiceforEC2Role.

5. Następnie zakończ konfigurowanie swojego ECS Instance.
UWAGA: Jeśli jesteś tworząc serwer WWW będzie chciał stworzyć securityGroup, aby umożliwić dostęp do portu 80.

Po kilku minutach, gdy instancja jest inicjowany i działa można odświeżyć kartę Instances na ECS próbujesz też dodać instancje.

+4

Wybór sugerowanego ami, który został określony dla danego regionu, rozwiązał mój problem. Aby dowiedzieć się ami, które powinieneś wybrać, sprawdź ten adres URL http://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_container_instance.html – user3716835

+1

nie widząc opcji AmazonEC2ContainerServiceforEC2Role, czy są jakieś zmiany od ostatniego postu? – BlueDolphin

+0

@ BlueDolphin Udało mi się znaleźć tę zasadę, gdy utworzyłem nową rolę w IAM. – cyrf

10

Inne proponowane kontrole

1) Wybór sugerowanego ami, który został określony dla danego regionu rozwiązać mój problem. Aby dowiedzieć się ami - sprawdź ten link http://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_container_instance.html

2) Przez defaault wszystkie instancje EC2 są dodawane do wartości domyślnych klastra. Znaczenie ma również nazwa klastra.

Patrz punkt 10 o http://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_container_instance.html

Więcej informacji można znaleźć w tym wątku https://forums.aws.amazon.com/thread.jspa?threadID=189513

15

Obecnie interfejs Amazon AWS internetowa może automatycznie tworzyć instancje z prawidłowym AMI i poprawnej nazwy więc to register do właściwego klastra.

Mimo że wszystkie wystąpienia zostały utworzone przez Amazon z poprawnymi ustawieniami, moje wystąpienia nie zostaną zarejestrowane. Na Amazon AWS forums znalazłem wskazówkę. Okazuje się, że klastry potrzebują dostępu do Internetu, a jeśli prywatny VPC nie ma bramy internetowej, klastry nie będą mogły się połączyć.

Rozwiązaniem

W desce rozdzielczej VPC należy utworzyć nowy Internet Gateway i podłączyć go do VPC używanego przez klaster. Po załączeniu należy zaktualizować (lub utworzyć) tabela trasa dla VPC i dodać jako ostatnia linia

0.0.0.0/0 igw-24b16740 

Gdzie IGW-24b16740 to nazwa twojej świeżo utworzonego bramy internetowej.

+0

Twoja odpowiedź naprawiła dla mnie problem "Nie znaleziono kontenerów w twojej gromadzie". Dziękuję Ci bardzo! –

+0

Jest to wymienione na stronie http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html * [EC2-VPC] Sprawdź tabelę tras dla podsieci. Potrzebujesz trasy, która wysyła cały ruch przeznaczony poza VPC do bramy internetowej dla VPC. * –

+0

Dziękuję za wskazówkę! Do moich instancji przypisałem grupę zabezpieczeń, która blokowała cały ruch wychodzący, z wyjątkiem ruchu do mojego systemu równoważenia obciążenia. Zmieniłem to, aby zezwolić na cały ruch wychodzący, ale ograniczałem ruch przychodzący tylko z modułu równoważenia obciążenia, a wystąpienia pojawiały się wtedy w moim klastrze EC2. – Mikepote