

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Tutorial: Teste as interrupções da instância Spot usando o AWS FIS
<a name="fis-tutorial-spot-interruptions"></a>

As instâncias spot usam a EC2 capacidade ociosa que está disponível, com um desconto de até 90% em comparação com os preços sob demanda. No entanto, a Amazon EC2 pode interromper suas Instâncias Spot quando precisar da capacidade de volta. Ao usar instâncias spot, é preciso estar preparado para possíveis interrupções. Para obter mais informações, consulte [Interrupções de instâncias spot](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html) no *Guia do EC2 usuário da Amazon*.

Você pode usar o AWS AWS Fault Injection Service (FIS) para testar como seus aplicativos lidam com uma interrupção de instância spot. Use este tutorial para criar um modelo de experimento que usa a `aws:ec2:send-spot-instance-interruptions` ação AWS FIS para interromper uma de suas instâncias spot.

Como alternativa, para iniciar o experimento usando o EC2 console da Amazon, consulte [Iniciar uma interrupção de instância spot no](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/initiate-a-spot-instance-interruption.html) Guia do usuário da *Amazon EC2 *.

## Pré-requisitos
<a name="spot-interruptions-prerequisites"></a>

Antes de usar o AWS FIS para interromper uma instância spot, preencha os seguintes pré-requisitos.

**1. Criar um perfil do IAM**  
Crie uma função e anexe uma política que permita que o AWS FIS execute a `aws:ec2:send-spot-instance-interruptions` ação em seu nome. Para obter mais informações, consulte [Funções do IAM para experimentos AWS do FIS](getting-started-iam-service-role.md).

**2. Verifique o acesso ao AWS FIS**  
Certifique-se de ter acesso ao AWS FIS. Para obter mais informações, consulte [Exemplos de políticas do AWS FIS](security_iam_id-based-policy-examples.md).

**3. (Opcional) Criar uma solicitação de instância spot**  
Se você quiser usar uma nova instância spot para esse experimento, use o comando [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) para solicitar uma instância spot. O padrão é encerrar as Instâncias spot que são interrompidas. Se você definir o comportamento de interrupção como `stop`, também deverá definir o tipo como `persistent`. Para este tutorial, não defina o comportamento de interrupção como `hibernate`, pois o processo de hibernação começa imediatamente.

```
aws ec2 run-instances \
    --image-id {{ami-0ab193018fEXAMPLE}} \
    --instance-type "{{t2.micro}}" \
    --count 1 \
    --subnet-id {{subnet-1234567890abcdef0}} \
    --security-group-ids {{sg-111222333444aaab}} \
    --instance-market-options file://{{spot-options.json}} \
    --query Instances[*].InstanceId
```

Este é um exemplo do arquivo `spot-options.json`.

```
{
    "MarketType": "spot",
    "SpotOptions": { 
        "SpotInstanceType": "persistent",
        "InstanceInterruptionBehavior": "stop"
    }
}
```

A opção `--query` no comando de exemplo faz com que o comando retorne somente o ID da instância spot. O seguinte é um exemplo de saída.

```
[
    "i-0abcdef1234567890"   
]
```

**4. Adicione uma tag para que o AWS FIS possa identificar a Instância Spot de destino**  
Use o comando [create-tags](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-tags.html) para adicionar a tag Name=interruptMe para sua Instância Spot de destino.

```
aws ec2 create-tags \
    --resources {{i-0abcdef1234567890}} \
    --tags Key=Name,Value=interruptMe
```

## Etapa 1: criar um modelo de experimento
<a name="spot-interruptions-create-template"></a>

Crie o modelo de experimento usando o console AWS FIS. No modelo, você especifica a ação que será executada. A ação interrompe a instância spot com a tag especificada. Se houver mais de uma instância spot com a tag, o AWS FIS escolherá uma delas aleatoriamente.

**Para criar um modelo de experimento**

