Amazon EC2 スポットインスタンスの使用 - FSx Lustre 用

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon EC2 スポットインスタンスの使用

FSx for Lustre EC2 をスポットインスタンスと併用すると、Amazon のEC2コストを大幅に削減できます。スポットインスタンスは、オンデマンド料金より低価格で利用できる未使用のEC2インスタンスです。Amazon EC2は、スポット料金が上限価格を超えた場合、スポットインスタンスの需要が高まった場合、またはスポットインスタンスの供給が減少した場合、スポットインスタンスを中断できます。

Amazon がスポットインスタンスEC2を中断すると、スポットインスタンスの中断通知が表示されます。これにより、Amazon がEC2中断する前にインスタンスに 2 分間の警告が表示されます。詳細については、「Amazon EC2 ユーザーガイド」の「スポットインスタンス」を参照してください。

Amazon FSx ファイルシステムがEC2スポットインスタンスの中断の影響を受けないようにするには、EC2スポットインスタンスを終了または休止する前に Amazon FSx ファイルシステムをアンマウントすることをお勧めします。詳細については、「ファイルシステムをアンマウントする」を参照してください。

Amazon EC2 スポットインスタンスの中断の処理

FSx for Lustre は、サーバーインスタンスとクライアントインスタンスが連携して、パフォーマンスと信頼性に優れたファイルシステムを提供する分散ファイルシステムです。これらは、クライアントインスタンスとサーバーインスタンスの両方で配信されたコヒーレント状態を維持します。FSx for Lustre サーバーは、クライアントが I/O とファイルシステムデータのキャッシュを積極的に実行している間、クライアントに一時的なアクセス許可を委任します。クライアントは、サーバーがテンポラリアクセス許可の取り消しをリクエストすると、短期間でレスポンスすることが期待されます。クライアントの不正動作からファイルシステムを保護するために、サーバーは数分後にレスポンスしない Lustre クライアントを削除できます。応答しないクライアントがサーバーリクエストに応答するまで数分間待たないようにするには、特にEC2スポットインスタンスを終了する前に、Lustre クライアントをクリーンにアンマウントすることが重要です。

EC2 スポットは、インスタンスをシャットダウンする前に 2 分前に終了通知を送信します。EC2 スポットインスタンスを終了する前に、Lustre クライアントをクリーンにアンマウントするプロセスを自動化することをお勧めします。

例 — 終了するEC2スポットインスタンスをクリーンにアンマウントするスクリプト

このサンプルスクリプトは、次の手順を実行して、終了するEC2スポットインスタンスをクリーンにアンマウントします。

  • スポット終了通知をモニタリングします。

  • 終了通知が届くと、次のようになります。

    • ファイルシステムにアクセスしているアプリケーションを停止します。

    • インスタンスが終了する前にファイルシステムをアンマウントします。

必要に応じて、特にアプリケーションを正常にシャットダウンするために、スクリプトを適応させることができます。スポットインスタンスの中断を処理するためのベストプラクティスの詳細については、「スポットインスタンス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