amazon-web-services - instalar - ecs container
Error de AWS ECS al ejecutar la tarea: no se encontraron instancias de contenedor en su clúster (8)
Actualmente, la interfaz web de Amazon AWS puede crear automáticamente instancias con el AMI correcto y el nombre correcto para que se registre en el clúster correcto.
Aunque Amazon creó todas las instancias con la configuración correcta, mis instancias no se registraron. En los foros de Amazon AWS encontré una pista. Resulta que sus clústeres necesitan acceso a Internet y si su VPC privada no tiene una puerta de enlace a Internet, los clústeres no podrán conectarse.
La solución
En el panel de VPC, debe crear una nueva puerta de enlace de Internet y conectarla a la VPC utilizada por el clúster. Una vez adjunto, debe actualizar (o crear) la tabla de ruta para la VPC y agregarla como última línea
0.0.0.0/0 igw-24b16740
Donde igw-24b16740 es el nombre de su puerta de enlace de Internet recién creada.
Estoy tratando de implementar una imagen de contenedor
docker
a
AWS
usando
ECS
, pero la instancia de EC2 no se está creando.
He buscado en Internet buscando una explicación de por qué recibo el siguiente error:
"Se produjo un error de cliente (InvalidParameterException) al llamar a la operación RunTask: no se encontraron instancias de contenedor en su clúster".
Aquí están mis pasos:
1. Empujé una imagen de Docker DE Ubuntu a mi repositorio de Amazon ECS.
2. Registrado una definición de tarea ECS:
aws ecs register-task-definition --cli-input-json file://path/to/my-task.json
3. Ejecutó la tarea:
aws ecs run-task --task-definition my-task
Sin embargo, falla.
Aquí está mi tarea:
{
"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
}
]
}
También he intentado usar la consola de administración para configurar un clúster y servicios, pero obtengo el mismo error. ¿Cómo configuro el clúster para que tenga instancias ec2 y qué tipo de instancias de contenedor debo usar? ¡Pensé que todo este proceso era crear las instancias de EC2 para empezar!
El verdadero problema es la falta de permiso. Siempre que cree y asigne un rol de IAM con el permiso AmazonEC2ContainerServiceforEC2Role, el problema desaparecerá.
En caso de que alguien más esté bloqueado con este problema como yo ... He intentado todo aquí y no funcionó para mí.
Además de lo que se dijo aquí, se refiere al rol de instancia EC2, como se comentó here , en mi caso solo funcionaría si todavía configuro la instancia EC2 con información simple. Usando los datos de usuario, un script inicial como este:
#!/bin/bash
cat <<''EOF'' >> /etc/ecs/ecs.config
ECS_CLUSTER=quarkus-ec2
EOF
Informar el nombre del clúster ECS relacionado creado en este archivo de configuración ecs, resolvió mi problema. Sin esta configuración, el registro del agente de ECS en la instancia de EC2 mostraba un error que no era posible conectarse al ECS, haciendo esto tengo la instancia de EC2 visible para el clúster de ECS.
Después de hacer esto, podría obtener la instancia EC2 disponible para mi clúster EC2:
La documentación de AWS dice que esta parte es opcional, pero en mi caso, no funcionó sin esta configuración "opcional".
Me di cuenta de esto después de unas horas más de investigación. Amazon, si está escuchando, debe indicar esto en algún lugar de su consola de administración al crear un clúster o agregar instancias al clúster:
"Antes de poder agregar instancias de ECS a un clúster, primero debe ir a la Consola de administración de EC2 y crear instancias
ecs-optimized
con un rol de IAM que tengaAmazonEC2ContainerServiceforEC2Role
políticaAmazonEC2ContainerServiceforEC2Role
"
Aquí está el rigmarole:
1. Vaya a su
Panel de control de EC2
y haga clic en el botón
Launch Instance
.
2. En
Community AMIs
,
ecs-optimized
y seleccione el que mejor se adapte a sus necesidades de proyecto.
Cualquiera funcionará.
Haga clic en Siguiente.
3. Cuando llegue a Configurar detalles de instancia, haga clic en el
create new IAM role link
y cree un nuevo rol llamado
ecsInstanceRole
.
4. Adjunte la política
AmazonEC2ContainerServiceforEC2Role
a ese rol.
5. Luego, termine de configurar su instancia de ECS.
NOTA:
Si está creando un servidor web, querrá crear un grupo de seguridad para permitir el acceso al puerto 80.
Después de unos minutos, cuando la instancia se inicializa y se ejecuta, puede actualizar la pestaña Instancias de ECS que también está intentando agregar instancias.
Me encontré con este problema al usar Fargate.
Lo arreglé cuando
launchType="FARGATE"
explícitamente
launchType="FARGATE"
al llamar a
run_task
.
Otra posible causa con la que me topé fue actualizar mi AMI del clúster ECS a una AMI "Amazon Linux 2" en lugar de una "AMI Amazon Linux", lo que provocó que mi script de inicio de datos de usuario EC2 no funcionara.
Otros cheques sugeridos
-
Seleccionar el AMI sugerido que se especificó para la región dada resolvió mi problema.
Para averiguar la AMI, marque docs.aws.amazon.com/AmazonECS/latest/developerguide/… .
-
Por defecto, todas las instancias ec2 se agregan al clúster predeterminado. Entonces el nombre del clúster también es importante.
Consulte el punto 10 en docs.aws.amazon.com/AmazonECS/latest/developerguide/… .
Más información disponible en este hilo .
Si ha encontrado este problema después de crear el clúster
Vaya a la instancia de ECS en la lista de instancias de EC2 y verifique el rol de IAM que ha asignado a la instancia.
Puede identificar las instancias fácilmente con el nombre de la instancia que comienza con la
ECS Instance
Después de eso, haga clic en el rol de IAM y lo dirigirá a la consola de IAM.
Seleccione la política
AmazonEC2ContainerServiceforEC2Role
de la lista de políticas de permisos y guarde el rol.
Sus instancias estarán disponibles en el clúster poco después de guardarlo.