Amazon Elastic Compute Cloud
User Guide for Linux Instances

Interrupções de Instância spots

A demanda por Instâncias spot pode variar significativamente de um momento para outro, e a disponibilidade das Instâncias spot também pode variar significativamente dependendo de quantas instâncias do EC2 não utilizadas estão disponíveis. É sempre possível que sua Instância spot possa ser interrompida. Portanto, você deve garantir que o aplicativo esteja preparado para uma interrupção de Instância spot.

Um instância sob demanda especificado em uma Frota do EC2 ou Frota spot não pode ser interrompido.

Motivos para interrupção

Veja a seguir os possíveis motivos pelos quais o Amazon EC2 pode interromper Instâncias spot:

  • Preço – o preço spot é maior do que seu preço máximo.

  • Capacidade – se não houver uma quantidade suficiente de instâncias do EC2 não utilizadas para atender à demanda por Instâncias spot, o Amazon EC2 interromperá as Instâncias spot. A ordem em que as instâncias são interrompidas é determinada pelo Amazon EC2.

  • Restrições – se a solicitação incluir uma restrição como um grupo de execução ou um grupo de zonas de disponibilidade, essas Instâncias spot serão encerradas como um grupo quando não for mais possível atender à restrição.

Comportamento da interrupção

Você pode especificar se o Amazon EC2 deve colocar em hibernação, parar ou encerrar as Instâncias spot quando elas são interrompidas. Você pode escolher o comportamento de interrupção que melhor atende às suas necessidades. O padrão é encerrar as Instâncias spot quando elas são interrompidas. Para alterar o comportamento de interrupção, escolha uma opção em Interruption behavior (Comportamento de interrupção) no console ao criar uma solicitação spot ou especifique InstanceInterruptionBehavior na configuração de execução ou no modelo de execução. Para alterar o comportamento de interrupção no console quando estiver criando uma solicitação spot, selecione Maintain target capacity (Manter a capacidade de destino). Ao selecionar essa opção, será exibido Interruption behavior (Comportamento de interrupção) e, então, será possível especificar se o serviço spot encerra, interrompe ou hiberna instâncias spot quando elas são interrompidas.

Como parar Instâncias spot interrompidas

Você pode alterar o comportamento de modo que o Amazon EC2 pare as Instâncias spot quando elas forem interrompidas, caso os seguintes requisitos sejam atendidos:

Requisitos

  • Para uma solicitação de Instância spot, o tipo deve ser persistent. Você não pode especificar um grupo de execução na solicitação de Instância spot.

  • Para uma solicitação de Frota do EC2 ou Frota spot, o tipo deve ser maintain.

  • O volume raiz deve ser um volume do EBS, e não um volume de armazenamento de instâncias.

Depois que uma Instância spot é interrompida pelo serviço spot, somente o serviço spot poderá reiniciar o Instância spot, e a mesma especificação de execução deverá ser usada.

Para uma Instância spot executada por uma solicitação de persistent Instância spot, o serviço spot reiniciará a instância interrompida quando a capacidade está disponível na mesma zona de disponibilidade e para o mesmo tipo de instância que a instância interrompida.

Se as instâncias de Frota do EC2 e Frota spot forem interrompidas e a frota for do tipo maintain, o serviço spot executará instâncias de substituição para manter a capacidade desejada. O serviço spot localiza os melhores grupos com base na estratégia de alocação especificada (lowestPrice, diversified ou InstancePoolsToUseCount); ele não prioriza o grupo com as instâncias interrompidas anteriormente. Posteriormente, se a estratégia de alocação levar a um grupo contendo as instâncias interrompidas anteriormente, o serviço spot reiniciará as instâncias interrompidas para atender à capacidade desejada.

Por exemplo, considere a Frota spot com a estratégia de alocação lowestPrice. Na execução inicial, um grupo c3.large atende aos critérios de lowestPrice para a especificação de execução. Posteriormente, quando as instâncias c3.large são interrompidas, o serviço spot interrompe as instâncias e repõe a capacidade de outro grupo que se encaixa na estratégia lowestPrice. Desta vez, o grupo passa a ser um grupo c4.large e o serviço spot executa instâncias c4.large para atender a capacidade desejada. Da mesma forma, a Frota spot poderia se mover para um grupo c5.large da próxima vez. Em cada uma dessas transições, o serviço spot não prioriza grupos com instâncias interrompidas anteriormente, mas prioriza apenas a estratégia de alocação especificada. A estratégia lowestPrice pode levar de volta a grupos com instâncias interrompidas anteriormente. Por exemplo, se instâncias forem interrompidas no grupo c5.large e a estratégia lowestPrice levar de volta aos grupos c3.large ou c4.large, as instâncias interrompidas anteriormente serão reiniciadas para atender à capacidade de destino.

