J'essaie de déployer une docker
image de conteneur à l' AWS
aide ECS
, mais l'instance EC2 n'est pas en cours de création. J'ai parcouru Internet à la recherche d'une explication sur les raisons pour lesquelles je reçois l'erreur suivante:
"Une erreur client (InvalidParameterException) s'est produite lors de l'appel de l'opération RunTask: aucune instance de conteneur n'a été trouvée dans votre cluster."
Voici mes étapes:
1. Poussé une image docker D'Ubuntu vers mon dépôt Amazon ECS.
2. A enregistré une définition de tâche ECS:
aws ecs register-task-definition --cli-input-json file://path/to/my-task.json
3. A exécuté la tâche:
aws ecs run-task --task-definition my-task
Pourtant, cela échoue.
Voici ma tâche:
{
"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
}
]
}
J'ai également essayé d'utiliser la console de gestion pour configurer un cluster et des services, mais j'obtiens la même erreur. Comment configurer le cluster pour avoir des instances ec2 et quel type d'instances de conteneur dois-je utiliser? Je pensais que tout ce processus était de créer les instances EC2 pour commencer !!
la source
Réponses:
J'ai compris cela après quelques heures d'enquête supplémentaires. Amazon, si vous écoutez, vous devez l'indiquer quelque part dans votre console de gestion lors de la création d'un cluster ou de l'ajout d'instances au cluster:
Voici la rigmarole:
1. Accédez à votre tableau de bord EC2 et cliquez sur le
Launch Instance
bouton.2. Sous
Community AMIs
, Rechercherecs-optimized
et sélectionnez celui qui correspond le mieux aux besoins de votre projet. Tout fonctionnera. Cliquez sur Suivant.3. Lorsque vous arrivez à Configurer les détails de l'instance, cliquez sur
create new IAM role link
et créez un nouveau rôle appeléecsInstanceRole
.4. Associez la
AmazonEC2ContainerServiceforEC2Role
stratégie à ce rôle.5. Ensuite, terminez la configuration de votre instance ECS.
REMARQUE: Si vous créez un serveur Web, vous souhaiterez créer un securityGroup pour autoriser l'accès au port 80.
Après quelques minutes, lorsque l'instance est initialisée et en cours d'exécution, vous pouvez actualiser l'onglet Instances ECS que vous essayez également d'ajouter des instances.
la source
EC2
comme type de lancement lorsque vous avez cette erreur ...#!/bin/bash echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config
àAdvanced Details -> User data
si vous avez votre propre, non cluster par défaut. Sinon, l'instance EC2 nouvellement créée créera un cluster par défaut.Actuellement, l'interface Web Amazon AWS peut créer automatiquement des instances avec l'AMI et le nom corrects afin de s'enregistrer sur le cluster approprié.
Même si toutes les instances ont été créées par Amazon avec les paramètres corrects, mes instances ne s'enregistreraient pas. Sur les forums Amazon AWS, j'ai trouvé un indice. Il s'avère que vos clusters ont besoin d'un accès Internet et si votre VPC privé ne dispose pas de passerelle Internet, les clusters ne pourront pas se connecter.
Le correctif
Dans le tableau de bord VPC, vous devez créer une nouvelle passerelle Internet et la connecter au VPC utilisé par le cluster. Une fois connecté, vous devez mettre à jour (ou créer) la table de routage pour le VPC et l'ajouter en dernière ligne
Où igw-24b16740 est le nom de votre passerelle Internet fraîchement créée.
la source
aws ec2 associate-route-table --subnet-id $SUBNET_ID --route-table-id $ROUTE_TABLE_ID
- puis-je suggérer d'ajouter ceci à la réponse?J'ai rencontré ce problème lors de l'utilisation de Fargate. Je l'ai corrigé lorsque je l'ai défini explicitement
launchType="FARGATE"
lors de l'appelrun_task
.la source
--launch-type FARGATE
Autres vérifications suggérées
La sélection de l'AMI suggérée spécifiée pour la région donnée a résolu mon problème.
Pour connaître l'AMI, cochez Lancement d'une instance de conteneur Amazon ECS .
Par défaut, toutes les instances ec2 sont ajoutées au cluster par défaut. Le nom du cluster compte donc également.
Voir le point 10 sur Lancement d'une instance de conteneur Amazon ECS .
Plus d'informations disponibles dans ce fil .
la source
Juste au cas où quelqu'un d'autre serait bloqué avec ce problème comme je l'étais ... J'ai tout essayé ici et je n'ai pas travaillé pour moi.
En plus de ce qui a été dit ici, le rôle d'instance EC2, comme commenté ici , ne fonctionnait dans mon cas que si je configurais toujours l'instance EC2 avec des informations simples. En utilisant les données utilisateur, un script initial comme celui-ci:
L'information du nom de cluster ECS associé créé dans ce fichier de configuration ecs a résolu mon problème. Sans cette configuration, le journal de l'agent ECS sur l'instance EC2 montrait une erreur qui n'était pas possible de se connecter à l'ECS, ce qui fait que j'ai l'instance EC2 visible par le cluster ECS.
Après cela, je pourrais obtenir l'instance EC2 disponible pour mon cluster EC2:
La documentation AWS dit que cette partie est facultative, mais dans mon cas, cela ne fonctionnait pas sans cette configuration «facultative».
la source
Si vous avez rencontré ce problème après la création du cluster
Accédez à l'instance ECS dans la liste des instances EC2 et vérifiez le rôle IAM que vous avez attribué à l'instance. Vous pouvez facilement identifier les instances avec le nom de l'instance commençant par
ECS Instance
Après cela, cliquez sur le rôle IAM et il vous dirigera vers la console IAM. Sélectionnez la
AmazonEC2ContainerServiceforEC2Role
stratégie dans la liste des stratégies d'autorisation et enregistrez le rôle.Vos instances seront disponibles dans le cluster peu de temps après leur enregistrement.
la source
Le vrai problème est le manque de permission. Tant que vous créez et attribuez un rôle IAM avec l'autorisation AmazonEC2ContainerServiceforEC2Role, le problème disparaît.
la source
Une autre cause possible que j'ai rencontrée était la mise à jour de mon AMI de cluster ECS vers une AMI "Amazon Linux 2" au lieu d'une "AMI Amazon Linux", ce qui a empêché mon script de lancement EC2 user_data.
la source
Lorsque cela se produit, vous devez examiner les éléments suivants:
AmazonEC2ContainerServiceforEC2Role
attachée une stratégie géréeecs-optimized
(vous pouvez le vérifier dans le tableau de bord EC2)La plupart du temps, ce problème apparaît en raison du VPC mal configuré. Selon la documentation :
QUOTE: Si vous n'avez pas configuré de point de terminaison VPC d'interface et que vos instances de conteneur n'ont pas d'adresse IP publique, elles doivent utiliser la traduction d'adresses réseau (NAT) pour fournir cet accès.
Voici les raisons pour lesquelles vous ne voyez pas les instances EC2 répertoriées dans le tableau de bord ECS.
la source