Tutorial: testar as interrupções da instância spot usando o AWS FIS - AWS Serviço de injeção de falhas

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: testar as interrupções da instância spot usando o AWS FIS

As instâncias spot usam capacidade adicional do EC2 que está disponível, com um desconto de até 90% em comparação aos preços sob demanda. No entanto, o 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 da instância spot no Guia do usuário do Amazon EC2.

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

Como alternativa, para iniciar o experimento usando o console do Amazon EC2, consulte Iniciar uma interrupção de instância spot no Guia do usuário do Amazon EC2.

Pré-requisitos

Antes de você poder usar o AWS FIS para interromper a instância spot, preencha os pré-requisitos a seguir.

1. Criar um perfil do IAM

Crie uma função e anexe uma política que permita que o AWS FIS realize a ação aws:ec2:send-spot-instance-interruptions em seu nome. Para ter mais informações, consulte Funções do IAM para experimentos do AWS FIS.

2. Verifique o acesso ao AWS FIS

Verifique se você tem acesso ao AWS FIS. Para obter mais informações, consulte Exemplos de políticas do AWS FIS.

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 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. A seguir, um exemplo de saída.

[ "i-0abcdef1234567890" ]
4. Adicionar uma tag para que o AWS FIS possa identificar a instância spot de destino

Use o comando create-tags para adicionar a tag Name=interruptMe à instância spot de destino.

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

Etapa 1: criar um modelo de experimento

Criar o modelo de experimento usando o console do 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 do AWS FIS em https://console.aws.amazon.com/fis/.

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

  3. Escolha Criar modelo de experimento.

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

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

    1. Selecione Adicionar ação.

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

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

    4. Em Destino, mantenha o destino que o AWS FIS cria para você.

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

    6. Escolha Salvar.

  6. Em Destinos, faça o seguinte:

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

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

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

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

    5. 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.

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

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

    8. Escolha Salvar.

  7. Em Acesso ao serviço, escolha Usar uma função do IAM existente e, em seguida, escolha a função 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 ter mais informações, consulte Funções do IAM para experimentos do AWS FIS.

  8. (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.

  9. Escolha Criar modelo de experimento. Quando a confirmação for solicitada, insira create e 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

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.

  2. Escolha Start experiment (Iniciar experimento).

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

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

Etapa 3: acompanhar o progresso do experimento

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.

  2. Para ver o estado do experimento, marque Estado no painel Detalhes. Para obter mais informações, consulte Estados do experimento.

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

Etapa 4: verificar o resultado do experimento

Quando a ação desse experimento for concluída, ocorrerá o seguinte:

Para verificar se a instância foi interrompida pelo experimento
  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

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

  3. 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.

  4. 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

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-requestscomando para cancelar a solicitação da Instância Spot.

    aws ec2 cancel-spot-instance-requests --spot-instance-request-ids sir-ksie869j
  2. Use o comando terminate-instances 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 do AWS FIS
  1. Abra o console do AWS FIS em https://console.aws.amazon.com/fis/.

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

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

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