チュートリアル: を使用してスポットインスタンスの中断をテストする AWS FIS - AWS フォールトインジェクションサービス

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

チュートリアル: を使用してスポットインスタンスの中断をテストする AWS FIS

スポットインスタンスは、オンデマンド料金と比較して最大 90% の割引で利用可能な予備のEC2容量を使用します。ただし、Amazon EC2は容量を戻す必要がある場合にスポットインスタンスを中断できます。スポットインスタンスを使用する場合には、中断に備えておく必要があります。詳細については、「Amazon EC2 ユーザーガイド」の「スポットインスタンスの中断」を参照してください。

以下を使用できます..。 AWS Fault Injection Service (AWS FIS) は、アプリケーションがスポットインスタンスの中断をどのように処理するかをテストします。このチュートリアルを使用して、 を使用する実験テンプレートを作成します。 AWS FIS aws:ec2:send-spot-instance-interruptions スポットインスタンスの 1 つを中断する アクション。

または、Amazon EC2コンソールを使用して実験を開始するには、「Amazon ユーザーガイド」の「スポットインスタンスの中断を開始する」を参照してください。 EC2

前提条件

を使用する前に AWS FIS スポットインスタンスを中断するには、次の前提条件を満たします。

1. IAM ロールを作成する

ロールを作成し、 を有効にするポリシーをアタッチする AWS FIS ユーザーに代わってaws:ec2:send-spot-instance-interruptionsアクションを実行する 。詳細については、「AWS FIS 実験用の IAM ロール」を参照してください。

2. へのアクセスを確認する AWS FIS

にアクセスできることを確認します。 AWS FIS。詳細については、「」を参照してくださいAWS FIS ポリシーの例

3. (オプション) スポットインスタンスリクエストを作成する

この実験に新しいスポットインスタンスを使用する場合は、run-instances コマンドでスポットインスタンスをリクエストします。デフォルトでは、スポットインスタンスは中断されると終了します。stop に割り込み動作を設定した場合は、タイプを persistent に設定する必要もあります。休止状態プロセスがすぐに始まるので、このチュートリアルでは、中断動作を hibernate に設定しないでください。

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

次は、spot-options.json ファイルの例です。

{ "MarketType": "spot", "SpotOptions": { "SpotInstanceType": "persistent", "InstanceInterruptionBehavior": "stop" } }

サンプルコマンドの --query オプションを使用すると、コマンドはスポットインスタンスのインスタンス ID のみが返ります。以下は出力例です。

[ "i-0abcdef1234567890" ]
4. タグを追加して AWS FIS はターゲットスポットインスタンスを識別できます

create-tags コマンドを使用してタグを追加する Name=interruptMe をターゲットのスポットインスタンスに。

aws ec2 create-tags \ --resources i-0abcdef1234567890 \ --tags Key=Name,Value=interruptMe

ステップ 1: 実験テンプレートを作成する

を使用して実験テンプレートを作成する AWS FIS コンソール。テンプレートで、実行するアクションを指定します。アクションは、指定されたタグでスポットインスタンスを中断します。タグ付きのスポットインスタンスが複数ある場合は、 AWS FIS は、そのうちの 1 つをランダムに選択します。

実験テンプレートを作成するには
  1. を開く AWS FIS の コンソールhttps://console.aws.amazon.com/fis/

  2. ナビゲーションペインで、[実験テンプレート] を選択します。

  3. [実験テンプレートの作成] を選択します。

  4. [説明と名前] に、テンプレートの説明と名前を入力します。

  5. [操作] で、以下の作業を行います。

    1. [アクションの追加] を選択します。

    2. アクションに名前を入力します。例えば、interruptSpotInstance と入力します。

    3. アクションタイプ でaws:ec2:send-spot-instance-interruptions を選択します。

    4. ターゲット では、ターゲットを次のように保持します。 AWS FIS がユーザーに代わって作成します。

    5. アクションパラメータ中断前の期間 には、2 分 () を指定しますPT2M。

    6. [Save] を選択します。

  6. [ターゲット] で、以下の作業を行います。

    1. そのターゲットの編集を選択します。 AWS FIS は、前のステップで自動的に作成されます。

    2. デフォルト名を、よりわかりやすい名前に置き換えます。例えば、oneSpotInstance と入力します。

    3. [リソースタイプ]aws:ec2:spot-instance になっていることを確認します。

    4. [ターゲットメソッド] に、[リソース] タグ、フィルター、パラメーターを選択します。

    5. [リソースタグ] で、[新しいタグを追加] を選択し、タグのキーとタグの値を入力します。このチュートリアルの前提条件の説明に従って、スポットインスタンスに追加したタグを使用して割り込みます。

    6. [リソースフィルター][新しいフィルターを追加] を選択し、パス State.Name と値 running を入力します。

    7. [選択モード] で、[カウント] を選択します。[リソース数] に、「1」と入力します。

    8. [Save] を選択します。

  7. サービスアクセス で、既存のIAMロール を使用 を選択し、このチュートリアルの前提条件で説明されているように作成したIAMロールを選択します。ロールが表示されない場合は、必要な信頼関係があることを確認してください。詳細については、「AWS FIS 実験用の IAM ロール」を参照してください。

  8. (オプション)[タグ] では、[タグの追加] を選択して、タグのキーと値を指定します。追加するタグは、テンプレートを使用して実行される実験ではなく、実験テンプレートに適用されます。

  9. [実験テンプレートの作成] を選択します。確認を求められたら、「create」と入力して、[実験テンプレートを作成する] を選択します。

