Trabajar con instancias de spot de Amazon EC2 - FSx para Lustre

Trabajar con instancias de spot de Amazon EC2

FSx para Lustre se puede utilizar con instancias de spot EC2 para reducir significativamente los costos de Amazon EC2. Una instancia de spot es una instancia EC2 sin utilizar que está disponible por un precio inferior al precio bajo demanda. Amazon EC2 puede interrumpir su instancia de spot si la demanda de instancias de spot supera el precio máximo, si la oferta de instancias de spot aumenta o si la oferta de instancias de spot disminuye.

Cuando Amazon EC2 interrumpe una instancia de spot, proporciona un aviso de interrupción de instancia de spot, que envía a la instancia una advertencia dos minutos antes de que Amazon EC2 la interrumpa. Para obtener más información, consulte Instancias de spot en Guía del usuario de Amazon EC2.

Para garantizar que los sistemas de archivos de Amazon FSx no se vean afectados por las interrupciones de instancias de spot de EC2, recomendamos desmontar los sistemas de archivos de Amazon FSx antes de finalizar o hibernar las instancias de spot de EC2. Para obtener más información, consulte Desmontaje de sistemas de archivos.

Cómo manejar las interrupciones de las instancias de spot de Amazon EC2

FSx para Lustre es un sistema de archivos distribuido donde las instancias de servidor y cliente cooperan para proporcionar un sistema de archivos fiable y de alto rendimiento. Mantienen un estado distribuido y coherente entre las instancias cliente y servidor. Los servidores FSx para Lustre delegan permisos de acceso temporal a los clientes mientras están activamente realizando E/S y almacenando en caché datos del sistema de archivos. Se espera que los clientes respondan en un corto período de tiempo cuando los servidores les soliciten revocar sus permisos de acceso temporal. Para proteger el sistema de archivos de clientes malintencionados, los servidores pueden expulsar a los clientes de Lustre que no respondan después de unos minutos. Para evitar tener que esperar varios minutos la respuesta de un cliente indiferente a la solicitud del servidor, es importante desmontar limpiamente los clientes de Lustre, sobre todo antes de terminar las instancias de spot de EC2.

La instancia de spot de EC2 envía avisos de terminación con 2 minutos de antelación antes de cerrar una instancia. Le recomendamos que automatice el proceso de desmontar limpiamente los clientes de Lustre antes de terminar las instancias de spot de EC2.

ejemplo – Script para desmontar limpiamente las instancias de spot EC2 terminadas

Este script de ejemplo elimina de forma limpia la terminación de instancias de spot de EC2 haciendo lo siguiente:

  • Vigila los avisos de terminación de Spot.

  • Cuando recibe un aviso de terminación:

    • Detiene las aplicaciones que estén accediendo al sistema de archivos.

    • Desmonta el sistema de archivos antes de finalizar la instancia.

Puede adaptar el script como necesite, especialmente para cerrar su aplicación de manera adecuada. Para obtener más información sobre las mejores prácticas para manejar las interrupciones de instancias de spot, consulte Prácticas recomendadas para manejar las interrupciones de instancias de spot de EC2.

#!/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/spot/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/spot/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