Cuando usas tareas de ECS con el modo de red awsvpc
, cada tarea necesita su propia ENI. Esto puede provocar un cuello de botella si tu instancia EC2 alcanza el límite de interfaces permitidas. Aquí es donde entra en juego ENI Trunking, una funcionalidad que permite escalar horizontalmente tus tareas sin agotar recursos de red. Así pues en este post veremos como habilitar ENI trunking en ECS.
¿Qué es ENI Trunking?
ENI Trunking (trunking de interfaces de red elásticas) permite a ECS usar una sola ENI primaria (trunk ENI) en la instancia EC2 para crear subinterfaces (branch ENIs) para las tareas awsvpc
.
Esto mejora:
- La densidad de tareas por instancia
- El rendimiento de red
- La gestión de recursos de red
Requisitos
Para habilitar ENI trunking necesitas:
- Usar ECS con modo de red
awsvpc
- Instancias EC2 compatibles (por ejemplo, c5, m5, t3, etc.)
- Agente de ECS actualizado
- ECS optimizado AMI (Amazon Linux 2 o superior)
- Que tu cuenta tenga habilitado ENI trunking (esto puede requerir petición a AWS si no está activado por defecto)
Cómo habilitar ENI Trunking
Paso 1: Verifica soporte en la instancia
Consulta si tu instancia es compatible:
https://docs.aws.amazon.com/AmazonECS/latest/userguide/container-instance-eni.html#supported-instance-types
Paso 2: Verifica el estado del trunking
aws ecs list-attributes --target-type container-instance --attribute-name ecs.awsvpc-trunk-id --cluster my-cluster --region region
{
"attributes": []
}
aws ecs list-account-settings --region my-region
{
"settings": []
}
Paso 3: Habilita ENI trunking
aws ecs put-account-setting-default --name awsvpcTrunking --value enabled --region my-region
{
"setting": {
"principalArn": "arn:aws:iam::0123456789:root",
"name": "awsvpcTrunking",
"value": "enabled"
}
}
Si lo hacemos a través de la consola de ECS no funcionará. Hay que hacerlo desde dentro de una de las instancias.
El ENI trunking no estará disponible para las instancias actuales sino para las nuevas después del cambio.
aws ecs list-attributes --target-type container-instance --attribute-name ecs.awsvpc-trunk-id --cluster my-cluster --region my-region
{
"attributes": [
{
"targetId": "arn:aws:ecs:eu-west-1:0123456789:container-instance/my-cluster/acb60ee452554dd891e7e840a02fac7c",
"name": "ecs.awsvpc-trunk-id",
"value": "e18d8345-0883-4dc2-beb0-3e85dc23d18e"
}
]
}
aws ecs list-account-settings --region my-region
{
"settings": [
{
"principalArn": "arn:aws:iam::0123456789:role/environment/role",
"name": "awsvpcTrunking",
"value": "enabled"
}
]
}
De esta manera y si has seguido los requisitos previos, etc, deberías poder tener más ENIs por instancia que previamente. En este post hemos repasado que requisitos hacen falta y que pasos hemos de seguir para habilitar el ENI trunking en ECS.