Avisos de interrupção de instância spot - Amazon Elastic Compute Cloud

Avisos de interrupção de instância spot

Um aviso de interrupção da instância spot é um aviso emitido dois minutos antes de o Amazon EC2 parar ou encerrar uma 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.

A melhor maneira de lidar com interrupções de instâncias spot com tranquilidade é arquitetar a aplicação para que ela seja tolerante a falhas. Para fazer isso, é possível aproveitar os avisos de interrupção de instância spot. Recomendamos que você verifique esses avisos de interrupção a cada 5 segundos.

Os avisos de interrupção são disponibilizados como um evento do Eventbridge e como itens nos metadados de instância na instância spot. Avisos de interrupção são emitidos de acordo com o melhor esforço.

EC2 Spot Instance interruption notice

Quando o Amazon EC2 vai interromper a instância spot, ele emite um evento dois minutos antes da interrupção real (exceto para a hibernação, que recebe o aviso de interrupção, mas não dois minutos antes, porque a hibernação começa imediatamente). Este evento pode ser detectado pelo Amazon EventBridge. Para obter mais informações sobre eventos no EventBridge, consulte o Guia do usuário do Amazon EventBridge. Para obter um exemplo detalhado que orienta você sobre como criar e usar regras de evento, consulte Aproveitar os avisos de interrupção de instância spot do Amazon EC2.

Este é um exemplo do evento de interrupção da instância spot. Os valores possíveis para instance-action são hibernate, stop ou 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-2a:instance/i-1234567890abcdef0"], "detail": { "instance-id": "i-1234567890abcdef0", "instance-action": "action" } }
nota

O formato de ARN do evento de interrupção da instância spot é arn:aws:ec2:availability-zone:instance/instance-id. Esse formato é diferente do formato de ARN de recurso do EC2.

instance-action

Se a instância spot estiver marcada para ser parada ou terminada pelo Amazon EC2, o item instance-action estará presente nos seus metadados de instância. Caso contrário, não estará presente. É possível recuperar instance-action da maneira a seguir.

IMDSv2
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/spot/instance-action
IMDSv1
[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á.

A saída do exemplo a seguir indica o momento em que essa instância será parada.

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

A saída do exemplo a seguir indica o momento em que essa instância será terminada.

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

Se o Amazon EC2 não estiver se preparando para parar ou terminar a instância, ou se você mesmo terminar a instância, instance-action não estará presente nos metadados da instância e você receberá um erro HTTP 404 ao tentar recuperá-la.

termination-time

Este item é mantido para compatibilidade com versões anteriores. Use instance-action em seu lugar.

Se a instância spot estiver marcada para término pelo Amazon EC2, o item termination-time estará presente nos metadados da instância. Caso contrário, não estará presente. É possível recuperar termination-time da maneira a seguir.

IMDSv2
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` [ec2-user ~]$ if curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/spot/termination-time | grep -q .*T.*Z; then echo terminated; fi
IMDSv1
[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. A seguir, um exemplo de saída.

2015-01-05T18:02:00Z

Se o Amazon EC2 não estiver se preparando para terminar a instância ou se você tiver terminado a instância spot por conta própria, o item termination-time não estará presente nos metadados da instância (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.