

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

# Amazon EC2 スポットインスタンスの使用
<a name="working-with-ec2-spot-instances"></a>

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

Amazon EC2 によりスポットインスタンスが中断される際には、スポットインスタンスの中断通知が送信されます。それにより、Amazon EC2 が中断する 2 分前にインスタンスに対して警告を出します。詳細については、「*Amazon EC2 ユーザーガイド*」の「[スポットインスタンス](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html)」を参照してください。

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

## Amazon EC2 スポットインスタンスの中断
<a name="handling-ec2-spot-interruptions-in-fsx"></a>

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

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

**Example - 終了する EC2 スポットインスタンスをクリーンにマウント解除するスクリプト**  
このサンプルスクリプトは、次の操作を実行して、終了する EC2 スポットインスタンスをクリーンにアンマウントします。  
+ スポット終了通知をモニタリングします。
+ 終了通知が届くと、次のようになります。
  + ファイルシステムにアクセスしているアプリケーションを停止します。
  + インスタンスが終了する前にファイルシステムをアンマウントします。
必要に応じて、特にアプリケーションを正常にシャットダウンするために、スクリプトを適応させることができます。スポットインスタンスの中断を処理するためのベストプラクティスの詳細については、「[EC2 スポットインスタンスの中断を処理するためのベストプラクティス](https://aws.amazon.com/blogs//compute/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/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
```