Recibo un error ResourceInitializationError cuando mi tarea de Amazon Elastic Container Service (Amazon ECS) intenta extraer una imagen de Amazon Elastic Container Registry (Amazon ECR).
Descripción corta
Al iniciar una tarea de Amazon ECS, es posible que recibas uno de los siguientes mensajes de error ResourceInitializationError:
«Unable to pull secrets or registry auth: The task cannot pull registry auth from Amazon ECR: There is a connection issue between the task and Amazon ECR. Check your task network configuration. RequestError: send request failed caused by: Post "https://api.ecr.region-code.amazonaws.com/": dial tcp ip.xx.xx.xx.xx:443: i/o timeout»
Alternativa:
«unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve ecr registry auth: service call has been retried 3 time(s): RequestError: send request failed caused by: Post "https://api.ecr.region-code.amazonaws.com/": dial tcp ip.xx.xx.xx.xx:443: i/o timeout. Please check your task network configuration».
Estos errores se producen cuando la tarea de Amazon ECS no puede extraer la imagen del contenedor ni recuperar la información de autenticación de Amazon ECR.
Resolución
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.
Prueba de la conectividad de las tareas
Usa el runbook AWSSupport-TroubleshootECSTaskFailedToStart para probar la conectividad de la tarea. Debes utilizar el runbook en la misma región de AWS en la que se encuentren los recursos del clúster de Amazon ECS. Además, use el identificador de la tarea fallida más reciente. Si la tarea fallida forma parte de un servicio de Amazon ECS, use la tarea fallida más reciente del servicio. La tarea fallida debe estar visible en ECS:DescribeTasks durante la automatización. De forma predeterminada, las tareas de ECS detenidas están visibles durante 1 hora después de entrar en el estado Detenido.
En función de la salida de la automatización, usa uno de los siguientes pasos manuales de solución de problemas.
Cómo comprobar las rutas desde las subredes a Internet
Consulta la tabla de enrutamiento de la subred en la que has desplegado la tarea de Amazon ECS. Asegúrate de que la tarea tenga una ruta predeterminada (0.0.0.0/0) a Internet y de que el grupo de seguridad de tareas permita el tráfico saliente en el puerto 443.
Subredes públicas
Si tu tarea de AWS Fargate está en una subred pública, debes asignarle una dirección IP pública.
Para ver la interfaz de red elástica y la dirección IP privada de la tarea, ejecuta el siguiente comando describe-tasks de la AWS CLI:
aws ecs describe-tasks --cluster cluster-name --tasks task-arn
Nota: Sustituye cluster-name por el nombre de tu clúster y task-arn por el ARN de la tarea.
Para comprobar si hay una dirección IP pública conectada a la interfaz de red de la tarea, ejecuta el siguiente comando describe-network-interfaces:
aws ec2 describe-network-interfaces --network-interface-ids example-eni
Nota: Sustituye example-eni por la interfaz de red de la tarea.
Configura Amazon ECS para asignar automáticamente una dirección IPv4 pública a la interfaz de red asociada a tu tarea. Selecciona **Activado ** para IP pública cuando ejecutes una nueva tarea o crees un nuevo servicio.
No puedes asignar automáticamente direcciones IP públicas para tareas o servicios existentes. En su lugar, para recrear el servicio con la asignación automática de direcciones IP públicas activada, ejecuta el siguiente comando create-service:
aws ecs create-service --cluster cluster-name --service-name service-name --task-definition taskdef:revision --desired-count 1 --launch-type FARGATE --network-configuration "awsvpcConfiguration={subnets=[subnet-aaaaaa,subnet-bbbbbb],securityGroups=[sg-ccccccc],assignPublicIp=ENABLED}"
Nota: Sustituye cluster-name por el nombre de tu clúster, service-name por el nombre del servicio y taskdef:revision por la definición de la tarea. Sustituye subnet-aaaaaa y subnet-bbbbbb por tus subredes y sg-ccccccc por tu grupo de seguridad.
Asegúrate de que la conexión de Amazon Virtual Private Cloud (Amazon VPC) de tu clúster tenga activados los nombres de host DNS y la resolución de DNS.
Subredes privadas
Si tu tarea está en una subred privada, comprueba las siguientes configuraciones en función de tu fuente de conectividad a Internet:
- Si usas una puerta de enlace de NAT, coloca la puerta de enlace de NAT en una subred pública.
- Si usas AWS PrivateLink, comprueba que el grupo de seguridad del punto de enlace de VPC permita el tráfico entrante en el puerto 443 desde el CIDR de la VPC o el grupo de seguridad del servicio.
Comprobación de la configuración de la ACL de la red y del grupo de seguridad
Asegúrate de que la lista de control de acceso de la red (ACL de la red) y los grupos de seguridad permitan el acceso saliente al puerto 443 desde la subred.
Nota: Las tareas de Fargate deben tener acceso saliente al puerto 443 para permitir el tráfico saliente y acceder a los puntos de enlace de Amazon ECS.
(Solo PrivateLink) Comprobación de los puntos de enlace de Amazon VPC
Si usas PrivateLink, debes crear los puntos de enlace necesarios:
- Para Amazon ECR, crea com.amazonaws.region.ecr.dkr y com.amazonaws.region.ecr.api.
- Para la puerta de enlace de Amazon Simple Storage Service (Amazon S3), crea com.amazonaws.region.s3.
- Si usas Amazon CloudWatch para almacenar los registros de las aplicaciones, crea también com.amazonaws.region.logs.
Nota: En los puntos de enlace anteriores, sustituye region por tu región.
Para obtener más información, consulta Consideraciones para los puntos de enlace de VPC de Amazon ECR.
Si tu VPC no tiene una puerta de enlace de Internet y tus tareas utilizan el controlador de registro awslogs, crea un punto de enlace de VPC para Registros de CloudWatch.
Asegúrate de que el grupo de seguridad del punto de enlace de VPC permita el tráfico del grupo de seguridad de tareas de Fargate o del rango CIDR de la VPC en el puerto TCP 443.
Cómo comprobar los roles y permisos de IAM
Asegúrate de que el rol de ejecución de tareas de AWS Identity and Access Management (IAM) tenga la política AmazonECSTaskExecutionRolePolicy o permisos equivalentes.
Para obtener más información sobre los permisos de rol y el rol de ejecución de tareas, consulta Rol de IAM de ejecución de tareas de Amazon ECS.
Información relacionada
Verificación de que Amazon ECS haya detenido la conectividad de las tareas