Próbuję wdrożyć docker
obraz kontenera do AWS
użycia ECS
, ale instancja EC2 nie jest tworzona. Przeszukałem internet w poszukiwaniu wyjaśnienia, dlaczego otrzymuję następujący błąd:
„Wystąpił błąd klienta (InvalidParameterException) podczas wywoływania operacji RunTask: w klastrze nie znaleziono żadnych instancji kontenera”.
Oto moje kroki:
1. Przesłano obraz dockera Z Ubuntu do mojego repozytorium Amazon ECS.
2. Zarejestrowano definicję zadania ECS:
aws ecs register-task-definition --cli-input-json file://path/to/my-task.json
3. Uruchomiłem zadanie:
aws ecs run-task --task-definition my-task
Jednak to się nie udaje.
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ż użyć konsoli zarządzania do skonfigurowania klastra i usług, ale pojawia się ten sam błąd. Jak skonfigurować klaster, aby zawierał wystąpienia ec2 i jakiego rodzaju wystąpienia kontenera muszę używać? Myślałem, że cały ten proces polega na stworzeniu instancji EC2 na początek !!
źródło
Odpowiedzi:
Doszedłem do tego po kilku godzinach badania. Amazon, jeśli nasłuchujesz, powinieneś określić to gdzieś w konsoli zarządzania podczas tworzenia klastra lub dodawania instancji do klastra:
Oto rigmarole:
1. Przejdź do pulpitu nawigacyjnego EC2 i kliknij
Launch Instance
przycisk.2. W obszarze
Community AMIs
Wyszukajecs-optimized
i wybierz ten, który najlepiej pasuje do potrzeb Twojego projektu. Każdy zadziała. Kliknij Następny.3. Gdy dojdziesz do Konfigurowania szczegółów instancji, kliknij
create new IAM role link
i utwórz nową rolę o nazwieecsInstanceRole
.4. Dołącz
AmazonEC2ContainerServiceforEC2Role
zasady do tej roli.5. Następnie zakończ konfigurację instancji ECS.
UWAGA: Jeśli tworzysz serwer sieciowy, będziesz chciał utworzyć grupę bezpieczeństwa, aby umożliwić dostęp do portu 80.
Po kilku minutach, gdy instancja zostanie zainicjowana i uruchomiona, możesz odświeżyć kartę ECS Instances, którą również próbujesz dodać.
źródło
EC2
jako typ uruchomienia, gdy pojawi się ten błąd ...#!/bin/bash echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config
wAdvanced Details -> User data
jeśli masz swój własny, dla klastra domyślny. W przeciwnym razie nowo utworzona instancja EC2 utworzy klaster domyślny.Obecnie interfejs sieciowy Amazon AWS może automatycznie tworzyć instancje z poprawnym AMI i poprawną nazwą, aby zarejestrować się we właściwym klastrze.
Mimo że wszystkie instancje zostały utworzone przez Amazon z prawidłowymi ustawieniami, moje instancje nie zostałyby zarejestrowane. Na forach Amazon AWS znalazłem wskazówkę. Okazuje się, że Twoje klastry potrzebują dostępu do Internetu, a jeśli Twój prywatny VPC nie ma bramy internetowej, klastry nie będą mogły się połączyć.
Poprawka
W panelu kontrolnym VPC należy utworzyć nową bramę internetową i podłączyć ją do VPC używanego przez klaster. Po podłączeniu musisz zaktualizować (lub utworzyć) tabelę tras dla VPC i dodać jako ostatnią linię
Gdzie igw-24b16740 to nazwa nowo utworzonej bramy internetowej.
źródło
aws ec2 associate-route-table --subnet-id $SUBNET_ID --route-table-id $ROUTE_TABLE_ID
- czy mogę zasugerować dodanie tego do odpowiedzi?Napotkałem ten problem podczas korzystania z Fargate. Naprawiłem to, kiedy wyraźnie zdefiniowałem
launchType="FARGATE"
podczas dzwonieniarun_task
.źródło
--launch-type FARGATE
Inne sugerowane kontrole
Wybór sugerowanego AMI, który został określony dla danego regionu, rozwiązał mój problem.
Aby dowiedzieć się o AMI - sprawdź Uruchamianie instancji kontenera Amazon ECS .
Domyślnie wszystkie wystąpienia ec2 są dodawane do domyślnego klastra. Dlatego też nazwa klastra ma znaczenie.
Zobacz punkt 10 w sekcji Uruchamianie instancji kontenera Amazon ECS .
Więcej informacji w tym wątku .
źródło
Na wypadek, gdyby ktoś inny został zablokowany przez ten problem, tak jak ja ... Próbowałem wszystkiego tutaj i nie zadziałało.
Poza tym, co zostało tutaj powiedziane, dotyczy roli instancji EC2, jak skomentowałem tutaj , w moim przypadku działało tylko wtedy, gdy nadal skonfigurowałem instancję EC2 z prostymi informacjami. Używając danych użytkownika, skorzystaj z takiego początkowego skryptu:
Poinformowanie o powiązanej nazwie klastra ECS utworzonej w tym pliku konfiguracyjnym ecs rozwiązało mój problem. Bez tej konfiguracji dziennik agenta ECS w instancji EC2 pokazywał błąd uniemożliwiający połączenie z ECS. Robiąc to, mam instancję EC2 widoczną dla klastra ECS.
Po wykonaniu tej czynności mogłem uzyskać Instancję EC2 dostępną dla mojego klastra EC2:
Dokumentacja AWS mówi, że ta część jest opcjonalna, ale w moim przypadku nie działałaby bez tej „opcjonalnej” konfiguracji.
źródło
Jeśli napotkałeś ten problem po utworzeniu klastra
Przejdź do instancji ECS na liście instancji EC2 i sprawdź rolę IAM przypisaną do instancji. Możesz łatwo zidentyfikować instancje, używając nazwy instancji zaczynającej się od
ECS Instance
Następnie kliknij rolę IAM, a zostaniesz przekierowany do konsoli IAM. Wybierz
AmazonEC2ContainerServiceforEC2Role
politykę z listy zasad uprawnień i zapisz rolę.Twoje instancje będą dostępne w klastrze wkrótce po jego zapisaniu.
źródło
Prawdziwym problemem jest brak pozwolenia. Jeśli utworzysz i przypiszesz rolę IAM z uprawnieniem AmazonEC2ContainerServiceforEC2Role, problem zniknie.
źródło
Inną możliwą przyczyną, na którą się natknąłem, była aktualizacja mojego klastra ECS AMI do AMI „Amazon Linux 2” zamiast „Amazon Linux AMI”, co spowodowało, że mój skrypt uruchamiania EC2 user_data nie działał.
źródło
W takim przypadku należy spojrzeć na następujące kwestie:
AmazonEC2ContainerServiceforEC2Role
dołączoną polityką zarządzanąecs-optimized
(możesz to sprawdzić w panelu EC2)W większości przypadków ten problem pojawia się z powodu nieprawidłowo skonfigurowanego VPC. Zgodnie z dokumentacją :
CYTAT: Jeśli nie masz skonfigurowanego punktu końcowego VPC interfejsu, a instancje kontenera nie mają publicznych adresów IP, to w celu zapewnienia tego dostępu muszą używać translacji adresów sieciowych (NAT).
Oto powody, dla których nie widzisz instancji EC2 na pulpicie nawigacyjnym ECS.
źródło