Amazon Elastic Compute Cloud
Guía del usuario de instancias de Linux

Interrupciones de instancia de spots

La demanda de Instancias de spot puede variar enormemente de un momento a otro, y la disponibilidad de las Instancias de spot también puede variar significativamente en función de cuántas instancias EC2 no utilizadas haya disponibles. Siempre es posible que su instancia de spot se vea interrumpida. Por lo tanto, debe asegurarse de que su aplicación esté preparada para una interrupción de las instancia de spots.

A continuación se enumeran las posibles razones por las que Amazon EC2 puede interrumpir las Instancias de spot:

  • Precio: el precio de spot es superior a su precio máximo.

  • Capacidad: si no hay suficientes instancias EC2 no utilizadas para satisfacer la demanda de Instancias de spot, Amazon EC2 interrumpe las Instancias de spot. El orden en que se interrumpen las instancias está determinado por Amazon EC2.

  • Restricciones: si su solicitud incluye una restricción como un grupo de lanzamiento o un grupo de zonas de disponibilidad, estas Instancias de spot se terminan como un grupo cuando ya no se puede satisfacer la restricción.

No se puede interrumpir una instancia a petición que se ha especificado en una Flota de spot.

Comportamiento de la interrupción

Puede especificar si Amazon EC2 debe hibernar, detener o terminar las Instancias de spot cuando se interrumpen. Puede elegir el comportamiento de interrupción que mejor se adapte a sus necesidades. El comportamiento predeterminado es terminar las Instancias de spot cuando se interrumpen. Para cambiar el comportamiento de interrupción, elija una opción en Interruption behavior en la consola o InstanceInterruptionBehavior en la configuración o la plantilla de lanzamiento.

Cómo detener las Instancias de spot interrumpidas

Puede cambiar el comportamiento para que Amazon EC2 detenga las Instancias de spot cuando se interrumpan si se cumplen los siguientes requisitos.

Requisitos

  • Para una solicitud de instancia de spot, el tipo debe ser persistent, no one-time. No puede especificar un grupo de lanzamiento en la solicitud de instancia de spot.

  • Para una solicitud de Flota de spot, el tipo debe ser maintain, no request.

  • El volumen raíz debe ser un volumen de EBS, no un volumen de almacén de instancias.

Una vez detenida una instancia de spot por el servicio de spot, solo dicho servicio la puede reiniciar y solo con la misma configuración de lanzamiento. La instancia de spot se iniciará cuando haya capacidad disponible que coincida con la zona de disponibilidad y el tipo de instancia de una instancia de spot detenida. Con una Flota de spot, si hay capacidad disponible solo con una zona de disponibilidad o tipo de instancia distintos, la Flota de spot lanza una nueva instancia de spot usando la configuración de lanzamiento con capacidad disponible.

Mientras una instancia de spot está detenida, puede modificar algunos de sus atributos, pero no el tipo de instancia. Si separa o elimina un volumen de EBS, este no se adjunta cuando se inicia la instancia de spot. Si separa el volumen raíz y el servicio de spot intenta iniciar la instancia de spot, la instancia dará un error al iniciarse y el servicio de spot terminará la instancia detenida.

Puede terminar una instancia de spot mientras está detenida. Si cancela una solicitud de spot o una Flota de spot, el servicio de spot termina todas las Instancias de spot asociadas que se han detenido.

Mientras una instancia de spot está detenida, solo se le cobran los volúmenes de EBS, que se conservan. Con las Flota de spots, si tiene muchas instancias detenidas, puede superar el límite del número de volúmenes de EBS de su cuenta.

Cómo hibernar las Instancias de spot interrumpidas

Puede cambiar el comportamiento para que Amazon EC2 hiberne las Instancias de spot cuando se interrumpan si se cumplen los siguientes requisitos.