(オプション) 実験テンプレートを表示するには JSON

[エクスポート] タブを選択します。以下は、前述のコンソール手順でJSON作成された の例です。

{ "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" } }

ステップ 2: 実験を開始する

実験テンプレートの作成が完了したら、それを使用して実験を開始できます。

実験を開始するには
  1. 作成した実験テンプレートの詳細ページに移動する必要があります。または、[実験テンプレート] の ID を選択して、詳細ページを開きます。

  2. [実験を開始する] を選択します。

  3. (オプション) 実験にタグを追加するには、[新しいタグを追加] を選択し、タグキーとタグ値を入力します。

  4. [実験を開始する] を選択します。確認を求められたら、start を入力して、[実験を開始する] を選択します。

ステップ 3: 実験の進行状況を追跡する

実験の完了、停止、または失敗するまで、実行中の実験の進行状況を追跡できます。

実験の進行状況を追跡するには
  1. 始めたばかりの実験の詳細ページにいるはずです。または、[Experiments (実験)] の ID を選択して、詳細ページを開きます。

  2. 実験の状態を表示するには、[詳細] ペインの [状態] を確認してください。詳細については、「実験状態」を参照してください。

  3. 実験の状態が [実行中] のときは、次のステップに進みます。

ステップ 4: 実験結果の検証

この実験のアクションが完了すると、以下の状況が発生します。

インスタンスが実験によって中断されたことを検証するには
  1. で Amazon EC2コンソールを開きますhttps://console.aws.amazon.com/ec2/

  2. ナビゲーションペインで、[スポットリクエスト] を開いてから、別のブラウザタブまたはウィンドウで[インスタンス] を開きます。

  3. スポットリクエストで、スポットインスタンスリクエストを選択します。初期ステータスは、fulfilled です。実験が完了すると、ステータスは次のように変わります。

    • terminate - ステータスが instance-terminated-by-experiment に変わります。

    • stop - ステータスが marked-for-stop-by-experiment そしてその後 instance-stopped-by-experiment に変わります。

  4. インスタンスで、スポットインスタンスを選択します。初期ステータスは、Running です。スポットインスタンスの中断通知を受け取った後 2 分後、ステータスは次のように変化します。

    • stop - ステータスが Stopping そしてその後 Stopped に変わります。

    • terminate - ステータスが Shutting-down そしてその後 Terminated に変わります。

ステップ 5:クリーンアップ

この実験のテストスポットインスタンスを中断動作 stop で作成した場合で、そのスポットインスタンスが必要でなくなったら、スポットインスタンスリクエストをキャンセルし、スポットインスタンスを終了することができます。

を使用してリクエストをキャンセルし、インスタンスを終了するには AWS CLI
  1. cancel-spot-instance-requests コマンドを使用して、スポットインスタンスリクエストをキャンセルします。

    aws ec2 cancel-spot-instance-requests --spot-instance-request-ids sir-ksie869j
  2. インスタンスを終了するには、terminate-instances コマンドを使用します。

    aws ec2 terminate-instances --instance-ids i-0abcdef1234567890

実験テンプレートが不要になった場合には、それを削除することができます。

を使用して実験テンプレートを削除するには AWS FIS コンソール
  1. を開く AWS FIS の コンソールhttps://console.aws.amazon.com/fis/

  2. ナビゲーションペインで、[Experiment templates (実験テンプレート)] を選択します。

  3. 実験テンプレートを選択し、[アクション][実験テンプレートの削除] を選択します。

  4. 確認を求められたら、delete と入力し、[実験テンプレートの削除] を選択します。