Quando uma Instância spot for interrompida, você pode modificar alguns atributos de instância, mas não o tipo de instância. Se você desanexar ou excluir um volume do EBS, ele não será anexado quando a Instância spot for iniciada. Se você desanexar o volume raiz e o serviço spot tentar iniciar a Instância spot, a inicialização da instância falhará e o serviço spot encerrará a instância interrompida.

Você pode encerrar uma Instância spot enquanto ela está interrompida. Se você cancelar uma solicitação spot, uma Frota do EC2 ou uma Frota spot, o serviço spot encerrará todas as Instâncias spot associadas que foram interrompidas.

Enquanto uma Instância spot estiver interrompida, você será cobrado apenas pelos volumes do EBS, que são preservados. Com a Frota do EC2 e a Frota spot, se houver muitas instâncias interrompidas, você poderá exceder o limite de número de volumes do EBS na sua conta.

Como colocar em hibernação Instâncias spot interrompidas

Você pode alterar o comportamento de modo que o Amazon EC2 coloque em hibernação as Instâncias spot quando elas forem interrompidas, caso os seguintes requisitos sejam atendidos:

Requisitos

  • Para uma solicitação de Instância spot, o tipo deve ser persistent. Você não pode especificar um grupo de execução na solicitação de Instância spot.

  • Para uma solicitação de Frota do EC2 ou Frota spot, o tipo deve ser maintain.

  • O volume da raiz deve ser um volume do EBS, e não um volume do armazenamento de instâncias, e deve ser grande o suficiente para armazenar a memória da instância (RAM) durante a hibernação.

  • As seguintes instâncias são compatíveis: C3, C4, C5, M4, M5, R3 e R4 com menos de 100 GB de memória.

  • Os seguintes sistemas operacionais são compatíveis: Amazon Linux 2, Amazon Linux AMI, Ubuntu com um kernel Ubuntu sintonizado pela AWS (linux-aws) superior a 4.4.0-1041 e Windows Server 2008 R2 e versões posteriores.

  • Instale o agente de hibernação em um sistema operacional suportado ou use uma das seguintes AMIs, que já incluem o agente:

    • Amazon Linux 2

    • Amazon Linux AMI 2017.09.1 ou posterior

    • Ubuntu Xenial 16.04 20171121 ou versão posterior

    • Windows Server 2008 R2 AMI 2017.11.19 ou versão posterior

    • Windows Server 2012 ou Windows Server 2012 R2 AMI 2017.11.19 ou versão posterior

    • Windows Server 2016 AMI 2017.11.19 ou versão posterior

    • Windows Server 2019

  • Inicie o agente. Recomendamos que você use dados do usuário para iniciar o agente na inicialização da instância. Se preferir, você pode iniciar o agente manualmente.

Recomendação

  • Recomendamos que você use um volume do Amazon EBS criptografado como o volume raiz, porque a memória da instância fica armazenada no volume raiz durante a hibernação. Isso garante que o conteúdo da memória (RAM) permaneça criptografado quando os dados estiverem em repouso no volume e quando forem transmitidos entre a instância e o volume. Use uma das três opções a seguir para garantir que o volume raiz seja um volume criptografado do Amazon EBS:

    • Criptografia do EBS em etapa única: em uma chamada de API de instâncias de execução única, você abre as instâncias do EC2 baseadas em EBS criptografadas a partir de uma AMI não criptografada. Para obter mais informações, consulte Usar criptografia em AMIs com EBS.

    • Criptografia do EBS por padrão: você pode habilitar a criptografia do EBS por padrão ao garantir que todos os novos volumes do EBS criados na sua conta da AWS sejam criptografados. Para obter mais informações, consulte Criptografia por padrão.

    • AMI criptografada: você pode habilitar a criptografia do EBS usando uma AMI criptografada para executar sua instância. Se a sua AMI não tiver um snapshot raiz criptografado, você poderá copiá-lo para uma nova AMI e solicitar a criptografia. Para obter mais informações, consulte Criptografar uma imagem não criptografada durante a cópia e Cópia de uma AMI.