Requisitos

  • Para una solicitud de instancia de spot, el tipo debe ser persistent, no one-time. No puede especificar un grupo de lanzamiento en la solicitud de instancia de spot.

  • Para una solicitud de Flota de spot, el tipo debe ser maintain, no request.

  • El volumen raíz debe ser un volumen de EBS, no un volumen de almacén de instancias, y debe ser lo suficientemente amplio para almacenar la memoria (RAM) de la instancia durante la hibernación.

  • Las siguientes instancias son compatibles: C3, C4, C5, M4, M5, R3 y R4, con menos de 100 GB de memoria.

  • Los siguientes sistemas operativos son compatibles: Amazon Linux 2, Amazon Linux AMI, Ubuntu con un kernel de Ubuntu ajustado para AWS (linux-aws) posterior a 4.4.0-1041 y Windows Server 2008 R2 o posterior.

  • Instale el agente de hibernación en un sistema operativo compatible o use una de las siguientes AMI, que ya incluyen el agente:

    • Amazon Linux 2

    • Amazon Linux AMI 2017.09.1 o posterior

    • Ubuntu Xenial 16.04 20171121 o posterior

    • Windows Server 2008 R2 AMI 2017.11.19 o posterior

    • Windows Server 2012 o Windows Server 2012 R2 AMI 2017.11.19 o posterior

    • Windows Server 2016 AMI 2017.11.19 o posterior

  • Comience el agente. Se recomienda utilizar los datos de usuario para comenzar el agente en un arranque de instancia. También puede comenzar el agente manualmente.

Recomendación

  • Recomendamos que utilice un volumen de EBS cifrado como volumen raíz, ya que la memoria de la instancia se almacena en el volumen raíz durante la hibernación. Esto asegura que el contenido de la memoria (RAM) esté cifrado cuando los datos estén en reposo en el volumen y se esté moviendo entre la instancia y el volumen. Si su AMI no tiene un volumen raíz cifrado, puede copiarlo a una nueva AMI y solicitar su cifrado. Para obtener más información, consulte Amazon EBS Encryption y Copiar una AMI.

Cuando el servicio de spot hiberna una instancia de spot, los volúmenes de EBS se conservan y la memoria (RAM) de la instancia se conserva en el volumen raíz. Las direcciones IP privadas de la instancia también se conservan. Los volúmenes de almacenamiento de la instancia y las direcciones IP públicas, a excepción de las direcciones IP elásticas, no se conservan. Mientras la instancia hiberne, solo se le cobran los volúmenes de EBS. Con las Flota de spots, si tiene muchas instancias hibernadas, puede superar el límite del número de volúmenes de EBS de su cuenta.

El agente activa la hibernación del sistema operativo cuando la instancia recibe una señal del servicio de spot. Si el agente no está instalado, el sistema operativo subyacente no admite hibernación o no hay suficiente espacio en el volumen para ahorrar memoria de la instancia, ocurre un error en la hibernación y, en su lugar, el servicio de spot detiene la instancia.

Cuando el servicio de spot hiberna una instancia de spot, usted recibe un aviso de interrupción, pero no tiene dos minutos antes de que se interrumpa la instancia de spot. La hibernación comienza inmediatamente. Es probable que se produzca un error en las comprobaciones de estado mientras la instancia esté en proceso de hibernación. Cuando se completa el proceso de hibernación, el estado de la instancia es stopped.

Una vez que el servicio de spot hiberna una instancia de spot, solo dicho servicio puede reanudarla. El servicio de spot reanuda la instancia tan pronto como haya capacidad disponible con un precio de spot inferior al precio máximo especificado.

Para obtener más información, consulte Preparación para la hibernación de una instancia.

Preparación para las interrupciones

Estas son algunas prácticas recomendadas cuando se usan Instancias de spot:

  • Use el precio máximo predeterminado, que es el precio bajo demanda.

  • Asegúrese de que su instancia está lista para ejecutarse en cuanto se atienda la solicitud usando una imagen de máquina de Amazon (AMI) que contiene la configuración de software requerida También puede utilizar datos de usuario para ejecutar comandos al iniciarla.

  • Almacene los datos importantes periódicamente en un lugar que no se vea afectado cuando termine la instancia de spot. Por ejemplo, puede utilizar Amazon S3, Amazon EBS o DynamoDB.

  • Divida el trabajo en pequeñas tareas (mediante Grid, Hadoop o una arquitectura basada en colas), o use puntos de comprobación de forma que pueda grabar su trabajo con frecuencia.

  • Use avisos de interrupción de instancia de spots para monitorizar el estado de sus instancias de spot.

  • Aunque procuramos proporcionar esta advertencia lo antes posible, puede ocurrir que su instancia de spot se termine antes de que esta advertencia esté disponible. Pruebe su aplicación para asegurarse de que administra correctamente una terminación inesperada de las instancias, incluidas pruebas de avisos de interrupción. Para realizar la prueba, puede ejecutar la aplicación con una instancia a petición y, a continuación, forzar la terminación de la instancia a petición usted mismo.

Preparación para la hibernación de una instancia

