

# Uso del equilibrador de carga para distribuir el tráfico de servicio de Amazon ECS
<a name="service-load-balancing"></a>

Opcionalmente, su servicio se puede configurar para usar Elastic Load Balancing a fin de distribuir el tráfico de manera uniforme entre las tareas de su servicio.

**nota**  
Cuando utiliza conjuntos de tareas, todas las tareas del conjunto deben configurarse para utilizar Elastic Load Balancing o para no utilizar Elastic Load Balancing. 

Los servicios de Amazon ECS alojados en AWS Fargate admiten los equilibradores de carga de aplicación, los equilibradores de carga de red y los equilibradores de carga de puerta de enlace. Utilice la siguiente tabla para obtener información sobre el tipo de equilibrador de carga que se debe utilizar.


| Tipo de equilibrador de carga | Utilizar en estos casos | 
| --- | --- | 
|  Equilibrador de carga de aplicación  | Dirija el tráfico HTTP o HTTPS (o de capa 7).Los Application Load Balancers ofrecen varias características nuevas que los hacen interesantes para utilizar con los servicios Amazon ECS: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonECS/latest/developerguide/service-load-balancing.html) | 
| Equilibrador de carga de red | Dirija el tráfico TCP o UDP (o de capa 4). | 
| Balanceador de carga de gateway | Dirija el tráfico TCP o UDP (o de capa 4). Utilice dispositivos virtuales, como firewalls, sistemas de prevención y detección de intrusiones, y sistemas de inspección profunda de paquetes. | 

Recomendamos utilizar los equilibradores de carga de aplicación para los servicios de Amazon ECS de manera que pueda aprovechar estas características más recientes, a menos que el servicio requiera una característica que solo esté disponible en los equilibradores de carga de aplicación o equilibradores de carga de puerta de enlace. Para obtener más información acerca de Elastic Load Balancing y las diferencias entre estos tipos de balanceadores de carga, consulte la [Guía del usuario de Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/).

