Estoy tratando de implementar una docker
imagen de contenedor para AWS
usar ECS
, pero la instancia EC2 no se está creando. He buscado en Internet 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".
Estos son mis pasos:
1. Envié una imagen de Docker DESDE Ubuntu a mi repositorio de Amazon ECS.
2. Registrado una definición de tarea de 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.
Esta es 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 intenté 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 necesito usar? ¡Pensé que todo este proceso consistía en crear las instancias EC2 para empezar!
fuente
Respuestas:
Me di cuenta de esto después de algunas 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:
Aquí está el galimatías:
1. Vaya a su EC2 Dashboard y haga clic en el
Launch Instance
botón.2. En
Community AMIs
, Busqueecs-optimized
y seleccione el que mejor se adapte a las necesidades de su proyecto. Cualquiera funcionará. Haga clic en Siguiente.3. Cuando llegue a Configurar detalles de instancia, haga clic en
create new IAM role link
y cree un nuevo rol llamadoecsInstanceRole
.4. Adjunte la
AmazonEC2ContainerServiceforEC2Role
política a ese rol.5. Luego, termine de configurar su instancia 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 y también está intentando agregar instancias.
fuente
EC2
como el tipo de lanzamiento cuando recibió este error ...#!/bin/bash echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config
enAdvanced Details -> User data
si usted tiene su propio grupo, no por defecto. De lo contrario, la instancia EC2 recién creada creará un clúster predeterminado.Actualmente, la interfaz web de Amazon AWS puede crear instancias automáticamente con la AMI correcta y el nombre correcto para que se registre en el clúster correcto.
Aunque todas las instancias fueron creadas por Amazon 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 que utiliza el clúster. Una vez adjunto, debe actualizar (o crear) la tabla de ruta para la VPC y agregar como última línea
Donde igw-24b16740 es el nombre de su puerta de enlace de Internet recién creada.
fuente
aws ec2 associate-route-table --subnet-id $SUBNET_ID --route-table-id $ROUTE_TABLE_ID
, ¿puedo sugerir que agregue esto a la respuesta?Me encontré con este problema al usar Fargate. Me fijo cuando explícitamente definido
launchType="FARGATE"
al llamarrun_task
.fuente
--launch-type FARGATE
Otras comprobaciones sugeridas
La selección de la AMI sugerida que se especificó para la región dada resolvió mi problema.
Para conocer la AMI, consulte Lanzamiento de una instancia de contenedor de Amazon ECS .
De forma predeterminada, todas las instancias de ec2 se agregan al clúster predeterminado. Entonces, el nombre del clúster también es importante.
Consulte el punto 10 en Lanzamiento de una instancia de contenedor de Amazon ECS .
Más información disponible en este hilo .
fuente
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í con respecto al rol de la instancia EC2, como se comentó aquí , en mi caso solo funcionó si aún configuré la instancia EC2 con información simple. Usando los datos del usuario un script inicial como este:
Informar el nombre del clúster de ECS relacionado creado en este archivo de configuración de ecs, resolvió mi problema. Sin esta configuración, el registro del agente de ECS en la instancia EC2 mostraba un error que no era posible conectar con el ECS, al hacer esto, tengo la instancia 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 decía que esta parte es opcional, pero en mi caso, no funcionó sin esta configuración "opcional".
fuente
Si se ha encontrado con este problema después de crear el clúster
Vaya a la instancia de ECS en la lista de instancias de EC2 y verifique la función de IAM que le asignó a la instancia. Puede identificar las instancias fácilmente con el nombre de la instancia que comienza con
ECS Instance
Después de eso, haga clic en el rol de IAM y lo dirigirá a la consola de IAM. Seleccione la
AmazonEC2ContainerServiceforEC2Role
política 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.
fuente
El verdadero problema es la falta de permiso. Siempre que cree y asigne un rol de IAM con el permiso AmazonEC2ContainerServiceforEC2Role, el problema desaparecerá.
fuente
Otra posible causa que encontré fue la actualización de mi AMI de clúster de ECS a una AMI de "Amazon Linux 2" en lugar de una "AMI de Amazon Linux", lo que provocó que mi script de inicio de datos de usuario de EC2 no funcionara.
fuente
Cuando esto sucede, debe mirar lo siguiente:
AmazonEC2ContainerServiceforEC2Role
política administrada adjuntaecs-optimized
(puede verificar esto en el panel de EC2)La mayoría de las veces, este problema aparece debido a una VPC mal configurada. De acuerdo con la documentación :
COTIZACIÓN: Si no tiene configurado un extremo de VPC de interfaz y sus instancias de contenedor no tienen direcciones IP públicas, entonces deben usar la traducción de direcciones de red (NAT) para proporcionar este acceso.
Estas son las razones por las que no ve las instancias EC2 enumeradas en el panel de ECS.
fuente