Quando uma Instância spot é colocada em estado de hibernação pelo serviço spot, os volumes do EBS são preservados e a memória de instância (RAM) é preservada no volume raiz. Os endereços IP privados da instância também são preservados. Volumes do armazenamento de instâncias e endereços IP públicos (que não sejam endereços IP elásticos) não são preservados. Embora a instância esteja hibernando, você é cobrado apenas pelos volumes do EBS. Com a Frota do EC2 e a Frota spot, se houver muitas instâncias hibernadas, você poderá exceder o limite de número de volumes do EBS na sua conta.

O agente solicita hibernação ao sistema operacional quando a instância recebe um sinal do serviço spot. Se o agente não estiver instalado, o sistema operacional subjacente não oferecer suporte à hibernação ou não houver espaço de volume suficiente para salvar a memória da instância, a hibernação falhará e o serviço spot interromperá a instância.

Quando o serviço spot colocar uma Instância spot em hibernação, você receberá um aviso de interrupção, mas não terá dois minutos antes da interrupção da Instância spot. A hibernação começa imediatamente. Enquanto a instância estiver em processo de hibernação, as verificações de integridade da instância poderão falhar. Quando o processo de hibernação for concluído, o estado da instância será stopped.

Depois que uma Instância spot for colocada em estado de hibernação pelo serviço spot, ela só poderá ser retomada pelo serviço spot. O serviço spot retomará a instância quando a houver capacidade disponível com um preço spot inferior ao seu preço máximo especificado.

Para obter mais informações, consulte Preparação para hibernação de uma instância.

Para obter informações sobre o Instâncias on-demand em hibernação, consulte Hibernar a instância do Linux.

Como preparar-se para interrupções

Veja a seguir algumas práticas recomendadas a serem seguidas durante o uso das Instâncias spot:

  • Use o preço máximo padrão, que é o preço sob demanda.

  • Certifique-se de que sua instância esteja preparada assim que a solicitação seja atendida usando uma Imagem de máquina da Amazon (AMI) que contenha a configuração de software necessária. Você também pode usar dados de usuário para executar comandos na inicialização.

  • Armazene regularmente os dados importantes em um lugar em que eles não sejam afetados quando a Instância spot for encerrada. Por exemplo, você pode usar o Amazon S3, o Amazon EBS ou o DynamoDB.

  • Divida o trabalho em tarefas pequenas (usando uma grade, um Hadoop ou uma arquitetura baseada em fila) ou use pontos de verificação para que você possa salvar seu trabalho com frequência.

  • Use avisos de interrupção de Instância spot para monitorar o status das instâncias spot.

  • Embora nos esforcemos ao máximo para fornecer esse aviso o mais rápido possível, pode ser que a Instância spot seja encerrada antes que o aviso seja disponibilizado. Teste o aplicativo para ter a certeza de que ele tratará um encerramento de instância inesperado normalmente, mesmo se você estiver testando avisos de interrupção. Você pode fazer isso executando o aplicativo com uma instância sob demanda e, em seguida, encerrando a instância sob demanda por conta própria.

Preparação para hibernação de uma instância

Você precisa instalar um agente de hibernação na sua instância, a menos que use uma AMI que já inclui o agente. É necessário executar o agente na inicialização da instância, independentemente de ele ter sido incluído na sua AMI ou instalado por você.

Os procedimentos a seguir ajudam você a preparar uma instância do Linux. Para obter instruções sobre como preparar uma instância Windows, consulte Preparação para hibernação de uma instância no Guia do usuário do Amazon EC2 para instâncias do Windows.

Para preparar uma instância do Amazon Linux

  1. Verifique se o kernel oferece suporte à hibernação e atualize-o, se necessário.

  2. Se sua AMI não incluir o agente, instale-o usando o seguinte comando:

    sudo yum update; sudo yum install hibagent
  3. Adicione o seguinte aos dados do usuário:

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

Para preparar uma instância do Ubuntu

  1. Se sua AMI não incluir o agente, instale-o usando o seguinte comando: O agente de hibernação só está disponível no Ubuntu 16.04 ou posterior.

    sudo apt-get install hibagent
  2. Adicione o seguinte aos dados do usuário:

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

Avisos de interrupção de Instância spots

