Tutorial: Teste as interrupções da instância Spot usando 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: Teste as interrupções da instância Spot usando AWS FIS

As instâncias spot usam a EC2 capacidade disponível 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 no Guia do EC2 usuário da Amazon.

Você pode usar: AWS Serviço de injeção de falhas (AWS 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 o AWS FISaws:ec2:send-spot-instance-interruptionsação 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 Guia do usuário da Amazon EC2.

Pré-requisitos

Antes que você possa usar AWS FISpara interromper uma Instância Spot, preencha os seguintes pré-requisitos.

1. Crie uma IAM função

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

2. Verifique o acesso ao AWS FIS

Certifique-se de que você tenha acesso a AWS FIS. Para ter mais informações, consulte AWS FISexemplos de políticas.

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. O seguinte é um exemplo de saída.

[ "i-0abcdef1234567890" ]
4. Adicione uma tag para que AWS FISpode identificar a Instância Spot de destino

Use o comando create-tags 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

Crie o modelo de experimento usando o AWS FISconsole. 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, AWS FISescolhe um deles aleatoriamente.

Para criar um modelo de experimento
  1. Abra as AWS FISconsole 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. Para Target, mantenha o alvo que AWS FIScria 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 AWS FIScriado 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. Para Acesso ao Serviço, escolha Usar uma IAM função existente e, em seguida, escolha a IAM função 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 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 do experimento JSON

Escolha a guia Exportar. A seguir está um exemplo do procedimento JSON criado pelo 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 EC2 console da Amazon 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 AWS FISconsole
  1. Abra as AWS FISconsole 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.