Con el equilibrador de carga, solo se paga por lo que se usa. Para obtener más información, consulte [Precios de Elastic Load Balancing](https://aws.amazon.com/elasticloadbalancing/pricing/). 

# Optimización de los parámetros de comprobación de estado del equilibrador de carga para Amazon ECS
<a name="load-balancer-healthcheck"></a>

Los equilibradores de carga dirigen las solicitudes únicamente a los destinos en buen estado de las zonas de disponibilidad del equilibrador de carga. Cada destino está registrado en un grupo de destino. El equilibrador de carga comprueba el estado de cada destino; para ello, utiliza la configuración de comprobación de estado de los grupos de destino. Una vez que registra el destino, debe superar una comprobación de estado para que se considere que se encuentra en buen estado. Amazon ECS supervisa el equilibrador de carga. El equilibrador de carga envía periódicamente comprobaciones de estado al contenedor de Amazon ECS. El agente de Amazon ECS supervisa el equilibrador de carga y espera a que este informe sobre el estado del contenedor. Lo hace antes de considerar que el contenedor esté en buen estado.

Dos parámetros de comprobación de estado de Elastic Load Balancing afectan a la velocidad de implementación:
+ Intervalo de comprobaciones de estado: determina la cantidad aproximada de tiempo, en segundos, entre comprobaciones de estado de un contenedor individual. De forma predeterminada, el equilibrador de carga se comprueba cada 30 segundos.

  Este parámetro se denomina:
  + `HealthCheckIntervalSeconds` en la API de Elastic Load Balancing
  + **Intervalo** en la consola de Amazon EC2
+ Recuento de umbral en buen estado: determina la cantidad de comprobaciones de estado consecutivas correctas que deben superarse para considerar que un contenedor con un estado incorrecto vuelve a estar en estado correcto. De forma predeterminada, el equilibrador de carga requiere pasar cinco comprobaciones de estado antes de informar que el contenedor de destino está en buen estado.

  Este parámetro se denomina:
  + `HealthyThresholdCount` en la API de Elastic Load Balancing
  + **Umbral en buen estado** en la consola de Amazon EC2

**Importante:** Para los destinos recién registrados, solo se requiere una comprobación de estado correcta para considerar que el destino está en buen estado, independientemente del valor establecido para el umbral de estado correcto. El umbral de estado correcto solo se aplica cuando un destino está pasando de un estado incorrecto a un estado correcto.

Con la configuración predeterminada, si el destino se vuelve incorrecto y luego se recupera, el tiempo total para determinar el estado de un contenedor es de 2 minutos y 30 segundos (`30 seconds * 5 = 150 seconds`).

Puede acelerar el proceso de comprobación de estado si el servicio se inicia y se estabiliza en menos de 10 segundos. Para acelerar el proceso, reduzca el intervalo de comprobación de estado y el recuento de umbral de estado.
+ `HealthCheckIntervalSeconds` (nombre de la API de Elastic Load Balancing) o **Intervalo** (nombre de la consola de Amazon EC2): 5
+ `HealthyThresholdCount` (nombre de la API de Elastic Load Balancing) o **Umbral de estado correcto** (nombre de la consola de Amazon EC2): 2

Con esta configuración, el proceso de comprobación de estado tarda 10 segundos, en lugar de los 2 minutos y 30 segundos predeterminados.

Para obtener más información acerca de las comprobaciones de estado de Elastic Load Balancing, consulte [Health checks for your target groups](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health-checks.html) en la *Guía de usuario de Elastic Load Balancing*.

# Optimización de los parámetros de drenaje de conexiones del equilibrador de carga para Amazon ECS
<a name="load-balancer-connection-draining"></a>

Para permitir la optimización, los clientes mantienen una conexión permanente con el servicio de contenedores. Esto permite a las solicitudes posteriores de ese cliente reutilizar la conexión existente. Cuando quiera detener el tráfico hacia un contenedor, notifica al equilibrador de carga. El equilibrador de carga hace una comprobación periódica para ver si el cliente cerró la conexión persistente. Amazon ECS supervisa el equilibrador de carga y espera a que este informe de que la conexión permanente está cerrada (el destino está en un estado `UNUSED`).

El tiempo que el equilibrador de carga espera para mover el destino al estado `UNUSED` es el retraso en la cancelación del registro. Puede configurar el siguiente parámetro del equilibrador de carga para acelerar las implementaciones.
+ `deregistration_delay.timeout_seconds`: 300 (predeterminado)

Si tiene un servicio con un tiempo de respuesta inferior a 1 segundo, establezca el parámetro en el siguiente valor para que el equilibrador de carga solo espere 5 segundos antes de interrumpir la conexión entre el cliente y el servicio de backend: 
+ `deregistration_delay.timeout_seconds`: 5 

**nota**  
No establezca el valor en 5 segundos cuando tenga un servicio con solicitudes de larga duración, como cargas lentas de archivos o conexiones de streaming.

## Capacidad de respuesta de SIGTERM
<a name="sigterm"></a>

Amazon ECS envía primero una señal detención a la tarea para notificar que la aplicación debe finalizar y cerrarse. Esta señal se puede definir en la imagen de su contenedor con la instrucción STOPSIGNAL y, de forma predeterminada, será SIGTERM. A continuación, Amazon ECS envía un mensaje SIGKILL. Cuando las aplicaciones ignoran el SIGTERM, el servicio Amazon ECS debe esperar a enviar la señal SIGKILL para terminar el proceso. 

El tiempo que Amazon ECS espera para enviar el mensaje SIGKILL viene determinado por la siguiente opción de agente de Amazon ECS:
+ `ECS_CONTAINER_STOP_TIMEOUT`: 30 (predeterminado)

  Para obtener más información sobre el parámetro de agente contenedor, consulte [Amazon ECS Container Agent](https://github.com/aws/amazon-ecs-agent/blob/master/README.md) en GitHub.

Para acelerar el periodo de espera, defina el parámetro del agente de Amazon ECS en el siguiente valor:
+ `ECS_CONTAINER_STOP_TIMEOUT`: 2

  Si la solicitud tarda más de 1 segundo, multiplique el valor por 2 y utilice ese número como valor.

En este caso, Amazon ECS espera 2 segundos a que se cierre el contenedor y, a continuación, envía un mensaje SIGKILL cuando la aplicación no se detiene.

También puede modificar el código de la aplicación para capturar la señal SIGTERM y reaccionar ante ella. El siguiente es un ejemplo en JavaScript: 

```
process.on('SIGTERM', function() { 
  server.close(); 
})
```

Este código hace que el servidor HTTP deje de aceptar nuevas solicitudes, termine de responder a las solicitudes en curso y, a continuación, finalice el proceso de Node.js porque el bucle de eventos no tiene más tareas pendientes. Por lo tanto, si el proceso tarda solo 500 ms en finalizar sus solicitudes en tránsito, finaliza antes de tiempo sin tener que esperar a que acabe el tiempo de espera y recibir un SIGKILL. 

# Uso de un equilibrador de carga de aplicaciones para Amazon ECS
<a name="alb"></a>

Un Application Load Balancer toma decisiones de enrutamiento en la capa de aplicación (HTTP/HTTPS), admite el enrutamiento basado en rutas y puede dirigir las solicitudes a uno o varios puertos de cada instancia de contenedor del clúster. Los Application Load Balancers admiten el mapeo de puertos de host dinámico. Por ejemplo, si la definición de contenedor de la tarea especifica el puerto 80 para un puerto de contenedor NGINX y el puerto 0 para el puerto de host, el puerto de host se elige dinámicamente en el rango de puertos efímeros de la instancia de contenedor (como, por ejemplo, del 32768 al 61000 en las AMI optimizadas para Amazon ECS más recientes). Cuando se lanza la tarea, el contenedor NGINX se registra en el equilibrador de carga de aplicación como una combinación de ID de instancia y puerto, y el tráfico se distribuye al ID de la instancia y al puerto correspondientes a dicho contenedor. Este mapeo dinámico le permite tener varias tareas desde un servicio único en la misma instancia de contenedor. Para obtener más información, consulte la [Guía del usuario de Application Load Balancers](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/).

Para obtener información sobre las prácticas recomendadas para establecer parámetros que aceleren las implementaciones, consulte los siguientes recursos:
+ [Optimización de los parámetros de comprobación de estado del equilibrador de carga para Amazon ECS](load-balancer-healthcheck.md)
+ [Optimización de los parámetros de drenaje de conexiones del equilibrador de carga para Amazon ECS](load-balancer-connection-draining.md)

Al utilizar los equilibradores de carga de aplicación con Amazon ECS, tenga en cuenta lo siguiente:
+ Amazon ECS requiere el rol de IAM vinculado al servicio, que proporciona los permisos necesarios para registrar y anular el registro de destinos en el balanceador de carga al crear y detener tareas. Para obtener más información, consulte [Uso de roles vinculados al servicio para Amazon ECS](using-service-linked-roles.md).
+ En el caso de los servicios en una configuración de solo IPv6, debe establecer el tipo de dirección IP del grupo de destino del equilibrador de carga de aplicación en `dualstack` o `dualstack-without-public-ipv4`.
+ Para los servicios con tareas que utilizan el modo de red `awsvpc`, al crear un grupo de destino para el servicio, debe elegir `ip` como tipo de destino, no `instance`. Esto se debe a que las tareas que utilizan el modo de red `awsvpc` están asociadas a una interfaz de red elástica, no a una instancia de Amazon EC.
+ Si el servicio requiere acceso a varios puertos con equilibrador de carga, como el puerto 80 y el puerto 443 para un servicio HTTP o HTTPS, puede configurar dos oyentes. Un agente de escucha es responsable de las solicitudes HTTPS que reenvían la solicitud al servicio y otro agente de escucha es responsable de redirigir las solicitudes HTTP al puerto HTTPS adecuado. Para obtener más información, consulte [Creación de un agente de escucha para el Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-listener.html) en la *Guía del usuario de Application Load Balancers*.
+ La configuración de subred del balanceador de carga debe incluir todas las zonas de disponibilidad en las que residen las instancias de contenedor.
+ Después de crear un servicio, la configuración del equilibrador de carga no se puede cambiar desde la Consola de administración de AWS. Puede usar el Copiloto de AWS, AWS CloudFormation, AWS CLI o SDK para modificar la configuración del equilibrador de carga solo del controlador de implementación progresiva `ECS`, no AWS CodeDeploy azul/verde o exterior. Cuando agrega, actualiza o elimina una configuración de equilibrador de carga, Amazon ECS inicia una nueva implementación con la configuración actualizada de Elastic Load Balancing. Esto hace que las tareas se registren y eliminen el registro de los equilibradores de carga. Le recomendamos que lo verifique en un entorno de prueba antes de actualizar la configuración de Elastic Load Balancing. Para obtener más información acerca de cómo modificar la configuración, consulte [UpdateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html) en la *Referencia de la API de Amazon Elastic Container Service*. 
+ Si la tarea de un servicio no supera los criterios de comprobación de estado del equilibrador de carga, la tarea se detiene y se reinicia. Este proceso continúa hasta que el servicio alcanza el número de tareas en ejecución deseadas.
+ Si está teniendo problemas con los servicios habilitados para el balanceador de carga, consulte [Solución de problemas de los equilibradores de carga de servicio en Amazon ECS](troubleshoot-service-load-balancers.md).
+ Cuando use el tipo de destino `instance`, las tareas y el equilibrador de carga deben estar en la misma VPC. Cuando se utiliza el tipo de destino `ip`, se admite la conectividad entre VPC.
+ Utilice un grupo de destino único para cada servicio. 

  El uso del mismo grupo de destino para varios servicios puede provocar problemas durante la implementación del servicio.
+ Debe especificar los grupos de destino que están asociados a un equilibrador de carga de aplicación.

Para obtener información sobre cómo crear un equilibrador de carga de aplicaciones, consulte [Create an Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html) en *Application Load Balancers *

# Uso de un equilibrador de carga de red para Amazon ECS
<a name="nlb"></a>

Un Network Load Balancer toma las decisiones de enrutamiento en la capa de transporte (TCP/SSL). Puede gestionar millones de solicitudes por segundo. Una vez que el balanceador de carga ha recibido una conexión, selecciona un destino del grupo de destinos para la regla predeterminada por medio de un algoritmo hash de flujo de direccionamiento. Intenta abrir una conexión TCP con el destino seleccionado en el puerto especificado en la configuración del agente de escucha. Reenvía la solicitud sin modificar los encabezados. Los Network Load Balancers admiten el mapeo de puertos de host dinámico. Por ejemplo, si la definición de contenedor de la tarea especifica el puerto 80 para un puerto de contenedor NGINX y el puerto 0 para el puerto de host, el puerto de host se elige dinámicamente en el rango de puertos efímeros de la instancia de contenedor (como, por ejemplo, del 32768 al 61000 en las AMI optimizadas para Amazon ECS más recientes). Cuando se lanza la tarea, el contenedor NGINX se registra en el Network Load Balancer como una combinación de ID de instancia y puerto, y el tráfico se distribuye al ID de la instancia y al puerto correspondiente a ese contenedor. Este mapeo dinámico le permite tener varias tareas desde un servicio único en la misma instancia de contenedor. Para obtener más información, consulte la [Guía del usuario de balanceadores de carga de red](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/).

Para obtener información sobre las prácticas recomendadas para establecer parámetros que aceleren las implementaciones, consulte los siguientes recursos:
+ [Optimización de los parámetros de comprobación de estado del equilibrador de carga para Amazon ECS](load-balancer-healthcheck.md)
+ [Optimización de los parámetros de drenaje de conexiones del equilibrador de carga para Amazon ECS](load-balancer-connection-draining.md)

Al utilizar los equilibradores de carga de red con Amazon ECS, tenga en cuenta lo siguiente:
+ Amazon ECS requiere el rol de IAM vinculado al servicio, que proporciona los permisos necesarios para registrar y anular el registro de destinos en el balanceador de carga al crear y detener tareas. Para obtener más información, consulte [Uso de roles vinculados al servicio para Amazon ECS](using-service-linked-roles.md).
+ No se pueden asociar más de cinco grupos de destino a un servicio.
+ En el caso de los servicios en una configuración de solo IPv6, debe establecer el tipo de dirección IP del grupo de destino del equilibrador de carga de red en `dualstack`.
+ Para los servicios con tareas que utilizan el modo de red `awsvpc`, al crear un grupo de destino para el servicio, debe elegir `ip` como tipo de destino, no `instance`. Esto se debe a que las tareas que utilizan el modo de red `awsvpc` están asociadas a una interfaz de red elástica, no a una instancia de Amazon EC2.
+ La configuración de subred del balanceador de carga debe incluir todas las zonas de disponibilidad en las que residen las instancias de contenedor.
+ Después de crear un servicio, la configuración del equilibrador de carga no se puede cambiar desde la Consola de administración de AWS. Puede usar el Copiloto de AWS, AWS CloudFormation, AWS CLI o SDK para modificar la configuración del equilibrador de carga solo del controlador de implementación progresiva `ECS`, no AWS CodeDeploy azul/verde o exterior. Cuando agrega, actualiza o elimina una configuración de equilibrador de carga, Amazon ECS inicia una nueva implementación con la configuración actualizada de Elastic Load Balancing. Esto hace que las tareas se registren y eliminen el registro de los equilibradores de carga. Le recomendamos que lo verifique en un entorno de prueba antes de actualizar la configuración de Elastic Load Balancing. Para obtener más información acerca de cómo modificar la configuración, consulte [UpdateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html) en la *Referencia de la API de Amazon Elastic Container Service*. 
+ Si la tarea de un servicio no supera los criterios de comprobación de estado del equilibrador de carga, la tarea se detiene y se reinicia. Este proceso continúa hasta que el servicio alcanza el número de tareas en ejecución deseadas.
+ Cuando se utilizan equilibradores de carga de puerta de enlace configurados con direcciones IP como destinos y la conservación de la IP del cliente está desactivada, las solicitudes se ven como procedentes de la dirección IP privada de los equilibradores de carga de puerta de enlace. Esto significa que los servicios detrás de un equilibrador de carga de puerta de enlace se abren de manera efectiva al mundo en cuanto se permiten solicitudes entrantes y comprobaciones de estado en el grupo de seguridad de destino.
+ Para las tareas de Fargate, debe utilizar la versión de la plataforma `1.4.0` (Linux) o `1.0.0` (Windows).
+ Si está teniendo problemas con los servicios habilitados para el balanceador de carga, consulte [Solución de problemas de los equilibradores de carga de servicio en Amazon ECS](troubleshoot-service-load-balancers.md).
+ Cuando use el tipo de destino `instance`, las tareas y el equilibrador de carga deben estar en la misma VPC. Cuando se utiliza el tipo de destino `ip`, se admite la conectividad entre VPC.
+ La conservación de la dirección IP del cliente del equilibrador de carga de red también es compatible con los destinos de Fargate.
+ Utilice un grupo de destino único para cada servicio. 

  El uso del mismo grupo de destino para varios servicios puede provocar problemas durante la implementación del servicio.
+ Debe especificar los grupos de destino que están asociados a un equilibrador de carga de red.

Para obtener información sobre cómo crear un equilibrador de carga de red, consulte [Create a Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html) en *Equilibrador de carga de red *

**importante**  
Si la definición de tareas del servicio utiliza el modo de red `awsvpc` (que es obligatorio para Fargate), se debe elegir `ip` como tipo de destino, no `instance`. Esto se debe a que las tareas que utilizan el modo de red `awsvpc` están asociadas a una interfaz de red elástica, no a una instancia de Amazon EC2.   
No puede registrar instancias por ID de instancia si tienen los siguientes tipos de instancia: C1, CC1, CC2, CG1, CG2, CR1, G1, G2, HI1, HS1, M1, M2, M3 y T1. Puede registrar las instancias de estos tipos por dirección IP. 

# Uso de un equilibrador de carga de puerta de enlace para Amazon ECS
<a name="glb"></a>

Un equilibrador de carga de puerta de enlace opera en la tercera capa del modelo de interconexión de sistemas abiertos (OSI), es decir, la capa de red. Escucha todos los paquetes IP en todos los puertos y reenvía el tráfico al grupo de destino especificado en la regla de oyentes. Mantiene la persistencia de los flujos en un dispositivo de destino específico mediante 5 tuplas (para flujos TCP/UDP) o 3 tuplas (para flujos que no son TCP/UDP). Por ejemplo, si la definición de contenedor de la tarea especifica el puerto 80 para un puerto de contenedor NGINX y el puerto 0 para el puerto de host, el puerto de host se elige dinámicamente en el rango de puertos efímeros de la instancia de contenedor (como, por ejemplo, del 32768 al 61000 en las AMI optimizadas para Amazon ECS más recientes). Cuando se lanza la tarea, el contenedor NGINX se registra en el equilibrador de carga de puerta de enlace como una combinación de ID de instancia y puerto, y el tráfico se distribuye al ID de la instancia y al puerto correspondientes a ese contenedor. Este mapeo dinámico le permite tener varias tareas desde un servicio único en la misma instancia de contenedor. Para obtener más información, consulte [What is a Gateway Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/gateway/introduction.html) en *Gateway Load Balancers*.

Para obtener información sobre las prácticas recomendadas para establecer parámetros que aceleren las implementaciones, consulte los siguientes recursos:
+ [Optimización de los parámetros de comprobación de estado del equilibrador de carga para Amazon ECS](load-balancer-healthcheck.md)
+ [Optimización de los parámetros de drenaje de conexiones del equilibrador de carga para Amazon ECS](load-balancer-connection-draining.md)

Tenga en cuenta lo siguiente al utilizar los equilibradores de carga de puerta de enlace con Amazon ECS:
+ Amazon ECS requiere el rol de IAM vinculado al servicio, que proporciona los permisos necesarios para registrar y anular el registro de destinos en el balanceador de carga al crear y detener tareas. Para obtener más información, consulte [Uso de roles vinculados al servicio para Amazon ECS](using-service-linked-roles.md).
+ En el caso de los servicios en una configuración de solo IPv6, debe establecer el tipo de dirección IP del grupo de destino del equilibrador de carga de puerta de enlace en `dualstack`.
+ En el caso de los servicios con tareas que utilizan un modo de red que no sea el de `awsvpc`, no se admiten los equilibradores de carga de puerta de enlace.
+ La configuración de subred del balanceador de carga debe incluir todas las zonas de disponibilidad en las que residen las instancias de contenedor.
+ Después de crear un servicio, la configuración del equilibrador de carga no se puede cambiar desde la Consola de administración de AWS. Puede usar el Copiloto de AWS, AWS CloudFormation, AWS CLI o SDK para modificar la configuración del equilibrador de carga solo del controlador de implementación progresiva `ECS`, no AWS CodeDeploy azul/verde o exterior. Cuando agrega, actualiza o elimina una configuración de equilibrador de carga, Amazon ECS inicia una nueva implementación con la configuración actualizada de Elastic Load Balancing. Esto hace que las tareas se registren y eliminen el registro de los equilibradores de carga. Le recomendamos que lo verifique en un entorno de prueba antes de actualizar la configuración de Elastic Load Balancing. Para obtener más información acerca de cómo modificar la configuración, consulte [UpdateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html) en la *Referencia de la API de Amazon Elastic Container Service*. 
+ Si la tarea de un servicio no supera los criterios de comprobación de estado del equilibrador de carga, la tarea se detiene y se reinicia. Este proceso continúa hasta que el servicio alcanza el número de tareas en ejecución deseadas.
+ Al utilizar el equilibrador de carga de puerta de enlace configurado con direcciones IP como destinos, las solicitudes se ven como procedentes de la dirección IP privada de los equilibradores de carga de puerta de enlace. Esto significa que los servicios detrás de un equilibrador de carga de puerta de enlace se abren de manera efectiva al mundo en cuanto se permiten solicitudes entrantes y comprobaciones de estado en el grupo de seguridad de destino.
+ Para las tareas de Fargate, debe utilizar la versión de la plataforma `1.4.0` (Linux) o `1.0.0` (Windows).
+ Si está teniendo problemas con los servicios habilitados para el balanceador de carga, consulte [Solución de problemas de los equilibradores de carga de servicio en Amazon ECS](troubleshoot-service-load-balancers.md).
+ Cuando use el tipo de destino `instance`, las tareas y el equilibrador de carga deben estar en la misma VPC. Cuando se utiliza el tipo de destino `ip`, se admite la conectividad entre VPC.
+ Utilice un grupo de destino único para cada servicio. 

  El uso del mismo grupo de destino para varios servicios puede provocar problemas durante la implementación del servicio.
+ Debe especificar los grupos de destino que están asociados a un equilibrador de carga de puerta de enlace.

Para obtener información sobre cómo crear un equilibrador de carga de puerta de enlace, consulte [Introducción a los equilibradores de carga de puertas de enlace](https://docs.aws.amazon.com/elasticloadbalancing/latest/gateway/getting-started.html) en los *equilibradores de carga de puerta de enlace *.

**importante**  
Si la definición de tareas del servicio utiliza el modo de red `awsvpc` (que es obligatorio para Fargate), se debe elegir `ip` como tipo de destino, no `instance`. Esto se debe a que las tareas que utilizan el modo de red `awsvpc` están asociadas a una interfaz de red elástica, no a una instancia de Amazon EC2.   
No puede registrar instancias por ID de instancia si tienen los siguientes tipos de instancia: C1, CC1, CC2, CG1, CG2, CR1, G1, G2, HI1, HS1, M1, M2, M3 y T1. Puede registrar las instancias de estos tipos por dirección IP. 

# Registro de varios grupos de destino en un servicio de Amazon ECS
<a name="register-multiple-targetgroups"></a>

El servicio de Amazon ECS puede atender el tráfico procedente de varios balanceadores de carga y exponer varios puertos con de carga balanceada cuando se especifican varios grupos de destino en una definición de servicio.

Actualmente, si desea crear un servicio que especifique varios grupos de destino, debe crear el servicio mediante la API de Amazon ECS, el SDK, la AWS CLI o una plantilla de CloudFormation. Una vez creado el servicio, puede ver el servicio y los grupos de destino registrados con él con la Consola de administración de AWS. Se debe utilizar `[UpdateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html)` para modificar la configuración del balanceador de carga de un servicio existente.

Se puede especificar en una definición de servicio varios grupos de destino utilizando el siguiente formato. Para obtener la sintaxis completa de una definición de servicio, consulte [Plantilla de definición de servicio](sd-template.md).

```
"loadBalancers":[
   {  
      "targetGroupArn":"arn:aws:elasticloadbalancing:region:123456789012:targetgroup/target_group_name_1/1234567890123456",
      "containerName":"container_name",
      "containerPort":container_port
   },
   {  
      "targetGroupArn":"arn:aws:elasticloadbalancing:region:123456789012:targetgroup/target_group_name_2/6543210987654321",
      "containerName":"container_name",
      "containerPort":container_port
   }
]
```

## Consideraciones
<a name="multiple-targetgroups-considerations"></a>

Cuando se especifiquen varios grupos de destino en una definición de servicio, debe tenerse en cuenta lo siguiente.
+ En el caso de los servicios que utilizan un Application Load Balancer o un Network Load Balancer, no se pueden asociar más de cinco grupos de destino a un servicio.
+ La especificación de varios grupos de destino en una definición de servicio solo se admite en las siguientes condiciones:
  + El servicio debe utilizar un Application Load Balancer o un Network Load Balancer.
  + El servicio debe utilizar el tipo de controlador de implementación (`ECS`). Puede ser la implementación azul/verde o nativa de Amazon ECS o la implementación de actualizaciones sucesivas.
+ Se admite la especificación de varios grupos de destino para servicios que contengan tareas que utilicen los tipos de lanzamiento de Fargate y EC2.
+ Al crear un servicio que especifica varios grupos de destino, se debe crear el rol vinculado al servicio de Amazon ECS. Para crear el rol, omita el parámetro `role` en las solicitudes de API o la propiedad `Role` en CloudFormation. Para obtener más información, consulte [Uso de roles vinculados al servicio para Amazon ECS](using-service-linked-roles.md).

## Ejemplos de definiciones de servicio
<a name="multiple-targetgroups-examples"></a>

A continuación se muestran unos ejemplos de casos de uso para especificar varios grupos de destino en una definición de servicio. Para obtener la sintaxis completa de una definición de servicio, consulte [Plantilla de definición de servicio](sd-template.md).

### Configuración de equilibradores de carga independientes para el tráfico interno y externo
<a name="multiple-targetgroups-example1"></a>

En el siguiente caso de uso, un servicio utiliza dos balanceadores de carga independientes, uno para el tráfico interno y otro para el tráfico de Internet, para el mismo contenedor y puerto.

```
"loadBalancers":[
   //Internal ELB
   {  
      "targetGroupArn":"arn:aws:elasticloadbalancing:region:123456789012:targetgroup/target_group_name_1/1234567890123456",
      "containerName":"nginx",
      "containerPort":8080
   },
   //Internet-facing ELB
   {  
      "targetGroupArn":"arn:aws:elasticloadbalancing:region:123456789012:targetgroup/target_group_name_2/6543210987654321",
      "containerName":"nginx",
      "containerPort":8080
   }
]
```

### Exposición de varios puertos desde el mismo contenedor
<a name="multiple-targetgroups-example1"></a>

En el siguiente caso de uso, un servicio utiliza un balanceador de carga pero expone varios puertos desde el mismo contenedor. Por ejemplo, un contenedor Jenkins podría exponer el puerto 8080 para la interfaz web de Jenkins y el puerto 50000 para la API.

```
"loadBalancers":[
   {  
      "targetGroupArn":"arn:aws:elasticloadbalancing:region:123456789012:targetgroup/target_group_name_1/1234567890123456",
      "containerName":"jenkins",
      "containerPort":8080
   },
   {  
      "targetGroupArn":"arn:aws:elasticloadbalancing:region:123456789012:targetgroup/target_group_name_2/6543210987654321",
      "containerName":"jenkins",
      "containerPort":50000
   }
]
```

### Exposición de puertos desde varios contenedores
<a name="multiple-targetgroups-example3"></a>

En el siguiente caso de uso, un servicio utiliza un balanceador de carga y dos grupos de destino para exponer puertos desde contenedores independientes.

```
"loadBalancers":[
   {  
      "targetGroupArn":"arn:aws:elasticloadbalancing:region:123456789012:targetgroup/target_group_name_1/1234567890123456",
      "containerName":"webserver",
      "containerPort":80
   },
   {  
      "targetGroupArn":"arn:aws:elasticloadbalancing:region:123456789012:targetgroup/target_group_name_2/6543210987654321",
      "containerName":"database",
      "containerPort":3306
   }
]
```