A melhor maneira de proteger-se contra a interrupção de Instância spots é arquitetar o aplicativo para que seja tolerante a falhas. Além disso, você pode aproveitar os avisos de interrupção da Instância spot, que enviam um aviso dois minutos antes do Amazon EC2 interromper ou encerrar a Instância spot. Recomendamos que você verifique esses avisos a cada cinco segundos.

Esse aviso é disponibilizado como um evento do CloudWatch e como um item nos metadados de instância no Instância spot.

Se você especificar uma hibernação como o comportamento de interrupção, receberá um aviso de interrupção, mas não receberá o aviso dois minutos antes porque o processo de hibernação começará imediatamente.

EC2 Instância spot Interruption Notice

Quando o Amazon EC2 for interromper sua Instância spot, ele emitirá um evento dois minutos antes da interrupção em si. Esse evento pode ser detectado pelo Eventos do Amazon CloudWatch. Para obter mais informações, consulte o Guia do usuário do Eventos do Amazon CloudWatch.

Este é um exemplo do evento de interrupção do Instância spot. Os valores possíveis para instance-action são hibernate, stop e 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

Se a Instância spot estiver marcada para ser interrompida ou encerrada pelo serviço spot, o item instance-action estará presente nos metadados de instância. Caso contrário, não estará presente. Você pode recuperar instance-action da maneira a seguir.

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

O item instance-action especifica a ação e o tempo aproximado (em UTC) em que a ação ocorrerá.

O exemplo a seguir indica o tempo em que essa instância será interrompida:

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

O exemplo a seguir indica o tempo em que essa instância será encerrada:

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

Se o Amazon EC2 não estiver se preparando para interromper ou encerrar a instância, ou se você mesmo encerrar a instância, instance-action não estará presente e você receberá um erro HTTP 404.

termination-time

Este item é mantido para compatibilidade com versões anteriores. Você deve usar instance-action em seu lugar.

Se a Instância spot estiver marcada para encerramento pelo serviço spot, o item termination-time estará presente nos metadados de instância. Caso contrário, não estará presente. Você pode recuperar termination-time da maneira a seguir.

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

O item termination-time especifica o tempo aproximado (em UTC) em que a instância recebe o sinal de desligamento. Por exemplo:

2015-01-05T18:02:00Z

Se o Amazon EC2 não estiver se preparando para encerrar a instância ou se você tiver encerrado a Instância spot por conta própria, o item termination-time não estará presente (e você receberá um erro HTTP 404) ou conterá um valor que não é um valor de tempo.

Se o Amazon EC2 não encerrar a instância, o status da solicitação será definido como fulfilled. O valor de termination-time permanece nos metadados da instância com o tempo aproximado original, que agora está no passado.

Faturamento para Instâncias spot interrompidas

Quando uma Instância spot (que não está em um bloco spot) é interrompida, você é cobrado da maneira indicada a seguir.

Quem interrompe a Instância spot Sistema operacional Interrompida na primeira hora Interrompida em qualquer hora após a primeira

Se você interromper a Instância spot

Linux (com exceção de RHEL e SUSE) Cobrança pelos segundos usados Cobrança pelos segundos usados
Windows, RHEL, SUSE Cobrança pela hora completa, mesmo se você usou somente uma parte da hora Cobrança pelas horas completas usadas e cobrança por uma hora completa pela hora parcial interrompida

Se o Amazon EC2 interromper a Instância spot

Linux (com exceção de RHEL e SUSE) Sem cobrança Cobrança pelos segundos usados
Windows, RHEL, SUSE Sem cobrança

Cobrança pelas horas completas usadas, mas sem cobrança pela hora parcial interrompida

Quando uma Instância spot que está em um bloco spot é interrompida, você é cobrado da maneira indicada a seguir.

Quem interrompe a Instância spot Sistema operacional Interrompida na primeira hora Interrompida em qualquer hora após a primeira

Se você interromper a Instância spot

Linux (com exceção de RHEL e SUSE) Cobrança pelos segundos usados Cobrança pelos segundos usados
Windows, RHEL, SUSE Cobrança pela hora completa, mesmo se você usou somente uma parte da hora Cobrança pelas horas completas usadas e cobrança por uma hora completa pela hora parcial interrompida

Se o Amazon EC2 interromper a Instância spot

Linux (com exceção de RHEL e SUSE) Sem cobrança Sem cobrança
Windows, RHEL, SUSE Sem cobrança

Sem cobrança