¿Cómo soluciono los errores que recibo al ejecutar Amazon ECS Exec en mis tareas de Fargate?

6 minutos de lectura
0

Quiero solucionar los errores que recibo al ejecutar Amazon Elastic Container Service (Amazon ECS) Exec en mis tareas de AWS Fargate.

Descripción breve

Al utilizar Amazon ECS Exec en tareas de Fargate, es posible que reciba las siguientes declaraciones de error:

  • Se produjo un error (InvalidParameterException) al llamar a la operación ExecuteCommand: El comando de ejecución falló porque no estaba activado cuando se ejecutó la tarea o el agente de comandos de ejecución no se estaba ejecutando. Espere e inténtelo de nuevo o ejecute una nueva tarea con el comando de ejecución activado e inténtelo de nuevo.
  • Se ha producido un error (TargetNotConnectedException) al llamar a la operación ExecuteCommand: El comando de ejecución ha fallado debido a un error interno. Vuelva a intentarlo más tarde.

Para resolver estos errores, solucione los problemas de InvalidParameter y TargetNotConnectedException.

Resolución

Nota: Se recomienda utilizar AWS CloudShell. CloudShell viene preinstalado con el complemento del Administrador de sesiones de AWS Systems Manager y la Interfaz de la línea de comandos de AWS (AWS CLI). Si recibe errores al ejecutar los comandos de AWS CLI, confirme que está ejecutando una versión reciente de AWS CLI.

Importante: Sustituya todas las cadenas de ejemplo de los comandos de AWS CLI por sus valores. Por ejemplo, reemplace example-cluster-name por el nombre de su clúster.

Solucionar el error InvalidParameterException

Si no activa la opción ExecuteCommand para su tarea de Fargate, recibirá el error InvalidParameterException. Para resolver este problema, siga estos pasos:

1.    Compruebe si el parámetro EnableExecuteCommand está establecido en: verdadero o en falso:

aws ecs describe-tasks --cluster <example-cluster-name> --tasks <example-task-id>| grep enableExecuteCommand

2.    Si el parámetro enableExecuteCommand es falso, actualice el parámetro como verdadero:

aws ecs update-service --cluster <example-cluster-name> --service <example-service> --region <example-region> --enable-execute-command --force-new-deployment

Nota: La opción force-new-deployment crea un nuevo despliegue que inicia nuevas tareas y detiene las tareas antiguas en función de la configuración de despliegue del servicio. Para obtener más información, consulte Actualizaciones sucesivas.

Solucionar el error TargetNotConnectedException

Para resolver un error de TargetNotConnectionException, siga estos pasos:

  • Compruebe los permisos y la configuración de red necesarios.
  • Utilice Amazon ECS Exec para entrar en el contenedor con el shell correcto.
  • Genere registros para que Amazon ECS Exec identifique problemas.

Compruebe los permisos y la configuración de red necesarios

1.    Amazon ECS Exec requiere un rol de IAM de tareas para conceder permisos a los contenedores. Utilice la siguiente política para añadir los permisos SSM necesarios para su rol de IAM de tareas:

{
   "Version": "2012-10-17",
   "Statement": [
       {
       "Effect": "Allow",
       "Action": [
            "ssmmessages:CreateControlChannel",
            "ssmmessages:CreateDataChannel",
            "ssmmessages:OpenControlChannel",
            "ssmmessages:OpenDataChannel"
       ],
      "Resource": "*"
      }
   ]
}

Para obtener más información, consulte Rol de IAM de tareas.

2.    Si utiliza puntos de conexión de la interfaz Amazon Virtual Private Cloud (Amazon VPC) con Amazon ECS, cree los siguientes puntos de conexión para el Administrador de sesiones de Systems Manager:

  • ec2messages.region.amazonaws.com
  • ssm.region.amazonaws.com
  • ssmmessages.region.amazonaws.com

Para obtener más información, consulte el Paso 6: (Opcional) Utilice AWS PrivateLink para configurar un punto de conexión de VPC para el Administrador de sesiones.

3.    Ejecute el script check-ecs-exec.sh para confirmar que el entorno de AWS CLI y el clúster o la tarea de Amazon ECS están preparados para Amazon ECS Exec. Asegúrese de cumplir con los requisitos previos. Para obtener más información, consulte Amazon ECS Exec Checker en el sitio web de GitHub.

Nota: Tras ejecutar el script check-ecs-exec.sh, el resultado indica lo que debe resolver antes de utilizar ECS Exec.

