

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Control de las instancias de Auto Scaling que se terminan durante una reducción horizontal
<a name="as-instance-termination"></a>

Amazon EC2 Auto Scaling utiliza políticas de terminación para decidir el orden de terminación de las instancias. Puede usar una política predefinida o crear una política personalizada para satisfacer sus requisitos específicos. Al utilizar una política personalizada o la protección frente a la reducción horizontal de instancias, también puede evitar que el grupo de escalado automático termine las instancias que aún no están listas para ser terminadas.

**Topics**
+ [Cuándo se utilizan las políticas de terminación de Amazon EC2 Auto Scaling](#common-scenarios-termination)
+ [Configuración de políticas de terminación de Amazon EC2 Auto Scaling](ec2-auto-scaling-termination-policies.md)
+ [Creación de una política de terminación personalizada con Lambda](lambda-custom-termination-policy.md)
+ [Uso de la protección frente a la reducción horizontal de instancias para controlar la terminación de instancias](ec2-auto-scaling-instance-protection.md)
+ [Diseño de aplicaciones para gestionar sin problemas la terminación de instancias](gracefully-handle-instance-termination.md)

## Cuándo se utilizan las políticas de terminación de Amazon EC2 Auto Scaling
<a name="common-scenarios-termination"></a>

En las siguientes secciones se describen los escenarios en los que Amazon EC2 Auto Scaling utiliza políticas de terminación. 

**Topics**
+ [Eventos de reducción horizontal](#common-scenarios-termination-scale-in)
+ [Actualización de instancias](#common-scenarios-termination-instance-refreshes)
+ [Reequilibrio de la zona de disponibilidad](#common-scenarios-termination-rebalancing)

### Eventos de reducción horizontal
<a name="common-scenarios-termination-scale-in"></a>

Un evento de reducción horizontal se produce cuando hay un nuevo valor para la capacidad deseada de un grupo de escalado automático que es inferior a la capacidad actual del grupo.

Los eventos de reducción horizontal ocurren en los siguientes escenarios:
+ Cuando se utilizan políticas de escalado dinámico y el tamaño del grupo disminuye como resultado de cambios en el valor de una métrica
+ Cuando se utiliza el escalado programado y el tamaño del grupo disminuye como resultado de una acción programada
+ Cuando reduce manualmente el tamaño del grupo

En el ejemplo siguiente se muestra cómo funcionan las políticas de terminación cuando hay un evento de reducción horizontal.

1. El grupo de escalado automático de este ejemplo tiene un tipo de instancia, dos zonas de disponibilidad y una capacidad deseada de dos instancias. También tiene una política de escalado dinámico que agrega y elimina instancias cuando la utilización de recursos aumenta o disminuye. Las dos instancias de este grupo se distribuyen entre las dos zonas de disponibilidad, como se muestra en el siguiente diagrama.  
![\[Un grupo de escalado automático básico con dos instancias.\]](http://docs.aws.amazon.com/es_es/autoscaling/ec2/userguide/images/termination-policy-default-diagram.png)

1. Cuando se reduce horizontalmente el grupo de escalado automático, Amazon EC2 Auto Scaling lanza una nueva instancia. El grupo de escalado automático ahora tiene tres instancias, distribuidas entre las dos zonas de disponibilidad, como se muestra en el siguiente diagrama.  
![\[Un grupo de escalado automático después de escalar horizontalmente en una instancia.\]](http://docs.aws.amazon.com/es_es/autoscaling/ec2/userguide/images/termination-policy-default-2-diagram.png)

1. Cuando se escala el grupo Auto Scaling, Amazon EC2 Auto Scaling termina una de las instancias. 

1. Si no ha asignado una política de terminación específica al grupo, Amazon EC2 Auto Scaling utiliza la política de terminación predeterminada. Selecciona la zona de disponibilidad con dos instancias y termina la instancia lanzada desde una configuración de lanzamiento, una plantilla de lanzamiento distinta, o la versión más antigua de la plantilla de lanzamiento actual. Si las instancias se lanzaron desde la misma versión de la misma plantilla, Amazon EC2 Auto Scaling selecciona la instancia más próxima a la siguiente hora de facturación y la termina.   
![\[Un grupo de escalado automático después de reducirse horizontalmente en una instancia.\]](http://docs.aws.amazon.com/es_es/autoscaling/ec2/userguide/images/termination-policy-default-3-diagram.png)

### Actualización de instancias
<a name="common-scenarios-termination-instance-refreshes"></a>

Puede iniciar una actualización de instancias para actualizar las instancias del grupo de escalado automático. Durante una actualización de instancias, Amazon EC2 Auto Scaling termina las instancias del grupo y, a continuación, lanza reemplazos de las instancias terminadas. La política de terminación del grupo de escalado automático controla qué instancias se reemplazan primero. 

### Reequilibrio de la zona de disponibilidad
<a name="common-scenarios-termination-rebalancing"></a>

Amazon EC2 Auto Scaling equilibra la capacidad de manera uniforme en las zonas de disponibilidad habilitadas para el grupo de escalado automático. Esto ayuda a reducir el impacto de una interrupción en la zona de disponibilidad. Si la distribución de la capacidad entre las zonas de disponibilidad se desequilibra, Amazon EC2 Auto Scaling reequilibra el grupo de escalado automático lanzando instancias en las zonas de disponibilidad habilitadas con menos instancias y terminando instancias en otros lugares. La política de terminación controla qué instancias tienen prioridad para terminarlas primero. 

Existen varias razones por las que la distribución de instancias entre las zonas de disponibilidad puede desequilibrarse.

Eliminación de instancias  
Si desconecta instancias del grupo de escalado automático, pone instancias en espera o termina explícitamente instancias y disminuye la capacidad deseada, lo que impide que se lancen instancias de reemplazo, el grupo podría quedar desequilibrado. Si esto ocurre, Amazon EC2 Auto Scaling lo compensa reequilibrando las zonas de disponibilidad.

Uso de zonas de disponibilidad diferentes de las especificadas originalmente  
Si expande el grupo de escalado automático para incluir zonas de disponibilidad adicionales, o cambia las zonas de disponibilidad que se utilizan, Amazon EC2 Auto Scaling lanzará instancias en las nuevas zonas de disponibilidad y las terminará en las otras zonas para garantizar que el grupo de escalado automático abarca de manera uniforme las zonas de disponibilidad.

Interrupción de disponibilidad  
Las interrupciones de disponibilidad son raras. Sin embargo, si una zona de disponibilidad deja de estar disponible y se recupera posteriormente, el grupo de escalado automático puede quedar desequilibrado entre las zonas de disponibilidad. Amazon EC2 Auto Scaling intenta reequilibrar gradualmente el grupo y el reequilibrio puede terminar instancias en otras zonas.  
Por ejemplo, imagine que hay un grupo de escalado automático que tiene un tipo de instancia, dos zonas de disponibilidad y una capacidad deseada de dos instancias. En una situación en la que se produce un error en una zona de disponibilidad, Amazon EC2 Auto Scaling lanza automáticamente una nueva instancia en la zona de disponibilidad en buen estado para reemplazar la de la zona de disponibilidad en mal estado. Cuando la zona de disponibilidad en mal estado vuelve a estar en buen estado, Amazon EC2 Auto Scaling lanza automáticamente una nueva instancia en esta zona, que a su vez termina una instancia en la zona no afectada. 

**nota**  
Durante el reequilibrio, Amazon EC2 Auto Scaling lanza nuevas instancias antes de terminar las antiguas, por lo que no se pone en peligro el rendimiento ni la disponibilidad de su aplicación.   
Como Amazon EC2 Auto Scaling intenta lanzar nuevas instancias antes de terminar las antiguas, cuando se está en la capacidad máxima especificada o cerca de ella puede impedir o detener completamente las actividades de reequilibrio. Para evitar este problema, el sistema puede superar temporalmente la capacidad máxima especificada de un grupo con un margen del 10 % (o con un margen de una instancia, lo que sea mayor) durante una actividad de reequilibrio. El margen solo se amplía si el grupo tiene o se aproxima a la capacidad máxima y necesita reequilibrarse, ya sea por una distribución de zonas solicitada por el usuario o para compensar los problemas de disponibilidad de zona. La extensión se dura solamente mientras sea necesaria para reequilibrar el grupo, normalmente unos minutos.

# Configuración de políticas de terminación de Amazon EC2 Auto Scaling
<a name="ec2-auto-scaling-termination-policies"></a>

Una política de terminación proporciona los criterios que Amazon EC2 Auto Scaling sigue para terminar las instancias en un orden específico. De forma predeterminada, Amazon EC2 Auto Scaling utiliza una política de terminación diseñada para terminar primero las instancias que utilizan configuraciones anticuadas. Puede cambiar la política de terminación para controlar qué instancias son más importantes cancelar primero. 

Cuando Amazon EC2 Auto Scaling termina instancias, trata de mantener un equilibrio entre las zonas de disponibilidad habilitadas para el grupo de escalado automático. El mantenimiento del equilibrio entre las zonas tiene prioridad sobre las políticas de terminación. Si una zona de disponibilidad tiene más instancias que otras, Amazon EC2 Auto Scaling aplica primero la política de terminación a la zona desequilibrada. Si las zonas de disponibilidad están equilibradas, aplica la política de terminación en todas las zonas.

**Topics**
+ [Funcionamiento de la política de terminación predeterminada](#default-termination-policy)
+ [Política de terminación predeterminada y grupos de instancias mixtas](#default-termination-policy-mixed-instances-groups)
+ [Políticas de terminación predefinidas](#predefined-termination-policies)
+ [Cambio de la política de terminación de un grupo de escalado automático](custom-termination-policy.md)

**nota**  
Amazon EC2 Auto Scaling aplica políticas de terminación únicamente a las instancias que el grupo Auto Scaling no considere en mal estado. Como resultado, las instancias marcadas como insalubres por las comprobaciones de estado de Auto Scaling pasarán por alto la evaluación de la política de rescisión.  
Para obtener más información, consulte [Diseño de aplicaciones para gestionar sin problemas la terminación de instancias](gracefully-handle-instance-termination.md).

## Funcionamiento de la política de terminación predeterminada
<a name="default-termination-policy"></a>

Cuando Amazon EC2 Auto Scaling necesita terminar una instancia, primero determina qué zonas de disponibilidad tienen más instancias y busca al menos una instancia que no esté protegida frente a la reducción horizontal. A continuación, procede a evaluar las instancias desprotegidas dentro de la zona de disponibilidad identificada de la siguiente manera:

**Instancias que utilizan configuraciones anticuadas**
+ **Para los grupos que utilizan una plantilla de lanzamiento**, determine si cualquiera de las instancias utiliza configuraciones obsoletas y establezca las prioridades en el siguiente orden:

  1. En primer lugar, compruebe si hay instancias lanzadas con una configuración de lanzamiento.

  1. Luego, compruebe si hay instancias lanzadas con una plantilla de lanzamiento diferente a la plantilla de lanzamiento actual.

  1. Por último, busque instancias que utilicen la versión más antigua de la plantilla de lanzamiento actual.
+ **Para los grupos que utilizan una configuración de lanzamiento**, determine si alguna de estas instancias utiliza la configuración de lanzamiento más antigua.

Si no se encuentra ninguna instancia con configuraciones anticuadas o hay varias instancias entre las que elegir, Amazon EC2 Auto Scaling utiliza el siguiente criterio para las instancias que se acercan a su próxima hora de facturación. 

**Instancias cercanas a la próxima hora de facturación**  
Determine si cualquiera de las instancias que cumplen los criterios anteriores está más próxima que las demás a la siguiente hora de facturación. Si varias instancias están igual de próximas, cancele una al azar. Esto ayuda a maximizar el uso de las instancias que tienen un cargo por hora. Sin embargo, la mayor parte del uso de EC2 ahora se factura por segundo, por lo que esta optimización ofrece menos beneficios. Para obtener más información, consulte [Precios de Amazon EC2](https://aws.amazon.com/ec2/pricing/). 

El siguiente diagrama de flujo ilustra cómo funciona la política de terminación predeterminada para los grupos que utilizan una plantilla de lanzamiento.

![\[Un diagrama de flujo que muestra cómo un grupo de escalado automático utiliza la política de terminación predeterminada para terminar instancias.\]](http://docs.aws.amazon.com/es_es/autoscaling/ec2/userguide/images/termination-policy-default-flowchart-diagram.png)


## Política de terminación predeterminada y grupos de instancias mixtas
<a name="default-termination-policy-mixed-instances-groups"></a>

Amazon EC2 Auto Scaling aplica criterios adicionales al finalizar instancias en [grupos de instancias mixtos](ec2-auto-scaling-mixed-instances-groups.md). 

Cuando Amazon EC2 Auto Scaling necesita terminar una instancia, identifica primero qué opción de compra (spot o bajo demanda) debe ser terminada en función de la configuración del grupo. De este modo, se garantiza que el grupo tienda a alcanzar la proporción especificada de instancias de spot y bajo demanda a lo largo del tiempo.

A continuación, aplica la política de terminación en cada zona de disponibilidad individualmente. Determina qué instancia de spot o instancia bajo demanda se debe cerrar en qué zona de disponibilidad para mantener el equilibrio entre las zonas de disponibilidad. La misma lógica se aplica a los grupos de instancias mixtos que utilizan pesos definidos para los tipos de instancia. 

Dentro de cada zona, la política de terminación predeterminada funciona de la siguiente manera para determinar qué instancia desprotegida que cumple con la opción de compra identificada puede terminarse:

1. Determine si alguna de las instancias se puede terminar para mejorar la alineación con la [estrategia de asignación](allocation-strategies.md) especificada para el grupo de escalado automático. Si no se identifica ninguna instancia para la optimización o hay varias instancias entre las que elegir, la evaluación continúa.

1. Determine si cualquiera de las instancias utiliza configuraciones obsoletas y establezca las prioridades en el siguiente orden:

   1. En primer lugar, compruebe si hay instancias lanzadas con una configuración de lanzamiento.

   1. Luego, compruebe si hay instancias lanzadas con una plantilla de lanzamiento diferente a la plantilla de lanzamiento actual.

   1. Por último, busque instancias que utilicen la versión más antigua de la plantilla de lanzamiento actual.

   Si no se encuentra ninguna instancia con configuraciones desactualizadas o hay varias instancias entre las que elegir, la evaluación continúa.

1. Determine si cualquiera de las instancias está más próxima que las demás a la siguiente hora de facturación. Si varias instancias están igual de próximas, elija una al azar.

## Políticas de terminación predefinidas
<a name="predefined-termination-policies"></a>

Puede elegir entre las siguientes políticas de terminación predefinidas:
+ **`Default`**: termina las instancias de acuerdo con la política de terminación predeterminada.
+ **`AllocationStrategy`**: termina las instancias del grupo de escalado automático para alinear las instancias restantes con la estrategia de asignación para el tipo de instancias que se va a terminar (una instancia de spot o una instancia bajo demanda). Esta política es útil cuando han cambiado los tipos de instancias que prefiera. Si la estrategia de asignación de spot es `lowest-price`, puede reequilibrar gradualmente la distribución de instancias de spot en sus grupos de spot con los precios más bajos. Si la estrategia de asignación de spot es `capacity-optimized`, puede reequilibrar gradualmente la distribución de las instancias de spot en los grupos de spot donde hay más capacidad de spot disponibles. También puede reemplazar gradualmente las instancias bajo demanda de un tipo de prioridad menor por otras de un tipo de prioridad mayor.
+ **`OldestLaunchTemplate`**: termina las instancias que tienen la plantilla de lanzamiento más antigua. Con esta política, las instancias que utilizan una plantilla de lanzamiento que no es la actual terminan primero, seguidas de las instancias que utilizan la versión más antigua de la plantilla de lanzamiento actual. Esta política es útil cuando va a actualizar un grupo y eliminar progresivamente las instancias de una configuración anterior.
+ **`OldestLaunchConfiguration`**: termina las instancias que tienen la configuración de lanzamiento más antigua. Esta política es útil cuando va a actualizar un grupo y eliminar progresivamente las instancias de una configuración anterior. Con esta política, las instancias que usan la configuración de lanzamiento no actual se terminan primero.
+ **`ClosestToNextInstanceHour`**: termina las instancias que están más próximas a la siguiente hora de facturación. Esta política ayuda a maximizar el uso de las instancias que tienen un cargo por hora.
+ **`NewestInstance`**: termina la instancia más reciente del grupo. Esta política es útil cuando va a probar una nueva configuración de lanzamiento, pero no desea mantenerla en producción.
+ **`OldestInstance`**: termina la instancia más antigua del grupo. Esta opción es útil cuando va a actualizar las instancias del grupo de escalado automático a un nuevo tipo de instancias EC2. Puede sustituir gradualmente las instancias del tipo antiguo por instancias del tipo nuevo.
**nota**  
Amazon EC2 Auto Scaling siempre equilibra primero las instancias en las zonas de disponibilidad, independientemente de la política de terminación que se utilice. Como resultado, es posible que encuentre situaciones en las que algunas instancias más recientes se terminen antes de las instancias más antiguas. Por ejemplo, cuando hay una zona de disponibilidad agregada más recientemente, o cuando una zona de disponibilidad tiene más instancias que las otras zonas de disponibilidad usadas por el grupo. 

# Cambio de la política de terminación de un grupo de escalado automático
<a name="custom-termination-policy"></a>

Para cambiar la política de terminación de su grupo de escalado automático, use uno de los siguientes métodos.

------
#### [ Console ]

No puede cambiar la política de terminación predeterminada cuando crea por primera vez un grupo de escalado automático en la consola de Amazon EC2 Auto Scaling. La política de terminación predeterminada se utiliza automáticamente. Una vez que cree el grupo de escalado automático, puede reemplazar la política predeterminada por una política de terminación diferente o por varias políticas de terminación enumeradas en el orden en el que deban aplicarse. 

**Cómo cambiar la política de terminación de un grupo de escalado automático**

1. Abra la consola Amazon EC2 en [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)y seleccione **Auto Scaling Groups** en el panel de navegación.

1. Seleccione la casilla situada junto al grupo de escalado automático.

   Se abre un panel dividido en la parte inferior de la página.

1. En la pestaña **Details (Detalles)** elija **(Advanced configurations) Configuraciones avanzadas**, **Edit (Editar)**.

1. Para **Termination policies (Políticas de terminación)**, elija una o varias políticas de terminación. Si elige varias políticas, colóquelas en el orden en el que desea que se evalúen.

   De manera opcional, puede elegir **Custom termination policy** (Política de terminación personalizada) y luego elegir una función de Lambda que se ajuste a sus necesidades. Si ha creado versiones y alias para la función de Lambda, puede elegir una versión o un alias en el menú desplegable **Version/Alias** (Versión/Alias). Para utilizar la versión no publicada de la función de Lambda, mantenga **Version/Alias** (Versión/Alias) establecido en su valor predeterminado. Para obtener más información, consulte [Creación de una política de terminación personalizada con Lambda](lambda-custom-termination-policy.md).
**nota**  
Si se utilizan varias políticas, su orden debe establecerse correctamente:  
Si utiliza la política **Default** (Predeterminada), debe ser la última de la lista.
Si utiliza una política **Custom termination** (Terminación personalizada), debe ser la primera de la lista.

1. Elija **Actualizar**.

------
#### [ AWS CLI ]

La política de terminación predeterminada se utiliza automáticamente a menos que se especifique una política diferente.

**Cómo cambiar la política de terminación de un grupo de escalado automático**  
Utilice uno de los siguientes comandos:
+ [create-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/create-auto-scaling-group.html)
+ [update-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/update-auto-scaling-group.html)

Puede utilizar políticas de terminación de manera individual o combinarlas en una lista de políticas. Por ejemplo, utilice el siguiente comando para actualizar un grupo de escalado automático para que utilice primero la política `OldestLaunchConfiguration` y después la política `ClosestToNextInstanceHour`.

```
aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg --termination-policies "OldestLaunchConfiguration" "ClosestToNextInstanceHour"
```

Si utiliza la política de terminación `Default`, colóquela la última en la lista de políticas de terminación. Por ejemplo, `--termination-policies "OldestLaunchConfiguration" "Default"`.

Para utilizar una política de rescisión personalizada, primero debe crear su política de rescisión utilizando AWS Lambda. Para especificar la función Lambda que se utilizará como política de terminación, colóquela la primera en la lista de políticas de terminación. Por ejemplo, `--termination-policies "arn:aws:lambda:us-west-2:123456789012:function:HelloFunction:prod" "OldestLaunchConfiguration"`. Para obtener más información, consulte [Creación de una política de terminación personalizada con Lambda](lambda-custom-termination-policy.md).

------

# Creación de una política de terminación personalizada con Lambda
<a name="lambda-custom-termination-policy"></a>

Amazon EC2 Auto Scaling utiliza políticas de terminación para priorizar qué instancias deben terminar primero al disminuir el tamaño del grupo de escalado automático (que se denomina *reducción horizontal*). El grupo de escalado automático utiliza una política de terminación predeterminada, pero opcionalmente puede elegir o crear sus propias políticas de terminación. Para obtener más información acerca de la elección de una política de terminación predefinida, consulte [Configuración de políticas de terminación de Amazon EC2 Auto Scaling](ec2-auto-scaling-termination-policies.md).

En este tema, aprenderá a crear una política de terminación personalizada utilizando una función AWS Lambda que Amazon EC2 Auto Scaling invoca en respuesta a determinados eventos. La función Lambda que crea procesa la información de los datos de entrada enviados por Amazon EC2 Auto Scaling y devuelve una lista de instancias listas para terminarse.

Una política de terminación personalizada proporciona un mejor control sobre qué instancias se terminan y cuándo. Por ejemplo, cuando el grupo de escalado automático se reduce horizontalmente, Amazon EC2 Auto Scaling no puede determinar si hay cargas de trabajo en ejecución que no deben interrumpirse. Con una función Lambda, puede validar la solicitud de terminación y esperar hasta que finalice la carga de trabajo antes de devolver el ID de instancia a Amazon EC2 Auto Scaling para la terminación. 

**Topics**
+ [Datos de entrada](#lambda-custom-termination-policy-input-data)
+ [Datos de respuesta](#lambda-custom-termination-policy-response-data)
+ [Consideraciones](#lambda-termination-policy-considerations)
+ [Crear la función de Lambda](#lambda-custom-termination-policy-create-function)
+ [Limitaciones](#lambda-custom-termination-policy-limitations)

## Datos de entrada
<a name="lambda-custom-termination-policy-input-data"></a>

Amazon EC2 Auto Scaling genera una carga útil JSON para los eventos de reducción horizontal, y también lo hace cuando las instancias están a punto de terminar como resultado de la duración máxima de la instancia o de las características de actualización de instancias. También genera una carga JSON para los eventos de reducción horizontal que puede iniciar al reequilibrar el grupo entre las zonas de disponibilidad.

Esta carga contiene información sobre la capacidad que Amazon EC2 Auto Scaling necesita terminar, una lista de instancias que sugiere para la terminación y el evento que inició la terminación. 

A continuación, se muestra un ejemplo de carga:

```
{
  "AutoScalingGroupARN": "arn:aws:autoscaling:us-east-1:<account-id>:autoScalingGroup:d4738357-2d40-4038-ae7e-b00ae0227003:autoScalingGroupName/my-asg",
  "AutoScalingGroupName": "my-asg",
  "CapacityToTerminate": [
    {
      "AvailabilityZone": "us-east-1b",
      "Capacity": 2,
      "InstanceMarketOption": "on-demand"
    },
    {
      "AvailabilityZone": "us-east-1b",
      "Capacity": 1,
      "InstanceMarketOption": "spot"
    },
    {
      "AvailabilityZone": "us-east-1c",
      "Capacity": 3,
      "InstanceMarketOption": "on-demand"
    }
  ],
  "Instances": [
    {
      "AvailabilityZone": "us-east-1b",
      "InstanceId": "i-0056faf8da3e1f75d",
      "InstanceType": "t2.nano",
      "InstanceMarketOption": "on-demand"
    },
    {
      "AvailabilityZone": "us-east-1c",
      "InstanceId": "i-02e1c69383a3ed501",
      "InstanceType": "t2.nano",
      "InstanceMarketOption": "on-demand"
    },
    {
      "AvailabilityZone": "us-east-1c",
      "InstanceId": "i-036bc44b6092c01c7",
      "InstanceType": "t2.nano",
      "InstanceMarketOption": "on-demand"
    },
    ...
  ],
  "Cause": "SCALE_IN"
}
```

La carga útil incluye el nombre del grupo de escalado automático, su Nombre de recurso de Amazon (ARN) y los siguientes elementos:
+ `CapacityToTerminate` describe cuánta capacidad de spot o en diferido se ha configurado para terminar en una zona de disponibilidad determinada. 
+ `Instances` representa las instancias que Amazon EC2 Auto Scaling sugiere para la terminación en función de la información de `CapacityToTerminate`. 
+ `Cause` describe el evento que causó la terminación: `SCALE_IN`, `INSTANCE_REFRESH`, `MAX_INSTANCE_LIFETIME` o `REBALANCE`. 

La siguiente información describe los factores más significativos de cómo Amazon EC2 Auto Scaling genera `Instances` en los datos de entrada:
+ El mantenimiento del equilibrio entre las zonas de disponibilidad tiene prioridad cuando se termina una instancia debido a eventos de reducción horizontal y terminaciones basadas en la actualización de instancias. Por lo tanto, si una zona de disponibilidad tiene más instancias que las otras zonas de disponibilidad usadas por el grupo, los datos de entrada contienen instancias que se pueden elegir para la terminación solo de la zona de disponibilidad desequilibrada. Si las zonas de disponibilidad utilizadas por el grupo están equilibradas, los datos de entrada contienen instancias de todas las zonas de disponibilidad del grupo. 
+ Cuando se utiliza una [política de instancias mixtas](ec2-auto-scaling-mixed-instances-groups.md), mantener las capacidades de spot y en diferido en equilibrio en función de los porcentajes deseados para cada opción de compra también tiene prioridad. En primer lugar, identificamos cuál de los dos tipos (spot o en diferido) debe terminarse. A continuación, identificamos qué instancias (dentro de la opción de compra identificada) de qué zonas de disponibilidad podemos terminar, lo que hará que las zonas de disponibilidad estén más equilibradas. 

## Datos de respuesta
<a name="lambda-custom-termination-policy-response-data"></a>

Los datos de entrada y los de respuesta en combinación reducen la lista de instancias que se van a terminar. 

Con la entrada dada, la respuesta de la función Lambda debería ser similar a la del siguiente ejemplo:

```
{
  "InstanceIDs": [
    "i-02e1c69383a3ed501",
    "i-036bc44b6092c01c7",
    ...
  ]
}
```

El elemento `InstanceIDs` de la respuesta representa las instancias que están listas para terminar. 

Como alternativa, puede devolver un conjunto diferente de instancias que están listas para terminarse, que reemplaza a las instancias en los datos de entrada. Si no hay instancias listas para terminar cuando se invoca la función Lambda, también puede optar por no devolver ninguna instancia.

Cuando no haya ninguna instancia lista para terminar, la respuesta de la función Lambda debería ser similar a la del siguiente ejemplo:

```
{
  "InstanceIDs": [ ]
}
```

## Consideraciones
<a name="lambda-termination-policy-considerations"></a>

Tenga en cuenta las siguientes consideraciones al utilizar una política de terminación personalizada:
+ Devolver una instancia primero en los datos de respuesta no garantiza su terminación. Si se devuelve un número de instancias superior al requerido cuando se invoca la función Lambda, Amazon EC2 Auto Scaling evalúa cada instancia con respecto a las demás políticas de terminación especificadas para el grupo de escalado automático. Cuando hay varias políticas de terminación, intenta aplicar la siguiente política de terminación de la lista y, si hay más instancias de las necesarias para terminar, pasa a la siguiente política de terminación, etc. Si no se especifica ninguna otra política de terminación, se utiliza la política de terminación predeterminada para determinar qué instancias se van a terminar.
+ Si no se devuelven instancias o se agota el tiempo de espera de la función Lambda, Amazon EC2 Auto Scaling espera un breve periodo de tiempo antes de volver a invocar la función. Para cualquier evento de reducción horizontal, sigue intentándolo siempre y cuando la capacidad deseada del grupo sea menor que su capacidad actual. Por ejemplo, en terminaciones basadas en actualizaciones, sigue intentándolo durante una hora. Después de eso, si sigue sin poder terminar instancias, se produce un error en la operación de actualización de instancias. Con la vida útil máxima de la instancia, Amazon EC2 Auto Scaling sigue intentando terminar la instancia que se ha identificado que supera su vida útil máxima. 
+ Debido a que la función se reintenta repetidamente, asegúrese de probar y corregir cualquier error permanente en el código antes de usar una función Lambda como una política de terminación personalizada.
+ Si reemplaza los datos de entrada por su propia lista de instancias que desea terminar y al terminar estas instancias se desequilibran las zonas de disponibilidad, Amazon EC2 Auto Scaling reequilibra gradualmente la distribución de la capacidad entre las zonas de disponibilidad. Primero, invoca la función Lambda para ver si hay instancias que están listas para terminarse y poder determinar si debe comenzar a reequilibrar. Si hay instancias listas para terminarse, primero lanza nuevas instancias. Cuando las instancias terminan de lanzarse, detecta que la capacidad actual del grupo es superior a la capacidad deseada e inicia un evento de reducción horizontal.
+ Una política de terminación personalizada no afecta a su capacidad de utilizar también la protección contra la reducción horizontal para evitar que determinadas instancias sean terminadas. Para obtener más información, consulte [Uso de la protección frente a la reducción horizontal de instancias para controlar la terminación de instancias](ec2-auto-scaling-instance-protection.md).
+ Si la función Lambda no devuelve ninguna instancia, esto no impide automáticamente todas las terminaciones. Amazon EC2 Auto Scaling seguirá cancelando las instancias que las comprobaciones de estado de Auto Scaling consideren en mal estado, independientemente de las políticas de terminación.

## Crear la función de Lambda
<a name="lambda-custom-termination-policy-create-function"></a>

Comience por crear la función Lambda, de modo que pueda especificar su Nombre de recurso de Amazon (ARN) en las políticas de terminación del grupo de escalado automático.

**Para crear una función Lambda (consola)**

1. Abra la página de [Funciones](https://console.aws.amazon.com/lambda/home#/functions) en la consola de Lambda.

1. En la barra de navegación de la parte superior de la pantalla, seleccione la misma región que utilizó cuando creó el grupo de escalado automático. 

1. Elija **Create function (Crear función)** y, a continuación, elija **Author from scratch (Crear desde cero)**.

1. En **Basic information (Información básica)**, para **Function name (Nombre de función)**, escriba un nombre para la función.

1. Seleccione **Creación de función**. Volverá al código y la configuración de la función. 

1. Con la función aún abierta en la consola, en **Function code (Código de función)**, pegue el código en el editor.

1. Elija **Implementar**. 

1. Opcionalmente, cree una versión publicada de la función Lambda eligiendo la pestaña **Versions (Versiones)** y, a continuación, **Publish new version (Publicar nueva versión)**. Para obtener más información acerca del control de versiones en Lambda, consulte [Versiones de la función de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html) en la *Guía para desarrolladores de AWS Lambda *.

1. Si eligió publicar una versión, elija la pestaña **Aliases (Alias)** si desea asociar un alias a esta versión de la función Lambda. Para obtener más información acerca de los alias en Lambda, consulte [Alias de función Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html) en la *Guía para desarrolladores de AWS Lambda *

1. A continuación, elija la pestaña **Configuration (Configuración)** y luego **Permissions (Permisos)**. 

1. Desplácese hasta **Política basada en recursos** y elija **Agregar permisos**. Una política basada en recursos se utiliza para conceder permisos para invocar la función a la entidad principal que se especifica en la política. En este caso, la entidad principal será el [rol vinculado al servicio de Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/autoscaling-service-linked-role.html) asociado al grupo de escalado automático.

1. En la sección **Policy statement (Instrucción de la política)**, configure sus permisos: 

   1. Elija **Cuenta de AWS**.

   1. En **Principal (Entidad principal)**, escriba el ARN del rol vinculado al servicio de llamada, por ejemplo, **arn:aws:iam::<aws-account-id>:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling**.

   1. En **Acción**, elija **lambda**:. InvokeFunction

   1. En **Statement ID (ID de estado)**, escriba un ID de instrucción único, como **AllowInvokeByAutoScaling**.

   1. Seleccione **Save**. 

1. Después de seguir estas instrucciones, continúe para especificar el ARN de la función en las políticas de terminación para el grupo de escalado automático. Para obtener más información, consulte [Cambio de la política de terminación de un grupo de escalado automático](custom-termination-policy.md). 

**nota**  
Para ver ejemplos que puede utilizar como referencia para desarrollar su función Lambda, consulte el [GitHub repositorio](https://github.com/aws-samples/amazon-ec2-auto-scaling-group-examples) de Amazon EC2 Auto Scaling.

## Limitaciones
<a name="lambda-custom-termination-policy-limitations"></a>
+ Solo puede especificar una función Lambda en las políticas de terminación para un grupo de escalado automático. Si se especifican varias políticas de terminación, primero se debe especificar la función Lambda.
+ Puede hacer referencia a la función Lambda utilizando un ARN no calificado (sin sufijo) o un ARN calificado que tenga una versión o un alias como sufijo. Si se utiliza un ARN no calificado (por ejemplo, `function:my-function`), la política basada en recursos debe crearse en la versión no publicada de la función. Si se utiliza un ARN calificado (por ejemplo, `function:my-function:1` o `function:my-function:prod`), la política basada en recursos debe crearse en esa versión de la función publicada específica.
+ No puede utilizar un ARN calificado con el sufijo `$LATEST`. Si intenta agregar una política de terminación personalizada que haga referencia a un ARN calificado con el sufijo `$LATEST`, se producirá un error.
+ El número de instancias proporcionadas en los datos de entrada está limitado a 30 000 instancias. Si hay más de 30 000 instancias que podrían terminarse, los datos de entrada incluyen `"HasMoreInstances": true` para indicar que se devuelve el número máximo de instancias. 
+ El tiempo máximo de ejecución de la función Lambda es de dos segundos (2000 milisegundos). Como práctica recomendada, debe establecer el valor de tiempo de espera de la función Lambda según el tiempo de ejecución previsto. Las funciones Lambda tienen un tiempo de espera predeterminado de tres segundos, pero esto puede reducirse. 
+ Si su tiempo de ejecución supera el límite de 2 segundos, cualquier acción de reducción horizontal se suspenderá hasta que el tiempo de ejecución caiga por debajo de este umbral. En el caso de las funciones de Lambda con tiempos de ejecución más largos y constantes, busque una forma de reducir el tiempo de ejecución, por ejemplo, almacenando en caché los resultados donde puedan recuperarse durante las siguientes invocaciones a Lambda.
+ No se pueden usar funciones de Lambda de cuentas diferentes. La función Lambda utilizada como política de terminación personalizada debe estar en el mismo Cuenta de AWS grupo que el de Auto Scaling. Las instrucciones de configuración de esta página sirven específicamente para configuraciones en una misma cuenta.
+ Las políticas de terminación personalizadas no se aplican a las instancias en mal estado. Las instancias en mal estado siempre se consideran aptas para la terminación, y la función Lambda solo evalúa la orden de terminación de las instancias restantes.

# Uso de la protección frente a la reducción horizontal de instancias para controlar la terminación de instancias
<a name="ec2-auto-scaling-instance-protection"></a>

La protección contra la reducción horizontal en instancias le permite controlar qué instancias de Amazon EC2 Auto Scaling se pueden terminar. Un caso de uso común para esta característica es escalar las cargas de trabajo basadas en contenedores. Para obtener más información, consulte [Diseño de aplicaciones para gestionar sin problemas la terminación de instancias](gracefully-handle-instance-termination.md).

De forma predeterminada, la protección frente a la reducción horizontal de instancias está deshabilitada cuando se crea un grupo de escalado automático. Esto significa que Amazon EC2 Auto Scaling puede terminar cualquier instancia del grupo.

Puede proteger las instancias en cuanto se lanzan habilitando la configuración de protección frente a la reducción horizontal de instancias en el grupo de escalado automático. La protección de reducción horizontal de instancias comienza cuando la instancia tiene el estado `InService`. A continuación, para controlar qué instancias pueden terminar, deshabilite la configuración de protección contra la reducción horizontal en las instancias individuales del grupo de escalado automático. De este modo, puede seguir protegiendo determinadas instancias de las terminaciones no deseadas. 

**Topics**
+ [Consideraciones](#instance-protection-considerations)
+ [Cambio en la protección contra la reducción horizontal para un grupo de escalado automático](#instance-protection-group)
+ [Cambio en la protección frente a la reducción horizontal de una instancia](#instance-protection-instance)

## Consideraciones
<a name="instance-protection-considerations"></a>

A continuación, se muestran las consideraciones que se deben tener en cuenta cuando se utiliza la protección frente a la reducción horizontal de instancias:
+ Si todas las instancias de un grupo de escalado automático están protegidas frente a la reducción horizontal y se produce un evento de reducción horizontal, se reduce la capacidad deseada. Sin embargo, el grupo de escalado automático no puede terminar el número necesario de instancias hasta que se desactiva la configuración de protección frente a la reducción horizontal de instancias. En el Consola de administración de AWS, el **historial de actividades** del grupo Auto Scaling incluye el siguiente mensaje si todas las instancias de un grupo de Auto Scaling están protegidas de la escalabilidad cuando se produce un evento de escalado: `Could not scale to desired capacity because all remaining instances are protected from scale in.`
+ Si desconecta una instancia que está protegida frente a la reducción horizontal, se pierde la configuración de protección frente a la reducción horizontal de instancias. Cuando vuelve a asociar la instancia al grupo, esta hereda la configuración de protección de reducción horizontal de instancias actual del grupo. Cuando Amazon EC2 Auto Scaling lanza una nueva instancia o traslada una instancia de un grupo activo al grupo de escalado automático, esta hereda la configuración de protección frente a la reducción horizontal de instancias del grupo de escalado automático. 
+ La protección frente a la reducción horizontal de instancias no protege las instancias de Auto Scaling de lo siguiente:
  + La sustitución de comprobaciones de estado si la instancia no supera las comprobaciones de estado. Para obtener más información, consulte [Comprobaciones de estado para instancias en un grupo de escalado automático](ec2-auto-scaling-health-checks.md).
  + Interrupciones de instancias de spot Las instancias de spot se terminan cuando la capacidad ya no está disponible o cuando el precio de spot supera el precio máximo. 
  + Termina una reserva de bloques de capacidad. Amazon EC2 recupera las instancias del bloque de capacidad incluso si están protegidas contra la reducción horizontal.
  + Terminación manual mediante el comando de `terminate-instance-in-auto-scaling-group`. Para obtener más información, consulte [Finalización de una instancia en su grupo de escalado automático (AWS CLI)](ec2-auto-scaling-scaling-manually.md#terminate-an-instance-aws-cli).
  + La terminación manual mediante la consola de Amazon EC2, los comandos de la CLI y las operaciones de API. Para proteger las instancias de Auto Scaling frente a la terminación manual, habilite la protección frente a la terminación de Amazon EC2. (Esto no impide que Amazon EC2 Auto Scaling termine las instancias o la terminación manual mediante el comando `terminate-instance-in-auto-scaling-group`). Para obtener información sobre cómo habilitar la protección contra la terminación de Amazon EC2 en una plantilla de lanzamiento, consulte [Creación de una plantilla de lanzamiento mediante la configuración avanzada](advanced-settings-for-your-launch-template.md).

## Cambio en la protección contra la reducción horizontal para un grupo de escalado automático
<a name="instance-protection-group"></a>

Puede habilitar o desactivar la configuración de protección frente a la reducción horizontal de instancias para un grupo de escalado automático. Al habilitarla, todas las instancias nuevas que lance el grupo tendrán habilitada la protección contra la reducción horizontal de instancias.

La activación o desactivación de esta configuración para un grupo de escalado automático no afecta a las instancias existentes.

------
#### [ Console ]

**Cómo habilitar la protección contra la reducción horizontal para un grupo de escalado automático nuevo**  
Al crear el grupo de escalado automático, en la página **Configurar políticas de escalado y tamaño de grupo**, en **Protección de reducción horizontal de instancias**, seleccione la casilla **Habilitar la protección contra la reducción horizontal de instancias**.

**Cómo habilitar o deshabilitar la protección contra la reducción horizontal para un grupo existente**

1. Abra la consola Amazon EC2 en [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)y seleccione **Auto Scaling Groups** en el panel de navegación.

1. Seleccione la casilla situada junto al grupo de escalado automático.

   Se abre un panel dividido en la parte inferior de la página.

1. En la pestaña **Details (Detalles)** elija **(Advanced configurations) Configuraciones avanzadas**, **Edit (Editar)**.

1. Para la **protección contra la reducción horizontal de instancias**, active o desactive la casilla **Habilitar la protección contra la reducción horizontal de instancias** para activar o desactivar esta opción según sea necesario.

1. Elija **Actualizar**.

------
#### [ AWS CLI ]

**Cómo habilitar la protección contra la reducción horizontal para un grupo de escalado automático nuevo**  
Utilice el siguiente comando [create-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/create-auto-scaling-group.html) para habilitar la protección de escalado descendente de instancias.

```
aws autoscaling create-auto-scaling-group --auto-scaling-group-name my-asg --new-instances-protected-from-scale-in ...
```

**Cómo habilitar la protección contra la reducción horizontal para un grupo existente**  
Usa el siguiente [update-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/update-auto-scaling-group.html)comando para habilitar la protección de escalado interno de instancias para el grupo de Auto Scaling especificado.

```
aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg --new-instances-protected-from-scale-in
```

**Cómo deshabilitar la protección contra la reducción horizontal para un grupo existente**  
Utilice el siguiente comando para desactivar la protección de reducción horizontal de instancias para el grupo especificado.

```
aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg --no-new-instances-protected-from-scale-in
```

------

## Cambio en la protección frente a la reducción horizontal de una instancia
<a name="instance-protection-instance"></a>

De forma predeterminada, una instancia obtiene la configuración de protección frente a la reducción horizontal de instancias de su grupo de escalado automático. Sin embargo, puede habilitar o deshabilitar la protección contra la reducción horizontal de instancias para instancias individuales luego de lanzarlas.

------
#### [ Console ]

**Cómo habilitar o deshabilitar la protección contra la reducción horizontal para una instancia**

1. Abra la consola Amazon EC2 en [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)y seleccione **Auto Scaling Groups** en el panel de navegación.

1. Seleccione la casilla situada junto al grupo de escalado automático.

   Se abre un panel dividido en la parte inferior de la página. 

1. En la pestaña **Instance management (Administración de instancias)**, en **Instances (Instancias)**, seleccione una instancia.

1. Para habilitar la protección de reducción horizontal de instancias, elija **Acciones**, **Establecer protección de reducción horizontal**. Cuando se lo pidan, seleccione **Establecer protección de reducción horizontal**.

1. Para deshabilitar la protección de reducción horizontal de instancias, seleccione **Acciones**, **Eliminar protección de reducción horizontal**. Cuando se lo pidan, seleccione **Eliminar protección de reducción horizontal**.

------
#### [ AWS CLI ]

**Cómo habilitar la protección contra la reducción horizontal para una instancia**  
Utilice el siguiente comando [set-instance-protection](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/set-instance-protection.html) para habilitar la protección de escalado descendente de instancias para la instancia especificada.

```
aws autoscaling set-instance-protection --instance-ids i-5f2e8a0d --auto-scaling-group-name my-asg --protected-from-scale-in
```

**Cómo deshabilitar la protección contra la reducción horizontal para una instancia**  
Utilice el siguiente comando para desactivar la protección de reducción horizontal de instancias para la instancia especificada.

```
aws autoscaling set-instance-protection --instance-ids i-5f2e8a0d --auto-scaling-group-name my-asg --no-protected-from-scale-in
```

------

**nota**  
Recuerde que la protección frente a la reducción horizontal de instancias no garantiza que las instancias no se terminen en caso de error humano; por ejemplo, si alguien termina manualmente una instancia mediante la consola de Amazon EC2 o la AWS CLI. Para proteger la instancia de una terminación accidental, puede utilizar la protección frente a la terminación de Amazon EC2. Sin embargo, incluso con la protección frente a la terminación y la protección frente a la reducción horizontal de instancias habilitadas, los datos guardados en el almacenamiento de instancias pueden perderse si una comprobación de estado determina que una instancia no está en buen estado o si el grupo se elimina accidentalmente. Al igual que en cualquier entorno, una práctica recomendada es realizar copias de seguridad de sus datos con frecuencia o cuando sea apropiado para los requisitos de continuidad de la empresa. 

# Diseño de aplicaciones para gestionar sin problemas la terminación de instancias
<a name="gracefully-handle-instance-termination"></a>

 En este tema se describen las funciones que puede utilizar para impedir que su grupo de Amazon EC2 Auto Scaling cancele las instancias de Amazon EC2 que aún no están listas para finalizar. De forma predeterminada, Auto Scaling no tiene visibilidad de las aplicaciones que se ejecutan en sus instancias. Puede finalizar las instancias antes de que la aplicación pueda cerrar o completar las tareas asignadas sin problemas. Estas funciones le dan tiempo a la aplicación para completar el trabajo en curso, transferir el estado o realizar una limpieza antes de que finalice la instancia. Puede utilizarlas individualmente o en combinación, en función de los requisitos de la aplicación. 

 Estas funciones son especialmente útiles para las cargas de trabajo con estado, en las que cada instancia de la flota contiene datos, trabajos o estados diferentes a los de otras instancias. La finalización de las instancias activas sin un cierre correcto puede provocar que los trabajos que se estén ejecutando durante mucho tiempo se reinicien desde el principio, se reduzca la redundancia o la pérdida de datos y se interrumpan las transacciones o los cálculos en curso. Para cerrar correctamente una instancia con estado, su carga de trabajo debe agotarse (completando todos los trabajos actualmente asignados) o transferirse (mover los trabajos, los datos o la configuración a otra instancia activa). 

**Topics**
+ [Enlaces de ciclo de vida de terminación](#gracefully-handle-instance-termination-lifecycle-hooks)
+ [Protección contra la reducción horizontal de instancias](#gracefully-handle-instance-termination-scale-in-protection)
+ [Política de terminación personalizada](#gracefully-handle-instance-termination-custom-termination-policy)
+ [Política del ciclo de vida de las](#gracefully-handle-instance-termination-instance-lifecycle-policy)
+ [Suspenda las terminaciones por completo](#gracefully-handle-instance-termination-suspend-terminate)
+ [Limitaciones](#gracefully-handle-instance-termination-limitations)
+ [Ejemplos de escenarios de](#gracefully-handle-instance-termination-examples)

## Enlaces de ciclo de vida de terminación
<a name="gracefully-handle-instance-termination-lifecycle-hooks"></a>

 Un enlace del ciclo de vida de terminación prolonga la vida útil de la instancia de Amazon EC2 que ya está seleccionada para la terminación. Proporciona tiempo adicional para completar el trabajo en curso asignado actualmente a la instancia o para guardar el progreso y transferir el trabajo a otra instancia. 

 En el caso de muchas cargas de trabajo, una interrupción del ciclo de vida de terminación puede ser suficiente para cerrar sin problemas una aplicación en una instancia seleccionada para su finalización. Este es el enfoque que se hace todo lo posible y no se puede utilizar para impedir la rescisión si se abandona una acción relacionada con el ciclo de vida de la rescisión. Si su carga de trabajo tiene una baja tolerancia a los fallos en las acciones del ciclo de vida de las [instancias, configure las políticas del ciclo](https://docs.aws.amazon.com/autoscaling/ec2/userguide/instance-lifecycle-policy.html) de vida de las instancias en combinación con los enlaces del ciclo de vida de las terminaciones para conservar las instancias. 

 Para usar un enlace del ciclo de vida de las terminaciones, debes saber cuándo se selecciona una instancia para su terminación. Tiene dos formas de saberlo: 


| Opción | Description (Descripción) | Más adecuado para | Enlace a la documentación | 
| --- | --- | --- | --- | 
| Dentro de la instancia |  El Servicio de metadatos de instancias (IMDS) es un punto de conexión seguro en el que se puede sondear el estado de una instancia directamente desde la instancia. Si los metadatos arrojan Terminated, entonces está previsto que la instancia sea terminada.  |  Aplicaciones en las que debe realizar una acción en la instancia antes de que se cierre.  |  [Recupera el estado del ciclo de vida objetivo](https://docs.aws.amazon.com/autoscaling/ec2/userguide/retrieving-target-lifecycle-state-through-imds.html)  | 
| Fuera de la instancia |  Cuando una instancia finaliza, se genera una notificación de evento. Puede crear reglas con Amazon EventBridge, Amazon SQS, Amazon SNS AWS Lambda o para capturar estos eventos e invocar una respuesta, por ejemplo, con una función Lambda.  |  Aplicaciones que deben realizar acciones fuera de la instancia.  |  [Configure un objetivo de notificación](https://docs.aws.amazon.com/autoscaling/ec2/userguide/prepare-for-lifecycle-notifications.html#lifecycle-hook-notification-target)  | 

 Para usar un enlace de ciclo de vida, también necesitas saber cuándo la instancia está lista para finalizar por completo. Amazon EC2 Auto Scaling no finalizará la instancia hasta que reciba [ CompleteLifecycleAction](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_CompleteLifecycleAction.html)una llamada a la API o hasta que se agote el tiempo de espera, lo que ocurra primero. 

 De forma predeterminada, una instancia puede seguir ejecutándose durante una hora (tiempo de espera) debido a un enlace de ciclo de vida de terminación. Puede configurar el tiempo de espera predeterminado si una hora no es suficiente para completar la acción del ciclo de vida. Cuando una acción del ciclo de vida esté en curso, puede extender el tiempo de espera con llamadas a la API. [ RecordLifecycleActionHeartbeat](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_RecordLifecycleActionHeartbeat.html) 

 Para obtener más información, consulte [Enlaces de ciclo de vida de Amazon EC2 Auto Scaling](lifecycle-hooks.md). 

## Protección contra la reducción horizontal de instancias
<a name="gracefully-handle-instance-termination-scale-in-protection"></a>

 Puedes usar la protección escalable de instancias para controlar qué instancias se seleccionan para su cierre durante los eventos de escalamiento interno, especialmente para evitar que se termine una instancia que está procesando activamente un trabajo de larga duración. Por ejemplo, cuando se ejecutan cargas de trabajo en contenedores, es habitual querer proteger todas las instancias y eliminar la protección solo para las instancias que no tienen tareas actuales o programadas. Las instancias pueden seguir buscando nuevos trabajos y volver a habilitar la protección cuando se les asignen nuevos trabajos. 

 Puede habilitar la protección escalable a nivel de grupo e instancia de Auto Scaling. Al habilitar la protección escalable en el nivel de grupo de Auto Scaling, solo se protegen las instancias nuevas cuando se crean. En el caso de las instancias existentes, puede habilitar la protección de forma individual. 

 Las aplicaciones pueden configurar la protección desde las propias instancias o desde un plano de control centralizado que gestiona si cada instancia es finalizable. Recomendamos el enfoque centralizado para flotas grandes o cuando sea necesario cambiar la protección con frecuencia, ya que permite realizar llamadas por lotes [ SetInstanceProtection](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_SetInstanceProtection.html)y evitar problemas de limitación de la API. 

 Para obtener más información, consulte [Uso de la protección frente a la reducción horizontal de instancias para controlar la terminación de instancias](ec2-auto-scaling-instance-protection.md). 

## Política de terminación personalizada
<a name="gracefully-handle-instance-termination-custom-termination-policy"></a>

 Al igual que la protección escalable de instancias, una política de terminación personalizada le ayuda a evitar que su grupo de Amazon EC2 Auto Scaling termine instancias EC2 específicas. Las instancias que no estén en buen estado pueden cancelarse independientemente de su política de cancelación personalizada. 

 Su grupo de Auto Scaling usa una política de terminación predeterminada para determinar qué instancias de Amazon EC2 termina primero. Si quieres tener más control sobre qué instancias terminan primero, puedes implementar una política de terminación personalizada mediante una función Lambda. Auto Scaling llama a esta función siempre que necesite seleccionar una instancia para su terminación y solo terminará las instancias que devuelva la función. Si la función produce un error, se agota el tiempo de espera o devuelve una lista vacía, Auto Scaling no termina ninguna instancia a menos que la instancia no esté en buen estado. 

 Una política de terminación personalizada resulta útil cuando la aplicación puede identificar qué instancias están inactivas o qué instancias se pueden terminar de forma segura. Por lo general, esto requiere un plano de control que haga un seguimiento de la carga de trabajo en todo el grupo. 

 Para obtener más información, consulte [Creación de una política de terminación personalizada con Lambda](lambda-custom-termination-policy.md). 

## Política del ciclo de vida de las
<a name="gracefully-handle-instance-termination-instance-lifecycle-policy"></a>

 Las políticas del ciclo de vida de las instancias brindan protección contra las terminaciones de Amazon EC2 Auto Scaling cuando se abandona una acción del ciclo de vida de la terminación. A diferencia de los enlaces del ciclo de vida por sí solos, las políticas del ciclo de vida de las instancias están diseñadas para garantizar que las instancias pasen a un estado retenido cuando los procedimientos de cierre correctos no se completen correctamente. 

 Cuando Auto Scaling selecciona una instancia para su finalización, se invocan los enlaces del ciclo de vida de terminación configurados y la aplicación inicia procedimientos de cierre sin problemas. Si las acciones del ciclo de vida de terminación se completan correctamente`CONTINUE`, la instancia finaliza normalmente. Sin embargo, si se abandona una acción de cancelación del ciclo de vida por cualquier motivo, la política del ciclo de vida de la instancia pasa la instancia a un estado retenido en lugar de finalizarla. Las instancias retenidas no cuentan para la capacidad deseada de su grupo de Auto Scaling, por lo que las instancias de reemplazo se lanzan automáticamente. Se le cobrarán los cargos estándar de Amazon EC2 tanto por la instancia retenida como por su reemplazo hasta que cancele manualmente la instancia retenida mediante [ TerminateInstanceInAutoScalingGroup](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_TerminateInstanceInAutoScalingGroup.html)la API. 

 Para usar esta función, debe configurar una política de ciclo de vida de la instancia con el activador de `TerminateHookAbandon` retención establecido en`retain`, así como al menos un enlace del ciclo de vida de la terminación. Dado que las instancias retenidas conllevan costos continuos de Amazon EC2 y requieren una acción manual, la supervisión es fundamental. Debería habilitar CloudWatch métricas como estas `GroupTerminatingRetainedInstances` y crear CloudWatch alarmas que le avisen cuando las instancias entren en estados de retención. 

 Para obtener más información, consulte [Controle la retención de instancias con políticas de ciclo de vida de las instancias](instance-lifecycle-policy.md). 

## Suspenda las terminaciones por completo
<a name="gracefully-handle-instance-termination-suspend-terminate"></a>

 Si necesita un control total sobre todas las terminaciones de instancias EC2 de su grupo Amazon EC2 Auto Scaling, suspenda el proceso. `Terminate` Solo recomendamos usar esta opción si las opciones anteriores no le ofrecen el control que necesita para su servicio. Al [ SuspendProcesses](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_SuspendProcesses.html)solicitar la suspensión del `Terminate` proceso, evitas que Auto Scaling intente cancelarlo por cualquier motivo, excepto por aquellos iniciados por una solicitud del usuario a la [ TerminateInstanceInAutoScalingGroup](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_TerminateInstanceInAutoScalingGroup.html)API. 

 Para obtener más información, consulte [Suspensión y reanudación de procesos de Amazon EC2 Auto Scaling](as-suspend-resume-processes.md). 

## Limitaciones
<a name="gracefully-handle-instance-termination-limitations"></a>

**importante**  
 Al diseñar su aplicación en Amazon EC2 Auto Scaling para gestionar correctamente las terminaciones de instancias, tenga en cuenta las siguientes limitaciones. 

### Las instancias en mal estado eluden algunas protecciones
<a name="gracefully-handle-instance-termination-unhealthy-bypass"></a>

 Si una instancia está en mal estado, Amazon EC2 Auto Scaling empezará a cancelarla incluso si cuenta con políticas de terminación personalizadas o protección escalable. La única forma de evitar que Auto Scaling sustituya las instancias en mal estado es suspender el `Terminate` proceso `HealthCheck``ReplaceUnhealthy`, o. Puede usar enlaces de ciclo de vida y una política de ciclo de vida de la instancia para permitir que la aplicación se cierre correctamente o copiar cualquier dato que necesite recuperar antes de que finalice la instancia en mal estado. 


| Característica | Controla las instancias en buen estado | Controla las instancias en mal estado | 
| --- | --- | --- | 
| Políticas de rescisión personalizadas | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/autoscaling/ec2/userguide/images/success_icon.png) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/autoscaling/ec2/userguide/images/negative_icon.png) No | 
| Protección de reducción horizontal | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/autoscaling/ec2/userguide/images/success_icon.png) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/autoscaling/ec2/userguide/images/negative_icon.png) No | 
|  Suspender HealthCheck o Terminate procesar ReplaceUnhealthy  | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/autoscaling/ec2/userguide/images/success_icon.png) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/autoscaling/ec2/userguide/images/success_icon.png) Sí | 
| Enlaces de ciclo de vida | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/autoscaling/ec2/userguide/images/success_icon.png) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/autoscaling/ec2/userguide/images/success_icon.png) Sí | 
| Política del ciclo de vida de las | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/autoscaling/ec2/userguide/images/success_icon.png) Sí | ![\[alt text not found\]](http://docs.aws.amazon.com/es_es/autoscaling/ec2/userguide/images/success_icon.png) Sí | 

### Los enlaces del ciclo de vida por sí solos no garantizan un cierre correcto
<a name="gracefully-handle-instance-termination-hooks-no-guarantee"></a>

 De forma predeterminada, los enlaces del ciclo de vida de las terminaciones funcionan en función del mejor esfuerzo posible. Si se suspende una acción del ciclo de vida de terminación, Amazon EC2 Auto Scaling procederá a terminar la instancia inmediatamente. Puede combinar los enlaces del ciclo de vida de la terminación con una política del ciclo de vida de la instancia para conservar las instancias cuando se abandonen las acciones relacionadas con el ciclo de vida de la terminación. Con esta combinación: 
+  Los enlaces del ciclo de vida de terminación intentan cerrar correctamente la aplicación después de que Auto Scaling active la finalización de una instancia y se complete el drenaje de cualquier balanceador de carga de Elastic Load Balancing configurado. 
+  Si se suspende una acción del ciclo de vida de terminación por cualquier motivo, la instancia pasa a un estado retenido en lugar de cerrarse. 
+  La instancia retenida permanece en su estado actual de Amazon EC2, lo que le permite completar manualmente los procedimientos de cierre o investigar el error. 
+  Puede finalizar manualmente las instancias retenidas llamando a la [ TerminateInstanceInAutoScalingGroup](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_TerminateInstanceInAutoScalingGroup.html)API después de completar las acciones necesarias. 

 Para obtener más información, consulte [Controle la retención de instancias con políticas de ciclo de vida de las instancias](instance-lifecycle-policy.md). 

### En algunos casos, las opciones del mercado pueden interrumpirse con un aviso limitado
<a name="gracefully-handle-instance-termination-spot-interruptions"></a>

 Si utiliza opciones del mercado de instancias, como instancias puntuales y reservas de capacidad interrumpible en su grupo de Auto Scaling, Amazon EC2 puede interrumpir y recuperar sus instancias en cualquier momento. Estas interrupciones eluden todos los mecanismos de protección de Amazon EC2 Auto Scaling, incluidos: 
+ Enlaces de ciclo de vida de terminación
+ Protección contra la reducción horizontal de instancias
+ Políticas de rescisión personalizadas
+ Políticas de ciclo de vida de las
+ Procesos suspendidos

 Cuando una instancia puntual recibe una notificación de interrupción, dispone de aproximadamente dos minutos para realizar tareas de cierre sin problemas. Si bien puede utilizar los enlaces del ciclo de vida de terminación para responder a las interrupciones de las instancias puntuales, la instancia se cancelará forzosamente al final del período de dos minutos, incluso si el enlace del ciclo de vida aún está en curso. Las políticas del ciclo de vida de las instancias tampoco pueden evitar las interrupciones de las instancias puntuales. 

 Para obtener más información sobre la gestión de las interrupciones de instancias puntuales, consulte [Interrupciones de instancias puntuales](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html) y [prácticas recomendadas para Amazon EC2 Spot en la Guía](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-best-practices.html) del usuario de Amazon *EC2*. 

### Las terminaciones directas de Amazon EC2 eluden todas las protecciones
<a name="gracefully-handle-instance-termination-direct-ec2-api"></a>

 Si finaliza una instancia de su grupo de Auto Scaling directamente con la [ TerminateInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TerminateInstances.html)API de Amazon EC2, la terminación omite todos los mecanismos de protección de Auto Scaling de Amazon EC2. 

 Para terminar las instancias de su grupo de Auto Scaling y, al mismo tiempo, respetar las protecciones configuradas, utilice la [ TerminateInstanceInAutoScalingGroup](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_TerminateInstanceInAutoScalingGroup.html)API en su lugar. 

## Ejemplos de escenarios de
<a name="gracefully-handle-instance-termination-examples"></a>

 Cuando utiliza Amazon EC2 Auto Scaling, puede elegir la cantidad de gestión de flotas que Auto Scaling gestiona en su nombre en lugar del control directo que conserva sobre las decisiones de cancelación de instancias de EC2. Cuanto más sensible sea su carga de trabajo a las cancelaciones de instancias, más control querrá conservar. En los siguientes ejemplos, se describen las cargas de trabajo con diferentes niveles de tolerancia y las configuraciones recomendadas: 

### Ejemplo 1: Nodos de bases de datos distribuidas (tolerancia baja)
<a name="gracefully-handle-instance-termination-example-database"></a>

 Ejecuta una base de datos distribuida en la que cada instancia de EC2 contiene una partición de los datos con un factor de replicación de 3. La pérdida de varias instancias que contienen réplicas de la misma partición podría provocar la pérdida de datos o hacer que la partición no esté disponible. 

 **Desafío:** Auto Scaling puede terminar las instancias más rápido de lo que se pueden volver a replicar los datos en otros nodos, y las terminaciones pueden reducir la capacidad por debajo de lo necesario para mantener el factor de replicación. 

Tenga en cuenta las siguientes configuraciones:
+  Habilite la [protección escalable de instancias en](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-instance-protection.html) todas las instancias de la base de datos; elimínela mediante programación solo después de confirmar que los datos se han replicado de forma segura en otros lugares. 
+  Configure los [enlaces del ciclo de vida de las terminaciones](https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html) con tiempos de espera prolongados en combinación con una política de ciclo de vida de las instancias para permitir que se complete la transferencia de datos. 
+  Establezca una [política de mantenimiento de instancias](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-instance-maintenance-policy.html) con un porcentaje mínimo de mantenimiento del 100% para mantener la capacidad requerida. 

### Ejemplo 2: Procesamiento de trabajos de larga duración (tolerancia media)
<a name="gracefully-handle-instance-termination-example-job-processing"></a>

 Tiene una cola de Amazon SQS que recopila los mensajes entrantes para tareas de larga duración. Cuando llega un mensaje nuevo, una instancia de EC2 lo recupera e inicia un trabajo que tarda 3 horas en procesarse. A medida que la cola crece, Auto Scaling agrega instancias en función de sus políticas de escalado. A medida que la cola se reduce, Auto Scaling termina las instancias. 

 **Desafío:** Auto Scaling podría terminar una instancia que lleva 3 horas procesando un trabajo en lugar de una instancia inactiva. El trabajo se puede reiniciar en otra instancia, pero se pierde un progreso significativo. 

Tenga en cuenta las siguientes configuraciones:
+  Configure una [política de terminación personalizada](https://docs.aws.amazon.com/autoscaling/ec2/userguide/lambda-custom-termination-policy.html) que priorice primero la finalización de las instancias inactivas. 
+  Utilice los [ganchos del ciclo de vida de terminación](https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html) para permitir que se completen los trabajos en curso. 
+  Activa la [protección escalable de instancias](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-instance-protection.html) mediante programación cuando una instancia inicie un trabajo y elimínala cuando se complete el trabajo. 

### Ejemplo 3: Flota de trabajadores para entornos de prueba (tolerancia alta)
<a name="gracefully-handle-instance-termination-example-test"></a>

 Usted ejecuta una flota de instancias EC2 que ejecutan pruebas automatizadas, trabajos en CI/CD proceso o cargas de trabajo de desarrollo. Estas instancias de trabajo extraen tareas de una cola y los resultados de las pruebas se pueden regenerar si un trabajo falla. 

 **Desafío:** es posible que los trabajos de prueba se interrumpan durante los eventos de escalado, pero dado que las pruebas se pueden volver a intentar sin ningún impacto, es mejor optimizar los costos y la simplicidad en lugar de una disponibilidad sin interrupciones. 

Tenga en cuenta las siguientes configuraciones:
+  Utilice los [ganchos del ciclo de vida de terminación](https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html) para permitir que se completen las solicitudes durante el vuelo. 
+  Considere la posibilidad de utilizar [instancias puntuales](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html) con una estrategia de asignación de capacidad optimizada para reducir aún más los costos. 