

# Avisos de interrupção de instância spot
<a name="spot-instance-termination-notices"></a>

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](ec2-instance-metadata.md) da instância spot. Avisos de interrupção são emitidos de acordo com o melhor esforço.

## EC2 Spot Instance Interruption WarningEvento
<a name="ec2-spot-instance-interruption-warning-event"></a>

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](https://docs.aws.amazon.com/eventbridge/latest/userguide/). 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](https://aws.amazon.com/blogs/compute/taking-advantage-of-amazon-ec2-spot-instance-interruption-notices/).

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](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-resources-for-iam-policies).

## instance-action
<a name="instance-action-metadata"></a>

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

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](ec2-instance-metadata.md). Caso contrário, não estará presente. É possível recuperar `instance-action` usando o Instance Metadata Service versão 2 (IMDSv2) da seguinte forma.

------
#### [ Linux ]

```
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" http://169.254.169.254/latest/meta-data/spot/instance-action
```

------
#### [ Windows ]

```
[string]$token = Invoke-RestMethod `
    -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} `
    -Method PUT -Uri http://169.254.169.254/latest/meta-data/spot/instance-action
```

------

 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
<a name="termination-time-metadata"></a>

O item `termination-time` especifica o horário aproximado em UTC em que a instância receberá a sinalização de desligamento. 

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

Se a instância spot estiver marcada para ser encerrada pelo Amazon EC2 (devido a uma interrupção da instância spot em que o comportamento de interrupção está definido como `terminate` ou devido ao cancelamento de uma solicitação de instância spot persistente), o item `termination-time` estará presente nos [metadados da instância](ec2-instance-metadata.md). Caso contrário, não estará presente. É possível recuperar `termination-time` usando o IMDSv2 da seguinte maneira.

------
#### [ Linux ]

```
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
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 termination_scheduled; fi
```

------
#### [ Windows ]

```
[string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/meta-data/spot/termination-time
```

------

O seguinte é um exemplo de saída.

```
2015-01-05T18:02:00Z
```

Se o Amazon EC2 não estiver se preparando para encerrar a instância (seja porque não há interrupção da instância spot, seja porque o comportamento de interrupção está definido como `stop` ou `hibernate`), ou se você tiver encerrado a instância spot por conta própria, o item `termination-time` não estará presente nos metadados da instância (portanto, você receberá um erro HTTP 404) ou conterá um valor que não corresponde a 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.