Debe instalar un agente de hibernación en la instancia, salvo que use una AMI que ya incluya el agente. Debe ejecutar el agente al arrancar la instancia, independientemente de que esté incluido en la AMI o de que lo haya instalado usted mismo.

Los siguientes procedimientos le ayudarán a preparar una instancia de Linux. Si desea obtener instrucciones para preparar una instancia de Windows, consulte Preparación para la hibernación de una instancia en la Guía del usuario de Amazon EC2 para instancias de Windows.

Para lanzar una instancia de Amazon Linux

  1. Verifique que su kernel admite hibernación y actualícelo de ser necesario.

  2. Si su AMI no incluye el agente, instálelo mediante el siguiente comando:

    sudo yum update; sudo yum install hibagent
  3. Añada lo siguiente a los datos de usuario:

    #!/bin/bash /usr/bin/enable-ec2-spot-hibernation

Para preparar una instancia de Ubuntu

  1. Si su AMI no incluye el agente, instálelo mediante el siguiente comando:

    sudo apt-get install hibagent
  2. Añada lo siguiente a los datos de usuario:

    #!/bin/bash /usr/bin/enable-ec2-spot-hibernation

Avisos de interrupción de las instancia de spots

La mejor forma de protegerse frente a una interrupción de instancia de spot es diseñar su aplicación con tolerancia a errores. Asimismo, puede beneficiarse de los avisos de interrupción de instancia de spots, que envían una advertencia dos minutos antes de que Amazon EC2 tenga que interrumpir una instancia de spot. Le recomendamos que compruebe estas advertencias cada cinco segundos.

Esta advertencia estará disponible como evento de CloudWatch y como elemento en los metadatos de instancia de la instancia de spot.

EC2 instancia de spot Interruption Warning

Cuando Amazon EC2 interrumpe la instancia de spot, emite un evento que Amazon CloudWatch Events puede detectar. Para obtener más información, consulte la Guía del usuario de Amazon CloudWatch Events.

El siguiente es un ejemplo de evento de interrupción de una instancia de spot. Los valores posibles de instance-action son hibernate, stop y terminate.

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Spot Instance Interruption Warning", "source": "aws.ec2", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-2", "resources": ["arn:aws:ec2:us-east-2:123456789012:instance/i-1234567890abcdef0"], "detail": { "instance-id": "i-1234567890abcdef0", "instance-action": "action" } }

instance-action

Si el servicio de spot ha marcado una instancia de spot para hibernarla, detenerla o terminarla, el elemento instance-action está presente en los metadatos de la instancia. De lo contrario, no está presente. Puede recuperar instance-action del siguiente modo.

[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/spot/instance-action

El elemento instance-action especifica la acción (parar o terminar) y la hora aproximada en UTC a la que se producirá. En el siguiente ejemplo se indica la hora a la que se detendrá esta instancia:

{"action": "stop", "time": "2017-09-18T08:22:00Z"}

En el siguiente ejemplo se indica la hora a la que se terminará esta instancia:

{"action": "terminate", "time": "2017-09-18T08:22:00Z"}

En el siguiente ejemplo se indica que la hibernación ha comenzado inmediatamente:

{"action": "hibernate", "time": "2017-11-28T08:22:00Z"}

Si Amazon EC2 no está preparándose para hibernar, detener o terminar la instancia o si terminó la instancia usted mismo, instance-action no está presente y recibe un mensaje de error HTTP 404.

termination-time

Este elemento se conserva para ofrecer compatibilidad con versiones anteriores. En su lugar, utilice instance-action.

Si el servicio de spot ha marcado una instancia de spot para su terminación, el elemento termination-time está presente en los metadatos de la instancia. De lo contrario, no está presente. Puede recuperar termination-time del siguiente modo.

[ec2-user ~]$ if curl -s http://169.254.169.254/latest/meta-data/spot/termination-time | grep -q .*T.*Z; then echo terminated; fi

El elemento termination-time especifica la hora aproximada, en UTC, a la que la instancia recibirá la señal de cierre. Por ejemplo:

2015-01-05T18:02:00Z

Si Amazon EC2 no está preparándose para terminar la instancia o si terminó la instancia de spot usted mismo, el elemento termination-time no está presente (por lo que recibe un mensaje de error HTTP 404) o contiene un valor que no es un valor de hora.

Si Amazon EC2 no es capaz de terminar la instancia, el estado de la solicitud se establece en fulfilled. Tenga en cuenta que termination-time permanece en los metadatos de la instancia con la hora aproximada original, que ahora ya está en el pasado.