テストをスケジュール設定する

このページでは、Fault Injection Testing でテストをスケジュールする方法と、外部スケジューリング サービスを使用して復元力テストを自動化する方法について説明します。

テストをスケジュールすると、テストプロセスを自動化し、ユーザーへの影響を最小限に抑える期間にテストを実行できます。たとえば、次のような場合です。

  • オフピーク時または計画メンテナンスの時間枠。
  • 定期的にスケジュールされたゲームデーまたはカオス エンジニアリング ドリル。
  • デプロイ前に復元力を検証するための自動テスト パイプライン(CI/CD)。

テストをスケジュールすると、実行ごとに手動で介入することなく、システムのフォールト トレランスの継続的な検証を確立できます。

スケジュールされたテストの仕組み

Fault Injection Testing には、組み込みのスケジューリング サービスは含まれていません。代わりに、Fault Injection Testing を Cloud Scheduler などの外部スケジューリング サービスと統合して、テストをスケジュールします。

テストをスケジュールするには、特定の時間に Fault Injection Testing API を呼び出すか、gcloud コマンドを実行するように外部スケジューラを構成します。この統合をサポートするため、Fault Injection Testing には、startOnCreateEnabled パラメータが用意されています。このパラメータを true に設定すると、作成直後にテストを自動的に開始するようにシステムに指示します。

スケジュールされたテストのターゲットを選択する

スケジュールされたテストのターゲット リソースは、スケジューリング構成自体ではなく、テスト テンプレート内で定義されます。Fault Injection Testing でターゲットを処理する方法は次のとおりです。

  • テスト テンプレートを作成するときに、障害のタイプとターゲット リソースの選択条件を定義します。リソースの例としては、特定の VM インスタンス、一致するタグを持つリソース、特定のゾーン内のリソースなどがあります。
  • 外部スケジューラを構成すると、API ペイロードはテスト テンプレートを参照します。
  • スケジュールされた時間に、外部スケジューラがテストの作成をトリガーします。次に、Fault Injection Testing は、その時点のテンプレートのターゲット選択ルールを評価して、影響を受けるリソースを特定します。

テンプレートがタグに基づいて VM をターゲットにしている場合、スケジュールされたテストは、テストの実行時にそのタグを持つ VM に影響します。

スケジュールされたテストを設定する

続行する前に、roles/faulttesting.operator ロールまたは roles/faulttesting.admin ロールがあることを確認してください。

コンソールと Cloud Scheduler を使用してスケジュールを構成する Google Cloud

Fault Injection Testing コンソール内でスケジュールを直接作成することはできませんが、コンソールには Cloud Scheduler でジョブを設定するために必要なパラメータが用意されています。

  1. コンソールで、[**テスト テンプレート**] ページに移動します。 Google Cloud
  2. テンプレートを選択して詳細を表示します。
  3. 詳細ページで、次の点に注意してください。

    • JSON ペイロード("startOnCreateEnabled": true を含む)。
    • テストを作成するための REST API エンドポイント URL。

    これらは Cloud Scheduler で使用します。

  4. コンソールで、 [**Cloud Scheduler**] ページに移動し、 [**ジョブを作成**] をクリックします。 Google Cloud

  5. ジョブのスケジュールとタイムゾーンを定義します。

  6. [ターゲット タイプ] で [HTTP] を選択します。

  7. [URL] を [テスト テンプレート] 詳細ページの REST API エンドポイント URL に設定します。

  8. [HTTP メソッド] を [POST] に設定します。

  9. [本文] フィールドに JSON ペイロードを入力します。

    {
      "experimentTemplate": "projects/PROJECT_ID/locations/REGION/experimentTemplates/TEMPLATE_ID",
      "startOnCreateEnabled": true,
      "description": "DESCRIPTION"
    }
    
  10. ジョブの認証を構成します。サービス アカウントの推奨事項については、ベスト プラクティス をご覧ください。

  11. [作成] をクリックします。

Google Cloud CLI を使用してスケジュールを構成する

シェルコマンドを実行するスクリプトまたはツールを使用している場合は、Cloud Scheduler または独自のスケジューラを構成して コマンドを --start-on-create-enabledフラグとともに実行するようにして、 テストをスケジュールできます。gcloud alpha fault-testing experiments create

次のコマンドを実行して、テスト インスタンスを作成してすぐに開始します。

gcloud alpha fault-testing experiments create EXPERIMENT_ID \
    --experiment-template=TEMPLATE_ID \
    --location=REGION \
    --start-on-create-enabled \
    [--description="DESCRIPTION"] \
    [--project=PROJECT_ID]
  • EXPERIMENT_ID: テスト実行の一意の識別子。このコマンドは自動化されているため、スクリプトは実行ごとに一意の ID を生成する必要があります。たとえば、タイムスタンプを追加できます: scheduled-exp-$(date +%s)
  • TEMPLATE_ID: 事前構成されたテスト テンプレートの ID。
  • REGION: テストが実行されるリージョン。 Google Cloud
  • --start-on-create-enabled: このフラグは、作成直後にテストを開始するように Fault Injection Testing に指示します。
  • DESCRIPTION: 省略可。テスト実行の説明。
  • PROJECT_ID:省略可。プロジェクト ID。 Google Cloud

テスト実行を管理する

スケジュールされた実行ごとに、新しい個別のテスト インスタンスが作成されます。これらのインスタンスは、次のコマンドを使用して管理できます。

  • すべてのテスト実行を一覧表示するには:

    gcloud alpha fault-testing experiments list --location=REGION
    
  • 特定の実行の詳細を表示するには:

    gcloud alpha fault-testing experiments describe EXPERIMENT_ID --location=REGION
    
  • 実行中のテストを早期に停止するには:

    gcloud alpha fault-testing experiments stop EXPERIMENT_ID --location=REGION
    

ベスト プラクティス

テストをスケジュールする際は、次のベスト プラクティスを考慮してください。

  • 専用のサービス アカウントを使用する。スケジューラ(Cloud Scheduler など)を構成するときは、専用のサービス アカウントに関連付けます。このサービス アカウントには、プロジェクトの roles/faulttesting.operatorroles/faulttesting.admin など、テストの管理に必要な最小限の権限のみを付与します。
  • 一意のテスト ID を生成する。スクリプトを使用してテストをトリガーする場合は、リソース名の競合を避けるため、スクリプトが実行ごとに一意のテスト ID を生成するようにします。
  • わかりやすい名前または説明を使用する。スケジュールされた実行ごとに、新しいテスト インスタンスが作成されます。 以前のテストは再開または上書きされません。わかりやすい名前または説明を使用して、実行をスケジュールにトレースできるようにします。
  • スケジュールの失敗をモニタリングする。ネットワークの問題、認証情報の有効期限切れ、API クォータが原因で、外部トリガーが失敗する可能性があります。ジョブの実行に失敗した場合やエラー レスポンスを受信した場合に通知されるように、スケジューラ ジョブにモニタリングとアラートを設定します。
  • 除外時間枠と連携する。スケジュールされた テストが有効な除外 時間枠と重複していないことを確認します。除外時間枠中にスケジュールされたテストがトリガーされると、Fault Injection Testing は実行をブロックし、テストは開始されません。