1. Abra o console AWS FIS em. [https://console.aws.amazon.com/fis/](https://console.aws.amazon.com/fis/)

1. No painel de navegação, selecione **Modelos de experimento**.

1. Escolha **Criar modelo de experimento**.

1. Para **a Etapa 1, Especificar detalhes do modelo**, faça o seguinte:

   1. Em **Descrição e nome**, insira uma descrição e um nome para o modelo.

   1. Escolha **Avançar** e vá para a **Etapa 2, Especifique ações e alvos**. 

1. Em **Ações**, faça o seguinte:

   1. Selecione **Adicionar ação**.

   1. Insira um nome para a ação. Por exemplo, digite **interruptSpotInstance**.

   1. Em **Tipo de ação**, escolha **aws:ec2:**. send-spot-instance-interruptions

   1. Para **Target**, mantenha o alvo que o AWS FIS cria para você.

   1. Para **Parâmetros de ação**, **Duração antes da interrupção**, especifique 2 minutos (PT2M).

   1. Escolha **Salvar**.

1. Em **Destinos**, faça o seguinte:

   1. Escolha **Editar** para o destino que o AWS FIS criou automaticamente para você na etapa anterior.

   1. Substitua o nome padrão por um nome mais descritivo. Por exemplo, digite **oneSpotInstance**.

   1. Verifique se o **Tipo de recurso** é **aws:ec2:spot-instance**.

   1. Em **Método de destino**, escolha **Tags, filtros e parâmetros de recursos**.

   1. Em **Tags de recursos**, escolha **Adicionar nova tag** e insira da chave da tag e o valor da tag. Use a tag que você adicionou à instância spot para interromper, conforme descrito nos Pré-requisitos deste tutorial.

   1. Em **Filtros de recursos**, escolha **Adicionar novo filtro** e insira **State.Name** como o caminho e **running** como o valor.

   1. Em **Modo de seleção**, escolha **Contagem**. Em **Número de recursos**, insira **1**.

   1. Escolha **Salvar**.

1. Escolha **Avançar** para ir para a **Etapa 3, Configurar o acesso ao serviço**. 

1. Em **Acesso ao serviço**, escolha **Usar um perfil do IAM existente** e, em seguida, escolha o perfil do IAM que você criou conforme descrito nos pré-requisitos deste tutorial. Se sua função não for exibida, verifique se ela tem a relação de confiança necessária. Para obter mais informações, consulte [Funções do IAM para experimentos AWS do FIS](getting-started-iam-service-role.md).

1. Escolha **Avançar** para ir para a **Etapa 4, Definir configurações opcionais**. 

1. (Opcional) Em **Tags**, escolha **Adicionar nova tag** e especifique uma chave de tag e um valor de tag. As tags que você adiciona são aplicadas ao seu modelo de experimento, não aos experimentos que são executados usando o modelo.

1. Escolha **Avançar** para ir para a **Etapa 5, Revisar e criar**. 

1. Revise o modelo e escolha **Criar modelo de experimento**. Quando a confirmação for solicitada, insira e`create`, em seguida, escolha **Criar modelo de experimento**. 

**(Opcional) Para visualizar o modelo de experimento JSON**  
Escolha a guia **Exportar**. Este é um exemplo do JSON criado pelo procedimento de console anterior.

```
{
    "description": "Test Spot Instance interruptions",
    "targets": {
        "oneSpotInstance": {
            "resourceType": "aws:ec2:spot-instance",
            "resourceTags": {
                "Name": "interruptMe"
            },
            "filters": [
                {
                    "path": "State.Name",
                    "values": [
                        "running"
                    ]
                }
            ],
            "selectionMode": "COUNT(1)"
        }
    },
    "actions": {
        "interruptSpotInstance": {
            "actionId": "aws:ec2:send-spot-instance-interruptions",
            "parameters": {
                "durationBeforeInterruption": "PT2M"
            },
            "targets": {
                "SpotInstances": "oneSpotInstance"
            }
        }
    },
    "stopConditions": [
        {
            "source": "none"
        }
    ],
    "roleArn": "arn:aws:iam::{{123456789012}}:role/{{AllowFISSpotInterruptionActions}}",
    "tags": {
        "Name": "my-template"
    }
}
```

## Etapa 2: iniciar o experimento
<a name="spot-interruptions-start-experiment"></a>

Quando terminar de criar seu modelo de experimento, você poderá usá-lo para iniciar um experimento.

**Para iniciar um experimento**

1. Você deve estar na página de detalhes do modelo de experimento que acabou de criar. Caso contrário, escolha **Modelos de experimento** e selecione o ID do modelo de experimento para abrir a página de detalhes.

1. Escolha **Start experiment** (Iniciar experimento).

1. (Opcional) Para adicionar uma tag ao experimento, escolha **Adicionar nova tag** e insira uma chave de tag e um valor de tag.

1. Escolha **Start experiment** (Iniciar experimento). Quando a confirmação for solicitada, insira **start** e escolha **Iniciar experimento**.

## Etapa 3: acompanhar o progresso do experimento
<a name="spot-interruptions-track-experiment"></a>

Você pode acompanhar o progresso de um experimento em andamento até que ele seja concluído, interrompido ou falhe.

**Para acompanhar o progresso de um experimento**

1. Você deve estar na página de detalhes do modelo de experimento que acabou de iniciar. Caso contrário, escolha **Experimentos** e selecione o ID do experimento para abrir a página de detalhes.

1. Para ver o estado do experimento, marque **Estado** no painel **Detalhes**. Para obter mais informações, consulte [Estados do experimento](view-experiment-progress.md#experiment-states).

1. Quando o estado do experimento for **Em execução**, vá para a próxima etapa.

## Etapa 4: verificar o resultado do experimento
<a name="spot-interruptions-verify-experiment-result"></a>

Quando a ação desse experimento for concluída, ocorrerá o seguinte:
+ A instância spot de destino recebe uma [recomendação de rebalanceamento da instância](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/rebalance-recommendations.html).
+ Um [aviso de interrupção da Instância Spot](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html#spot-instance-termination-notices) é emitido dois minutos antes de a Amazon EC2 encerrar ou interromper sua instância.
+ Passados os dois minutos, a instância spot é encerrada ou interrompida.
+ Uma instância spot que foi interrompida pelo AWS FIS permanece parada até que você a reinicie.

**Para verificar se a instância foi interrompida pelo experimento**

1. Abra o EC2 console da Amazon em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. No painel de navegação, abra **Spot Requests** (Solicitações de spot) e **Instances** (Instâncias) em guias ou janelas separadas do navegador.

1. Em **Spot Requests** (Solicitações de spot), selecione a solicitação de instância spot. O status inicial é `fulfilled`. Após a conclusão do experimento, o status muda da seguinte forma:
   + `terminate`: o status se altera para `instance-terminated-by-experiment`.
   + `stop`: o status se altera para `marked-for-stop-by-experiment` e depois `instance-stopped-by-experiment`.

1. Em **Instances** (Instâncias), selecione a instância spot. O status inicial é `Running`. Dois minutos depois que você recebe o aviso de interrupção da instância spot, o status se altera como se segue:
   + `stop`: o status se altera para `Stopping` e depois `Stopped`.
   + `terminate`: o status se altera para `Shutting-down` e depois `Terminated`.

## Etapa 5: limpar
<a name="spot-interruptions-cleanup"></a>

Se você criou a instância spot de teste para esse experimento com um comportamento de interrupção de `stop` e não precisa mais dela, é possível cancelar a solicitação da instância spot e encerrar a instância spot.

**Para cancelar a solicitação e encerrar a instância usando o AWS CLI**

1. Use o [cancel-spot-instance-requests](https://docs.aws.amazon.com/cli/latest/reference/ec2/cancel-spot-instance-requests.html)comando para cancelar a solicitação da Instância Spot.

   ```
   aws ec2 cancel-spot-instance-requests --spot-instance-request-ids {{sir-ksie869j}}
   ```

1. Use o comando [terminate-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/terminate-instances.html) para encerrar a instância.

   ```
   aws ec2 terminate-instances --instance-ids {{i-0abcdef1234567890}}
   ```

Se você não precisar mais do modelo de experimento, poderá excluí-lo.

**Para excluir um modelo de experimento usando o console AWS FIS**

1. Abra o console AWS FIS em. [https://console.aws.amazon.com/fis/](https://console.aws.amazon.com/fis/)

1. No painel de navegação, selecione **Modelos de experimento**.

1. Selecione o modelo do experimento e escolha **Ações**, **Excluir modelo de experimento**.

1. Quando a confirmação for solicitada, insira **delete** e escolha **Excluir modelo de experimento**.