Todos los que hemos usado ECS (Elastic Container Service) estamos acostumbrados a visitar Cloudwatch regularmente para ver los logs y a partir de ahí depurar ciertos errores.
Hay veces que unicamente viendo las trazas de los logs no es suficiente. Nos gustaría poder estar dentro del contenedor y poder ejecutar ciertos comandos para realizar un examen más exhaustivo de lo que está pasando. Por ejemplo: depuración de networking...
Vamos, el típico docker exec -it [container-id] de toda la vida.
Para este caso existe la herramienta ECSGO que nos facilita mucho la vida.
Y en este post os voy a enseñar como configurarla y usarla!
Hay que recordar que, ejecutar comandos dentro de un container únicamente está aconsejado para tareas de troubleshooting. Si realizamos cambios en el contenedor, una vez este se termine, estos cambios se perderán. Los cambios siempre en Dockerfile!
📍Qué es ECSGO?
ECSGO es una herramienta que facilita la conexion a contenedores que estan corriendo en ECS (ya sea en EC2 o Fargate). También se puede usar para hacer port-forwarding de un container a tu local.
Esta herramienta está inspirada en gossm(Lo mismo pero para instancias EC2).
📍Cómo funciona ECSGO?
ECSGO utiliza la funcionalidad de ECS ExecuteCommand API .
Anteriormente a ECS ExecuteCommand, la única manera de conectarnos a un contenedor en ejecución era:
- Localizar la Instancia EC2 especifica en el cluster dónde la task a la que te quieres conectar esta corriendo
- Conectarte por SSH o SSM a la instancia
- Ejecutar docker exec al contenedor
(En el caso de que la task fuera serverless con FARGATE, ya podías olvidarte de poder conectar)
📍Pre-requisitos
Para poder usarlo, hay que configurar previamente ciertas cosas...
1.El servicio de ECS debe tener activado el flag execute-command
resource "aws_ecs_service" "service" {
...
enable_execute_command = true
...
}
2.El IAM role usado por la task debe tener ciertos permisos
data "aws_iam_policy_document" "ecs-ssm" {
statement {
actions = [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
]
resources = ["*"]
}
}
3.Tener instalado session-manager-plugin en tu portatil.
Usa ecs-exec-checker para comprobar los pre-requisitos antes de user ECS Exec.
Además deberemos tener configurada la AWS-CLI y disponer de un usuario IAM con permisos suficientes.
📍Vamos a probarlo!
Para instalar ECSGO vamos https://github.com/tedsmitt/ecsgo/releases y nos descargamos el tar.gz con el binario para nuestro sistema.
Ejecutamos ecsgo y nos aparecen los clusters ECS.
Seleccionamos el cluster del container al que queremos conectarnos
Después de escoger el cluster ECS, nos muestra una lista con los servicios que estan corriendo dentro del cluster seleccionado previamente. Seleccionamos el servicio del container al que queremos conectarnos.
Finalmente nos aparecen las tareas dentro del servicio, es decir, los containers. Seleccionamos el container al que queremos conectarnos.
Ya estamos dentro!
A partir de aqui, pues ya podemos ejecutar comandos básicos de troubleshooting...
Hasta el próximo post!
Top comments (0)