Como trabalhar com instâncias spot do Amazon EC2 - FSx para Lustre

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

Como trabalhar com instâncias spot do Amazon EC2

O FSx para Lustre pode ser usado com instâncias spot do EC2 para reduzir significativamente os custos do Amazon EC2. Uma instância spot é uma instância do EC2 não usada que está disponível por um valor mais baixo que o preço sob demanda. O Amazon EC2 pode interromper a instância spot quando o preço spot exceder o preço máximo, quando a demanda por instâncias spot aumentar ou quando a disponibilização de instâncias spot diminuir.

Quando o Amazon EC2 interrompe uma instância spot, ele fornece um aviso de interrupção de instância spot, enviando à instância um aviso de dois minutos antes que o Amazon EC2 a interrompa. Para obter mais informações, consulte Instâncias spot no Guia do usuário do Amazon EC2.

Para garantir que os sistemas de arquivos do Amazon FSx não sejam afetados pelas interrupções de instâncias spot do EC2, recomendamos desmontar os sistemas de arquivos do Amazon FSx antes de encerrar ou hibernar as instâncias spot do EC2. Para ter mais informações, consulte Desmontagem de sistemas de arquivos.

Como lidar com interrupções de instâncias spot do Amazon EC2

O FSx para Lustre é um sistema de arquivos distribuído no qual as instâncias do servidor e do cliente cooperam para disponibilizar um sistema de arquivos confiável e com alta performance. É mantido um estado distribuído e coerente nas instâncias do cliente e do servidor. Os servidores FSx para Lustre delegam permissões de acesso temporário aos clientes enquanto eles estão ativamente realizando E/S e armazenando em cache os dados do sistema de arquivos. Espera-se que os clientes respondam em um curto período quando os servidores solicitarem a revogação das permissões de acesso temporário. Para proteger o sistema de arquivos contra clientes com comportamentos inadequados, os servidores podem realizar a remoção dos clientes Lustre que não responderem após alguns minutos. Para evitar aguardar vários minutos até que um cliente que não responde envie uma resposta à solicitação do servidor, é importante desmontar corretamente os clientes Lustre, especialmente antes de encerrar as instâncias spot do EC2.

O spot do EC2 envia avisos de encerramento com dois minutos de antecedência antes de encerrar uma instância. Recomendamos automatizar o processo de desmontagem correta para clientes Lustre antes de encerrar as instâncias spot do EC2.

exemplo : script para desmontar corretamente as instâncias spot do EC2 que estão sendo encerradas

Este script de exemplo desmonta corretamente as instâncias spot do EC2 que estão sendo encerradas ao realizar o seguinte:

  • Prestar atenção aos avisos de encerramento do spot.

  • Quando receber um aviso de encerramento:

    • Interromper as aplicações que acessam o sistema de arquivos.

    • Desmontar o sistema de arquivos antes que a instância seja encerrada.

É possível adaptar o script conforme necessário, especialmente para encerrar a aplicação normalmente. Para obter mais informações sobre as práticas recomendadas para lidar com interrupções de instâncias spot, consulte Best practices for handling EC2 Spot Instance interruptions.

#!/bin/bash # TODO: Specify below the FSx mount point you are using *FSXPATH=/fsx* cd / TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") if [ "$?" -ne 0 ]; then echo "Error running 'curl' command" >&2 exit 1 fi # Periodically check for termination while sleep 5 do HTTP_CODE=$(curl -H "X-aws-ec2-metadata-token: $TOKEN" -s -w %{http_code} -o /dev/null http://169.254.169.254/latest/meta-data/instance-action) if [[ "$HTTP_CODE" -eq 401 ]] ; then # Refreshing Authentication Token TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") continue elif [[ "$HTTP_CODE" -ne 200 ]] ; then # If the return code is not 200, the instance is not going to be interrupted continue fi echo "Instance is getting terminated. Clean and unmount '$FSXPATH' ..." curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/instance-action echo # Gracefully stop applications accessing the filesystem # # TODO*: Replace with the proper command to stop your application if possible* # Kill every process still accessing Lustre filesystem echo "Kill every process still accessing Lustre filesystem..." fuser -kMm -TERM "${FSXPATH}"; sleep 2 fuser -kMm -KILL "${FSXPATH}"; sleep 2 # Unmount FSx For Lustre filesystem if ! umount -c "${FSXPATH}"; then echo "Error unmounting '$FSXPATH'. Processes accessing it:" >&2 lsof "${FSXPATH}" echo "Retrying..." continue fi # Start a graceful shutdown of the host shutdown now done