Ejemplo de salida:

Prerequisites for check-ecs-exec.sh v0.7
-------------------------------------------------------------
  jq      | OK (/usr/bin/jq)
  AWS CLI | OK (/usr/local/bin/aws)

-------------------------------------------------------------
Prerequisites for the AWS CLI to use ECS Exec
-------------------------------------------------------------
  AWS CLI Version        | OK (aws-cli/2.11.0 Python/3.11.2 Linux/4.14.255-291-231.527.amzn2.x86_64 exec-env/CloudShell exe/x86_64.amzn.2 prompt/off)
  Session Manager Plugin | OK (1.2.398.0)

-------------------------------------------------------------
Checks on ECS task and other resources
-------------------------------------------------------------
Region : us-east-1
Cluster: Fargate-Testing
Task   : ca27e41ea3f54fd1804ca00feffa178d
-------------------------------------------------------------
  Cluster Configuration  | Audit Logging Not Configured
  Can I ExecuteCommand?  | arn:aws:iam::12345678:role/Admin
     ecs:ExecuteCommand: allowed
     ssm:StartSession denied?: allowed
  Task Status            | RUNNING
  Launch Type            | Fargate
  Platform Version       | 1.4.0
  Exec Enabled for Task  | NO
  Container-Level Checks |
    ----------
      Managed Agent Status - SKIPPED
    ----------
    ----------
      Init Process Enabled (Exec-check:2)
    ----------
         1. Disabled - "nginx"
    ----------
      Read-Only Root Filesystem (Exec-check:2)
    ----------
         1. Disabled - "nginx"
  Task Role Permissions  | arn:aws:iam::12345678:role/L3-session
     ssmmessages:CreateControlChannel: implicitDeny
     ssmmessages:CreateDataChannel: implicitDeny
     ssmmessages:OpenControlChannel: implicitDeny
     ssmmessages:OpenDataChannel: implicitDeny
  VPC Endpoints          | SKIPPED (vpc-abcd - No additional VPC endpoints required)
  Environment Variables  | (Exec-check:2)
       1. container "nginx"
       - AWS_ACCESS_KEY: not defined
       - AWS_ACCESS_KEY_ID: not defined
       - AWS_SECRET_ACCESS_KEY: not defined

El resultado anterior indica que ECS Exec no está activado para la tarea y que la función de tarea no tiene los permisos SSM necesarios.

4.    Compruebe si ha configurado las credenciales de usuario de IAM a nivel de contenedor, por ejemplo, especificando una clave de acceso o una clave de acceso secreta. Si configuró las credenciales de usuario de IAM a nivel de contenedor, esto anula los permisos a nivel de tarea y provoca un error.

Utilice Amazon ECS Exec para entrar en el contenedor con el shell correcto

Las diferentes imágenes base pueden tener shells diferentes y, si se utilizan shells incorrectos, se produce un error. Asegúrese de utilizar el shell correcto según la imagen de la aplicación.

Ejecute el siguiente comando para usar ECS Exec para entrar en el contenedor. Reemplace example_shell por su shell:

aws ecs execute-command --region <example-region> --cluster <example-cluster> --container <example-container> --task <example-task> --command "<example_shell>" --interactive

Genere registros para que Amazon ECS Exec identifique problemas

Genere registros de SSM Agent para determinar por qué ECS Exec no funciona en su tarea de Fargate. Ejecute el siguiente comando en la sección de entorno de la definición del contenedor:

Consola:

bin/bash,-c,sleep 2m && cat /var/log/amazon/ssm/amazon-ssm-agent.log

JSON:

"/bin/bash","-c","sleep 2m && cat /var/log/amazon/ssm/amazon-ssm-agent.log"

Si utiliza el controlador de registro awslogs, los comandos anteriores generan los registros de SSM Agent y los transfieren al grupo de registros de Amazon CloudWatch. Si utiliza otros controladores de registro o puntos de conexión de registro, los registros de SSM Agent se transfieren a esas ubicaciones.

Ejemplo de uso de JSON:

"entryPoint": [],
      "portMappings": [],
      "command": [
        "bin/bash",
        "-c",
        "sleep 2m && cat /var/log/amazon/ssm/amazon-ssm-agent.log"
      ],

Nota: Las diferentes aplicaciones tienen diferentes shells y editores. Asegúrese de revisar y modificar los parámetros del comando según su aplicación.

Información relacionada

Uso de ECS Exec

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año