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

Interrupciones de instancia de subastas

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

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

  • 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 instancia de subastas, Amazon EC2 interrumpe las instancia de subastas. El orden en que se interrumpen las instancias lo determina Amazon EC2.

  • Restricciones: si su solicitud incluye una restricción como un grupo de lanzamiento o un grupo de zonas de disponibilidad, estas instancia de subastas 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 subasta.

Comportamiento de la interrupción

Puede especificar si Amazon EC2 debe hibernar, detener o terminar las instancia de subastas cuando se interrumpen. Puede elegir el comportamiento de interrupción que mejor se adapte a sus necesidades. El comportamiento predeterminado es terminar las instancia de subastas 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 instancia de subastas interrumpidas

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

Requisitos

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

  • Para una solicitud de Flota de subasta, 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 subasta por el servicio de spot, solo dicho servicio la puede reiniciar y solo con la misma configuración de lanzamiento. La instancia de subasta se iniciará cuando haya capacidad disponible que coincida con la zona de disponibilidad y el tipo de instancia de una instancia de subasta detenida. Con una Flota de subasta, si hay capacidad disponible solo con una zona de disponibilidad o tipo de instancia distintos, la Flota de subasta lanza una nueva instancia de subasta usando la configuración de lanzamiento con capacidad disponible.

Mientras una instancia de subasta 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 subasta. Si separa el volumen raíz y el servicio de spot intenta iniciar la instancia de subasta, la instancia dará un error al iniciarse y el servicio de spot terminará la instancia detenida.

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

Mientras una instancia de subasta está detenida, solo se le cobran los volúmenes de EBS, que se conservan. Con las Flota de subastas, 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 instancia de subastas interrumpidas

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

Requisitos

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

  • Para una solicitud de Flota de subasta, 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 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 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 subasta, 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 subastas, 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 subasta, usted recibe un aviso de interrupción, pero no tiene dos minutos antes de que se interrumpa la instancia de subasta. 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 subasta, 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 instancia de subastas:

  • 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 subasta. 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 subastas para monitorizar el estado de sus instancias de spot.

  • Aunque procuramos proporcionar esta advertencia lo antes posible, puede ocurrir que su instancia de subasta 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 subastas

La mejor forma de protegerse frente a una interrupción de instancia de subasta es diseñar su aplicación con tolerancia a errores. Asimismo, puede beneficiarse de los avisos de interrupción de instancia de subastas, que envían una advertencia dos minutos antes de que Amazon EC2 tenga que interrumpir una instancia de subasta. 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 en la instancia de subasta.

EC2 instancia de subasta Interruption Warning

Cuando Amazon EC2 interrumpe la instancia de subasta, 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 subasta. 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 subasta para hibernarla, detenerla o terminarla, el elemento instance-action está presente en los metadatos de la instancia. 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"}

termination-time

Si el servicio de spot ha marcado una instancia de subasta para su terminación, el elemento termination-time está presente en los metadatos de la instancia. Este elemento se conserva para ofrecer compatibilidad con versiones anteriores. En su lugar, utilice instance-action. 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.