トラブルシューティング

このページでは、Batch に関する問題を解決する方法について説明します。

エラー メッセージのないジョブのトラブルシューティングを行う場合、このドキュメントを確認する前に、ステータス イベントを表示して、ジョブの履歴にエラー メッセージが含まれているかどうかを確認してください。

ジョブのトラブルシューティングの詳細については、次のドキュメントをご覧ください。

ジョブ作成エラー

ジョブを作成できない場合は、このセクションのエラーのいずれかが原因となっている可能性があります。

割り当て不足

問題

ジョブを作成しようとすると、次のいずれかの問題が発生します。

  • ジョブが QUEUED 状態の場合、statusEvents フィールドに次の問題が表示されます。

    Quota checking process decides to delay scheduling for the job JOB_UID due to inadequate quotas [Quota: QUOTA_NAME, limit: QUOTA_LIMIT, usage: QUOTA_CURRENT_USAGE, wanted: WANTED_QUOTA.].
    

    この問題は、QUOTA_NAME 割り当ての現在の割り当て使用量(QUOTA_USAGE)と上限(QUOTA_LIMIT)によってジョブのリクエストされた使用量(WANT_QUOTA)が妨げられるためにジョブが遅延していることを示しています。

  • ジョブが QUEUEDSCHEDULED、または FAILED の状態の場合は、次のいずれかの問題が statusEvents フィールドに表示されます。

    RESOURCE_NAME creation failed:
    Quota QUOTA_NAME exceeded. Limit: QUOTA_LIMIT in region REGION
    
    RESOURCE_NAME creation failed:
    Quota QUOTA_NAME exceeded. Limit: QUOTA_LIMIT in zone ZONE
    

    この問題は、リクエストが QUOTA_NAME 割り当て(指定されたロケーションでの上限は QUOTA_LIMIT)を超過したためにリソースの作成に失敗したことを示します。

解決策

この問題を解決するには、次の手順を行います。

  • ジョブが遅延した場合は、割り当てが解放されるまで待ちます。

  • 割り当てが不十分なためにジョブが失敗した場合や、遅延が続く場合は、次のいずれかの方法で割り当ての不足を回避します。

    • この割り当て未満を使用するか、または別の割り当てを使用するジョブを作成します。たとえば、ジョブに異なる許可されたロケーションやリソースタイプを指定したり、割り当て使用量を複数のプロジェクトに分割したりできます。

    • Google Cloud からプロジェクトの割り当て上限の引き上げをリクエストします。

詳細については、Batchの割り当てと上限割り当ての操作をご覧ください。

サービス アカウントとして機能するための十分な権限がない

問題

ジョブを作成しようとすると、次の問題が発生します。

  • ジョブがインスタンス テンプレートを使用しない場合、問題は次のように表示されます。

    caller does not have access to act as the specified service account: SERVICE_ACCOUNT_NAME
    
  • ジョブがインスタンス テンプレートを使用している場合、問題は次のようになります。

    Error: code - CODE_SERVICE_ACCOUNT_MISMATCH, description - The service account specified in the instance template INSTANCE_TEMPLATE_SERVICE_ACCOUNT doesn't match the service account specified in the job JOB_SERVICE_ACCOUNT for JOB_UID, project PROJECT_NUMBER
    

この問題は通常、ジョブを作成するユーザーに、ジョブで使用されるサービス アカウントとして機能するために必要な権限がない場合に発生します。この権限は iam.serviceAccounts.actAs 権限によって管理されています。

解決策

この問題を解決するには、次の手順を行います。

  1. ジョブがインスタンス テンプレートを使用する場合は、インスタンス テンプレートで指定されたサービス アカウントがジョブの定義で指定されたサービス アカウントと一致していることを確認します。
  2. ジョブを作成するユーザーに、ジョブに指定されたサービス アカウントに対するサービス アカウント ユーザーロール(roles/iam.serviceAccountUser)が付与されていることを確認します。詳細については、アクセスの管理をご覧ください。
  3. ジョブを再作成します。

繰り返しネットワーク

問題

ジョブを作成しようとすると、次の問題が発生します。

Networks must be distinct for NICs in the same InstanceTemplate

この問題は、ジョブに対してネットワークを複数回指定したために発生します。

解決策

この問題を解決するには、ジョブを再作成して、次の方法のいずれかを使用してネットワークを指定します。

詳細については、ジョブのネットワークを指定するをご覧ください。

VPC Service Controls の無効なネットワーク

問題

ジョブを作成しようとすると、次の問題が発生します。

no_external_ip_address field is invalid. VPC Service Controls is enabled for the project, so external ip address must be disabled for the job. Please set no_external_ip_address field to be true

解決策

この問題は、VPC Service Controls サービス境界で外部 IP アドレスを持つ VM を使用してジョブを作成および実行しようとしている場合に発生します。

この問題を解決するには、すべての VM に対する外部アクセスをブロックするジョブを作成します。

VPC Service Controls サービス境界内のジョブのネットワークを構成する方法について、詳しくは Batch で VPC Service Controls を使用するをご覧ください。

ジョブの失敗エラー

ジョブが正しく実行されていない、または不明な理由により失敗した場合は、このセクションのエラーのいずれか、または次のタスク失敗の終了コードセクションをの終了コードのいずれかが原因である可能性があります。

Cloud Logging にログがない

問題

ジョブをデバッグする必要があるものの、Cloud Logging にジョブのログが表示されない。

この問題は、次のような理由でよく発生します。

  • プロジェクトで Cloud Logging API が有効になっていない。ジョブのログに対してその他のすべてが正しく構成されている場合でも、プロジェクトでサービスが有効になっていないとログは生成されません。
  • ジョブのサービス アカウントにログの書き込み権限がない。ジョブは、十分な権限がないとログを生成できません。
  • ジョブがログを生成するように構成されていない。Cloud Logging でログを生成するには、ジョブで Cloud Logging を有効にする必要があります。また、ジョブの runnable は、ログに表示する情報を標準出力(stdout)と標準エラー(stderr)ストリームに書き込むようにも構成する必要があります。詳細については、ログを使用してジョブを分析するをご覧ください。
  • タスクが実行されませんでした。タスクがリソースに割り当てられて実行を開始するまで、ログを生成できません。
  • Cloud Logging が、ジョブのログを自動的に除外するように構成されている。Batch ジョブのログが除外される Cloud Logging の除外フィルタを構成している場合、Batch ジョブのログは表示されません。

解決策

この問題を解決するには、次の操作を行います。

  1. 現在の Cloud Logging の除外フィルタを無効にして、ログが Cloud Logging から自動的に除外されていないことを確認します。
  2. プロジェクトに対して Cloud Logging API が有効になっていることを確認します
  3. ジョブのサービス アカウントにログ書き込みroles/logging.logWriter)の IAM ロールがあることを確認します。詳細については、プロジェクトで Batch を有効にするをご覧ください。
  4. gcloud CLI または Batch API を使用してジョブの詳細を表示します。ジョブの詳細により、ジョブがログを生成しなかった理由を理解でき、ログから入手したかった情報が提供される可能性があります。たとえば、次の操作を行います。
    1. ロギングが有効になっていることを確認するには、ジョブの logsPolicy フィールドを確認します。
    2. ジョブの実行が正常に終了したことを確認するには、ジョブの status フィールドを確認します。

変更が完了したら、ジョブを再作成し、ジョブの実行が完了するのを待ってからログを確認します。

サービス エージェント レポートがない

問題

VM の作成前に、ジョブが正しく実行されていない、もしくは失敗したジョブの statusEvents フィールドに次の問題が表示されます。

No VM has agent reporting correctly within time window NUMBER_OF_SECONDS seconds, VM state for instance VM_NAME is TIMESTAMP,agent,start

この問題は、Batch サービス エージェントに報告しているジョブの VM がないことを示しています。

この問題は、次のような理由でよく発生します。

  • ジョブの VM に十分な権限がない。ジョブの VM には、その状態を Batch サービス エージェントに報告するための特定の権限が必要です。Batch エージェント報告者のロール(roles/batch.agentReporter)をジョブのサービス アカウントに付与することで、ジョブの VM にこれらの権限を付与できます。
  • ジョブの VM にネットワークに問題があります。ジョブの VM には、Batch サービス エージェントと通信するためのネットワーク アクセスが必要です。
  • ジョブの VM が古い Batch VM OS イメージを使用しているか、古い Batch サービス エージェント ソフトウェアで VM OS イメージを使用している。ジョブの VM には、Batch サービス エージェントに報告するための現在の依存関係を提供する VM OS イメージ内のソフトウェアが必要です。

解決策

この問題を解決するには、次の手順を行います。

  1. ジョブの VM に Batch サービス エージェントに状態を報告するために必要な権限があることを確認します。

    1. ジョブのサービス アカウントを特定するには、gcloud CLI または Batch API を使用してジョブの詳細を表示します。サービス アカウントが表示されない場合、ジョブはデフォルトで Compute Engine のデフォルト サービス アカウントを使用します。
    2. ジョブのサービス アカウントに Batch Agent Reporter のロール(roles/batch.agentReporter)に対する権限があることを確認します。詳細については、アクセスの管理サービス アカウントの使用を制限するをご覧ください。

      たとえば、Compute Engine のデフォルト サービス アカウントに必要な権限を付与するには、次のコマンドを使用します。

      gcloud projects add-iam-policy-binding \
        --role roles/batch.agentReporter \
        --member serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com
      

      PROJECT_NUMBER は、使用するプロジェクト番号に置き換えます。

  2. ジョブの VM に適切なネットワーク アクセス権があることを確認します。詳細については、Batch ネットワークの概要と、一般的なネットワーキング問題のトラブルシューティングをご覧ください。

  3. ジョブに VM OS イメージを指定した場合は、現在 VM OS イメージがサポートされていることを確認します。

    1. ジョブに対して Cloud Logging を有効にした場合、次のいずれかのエージェント ログ(batch_agent_logs)でこの問題を確認できます。詳細については、ログを使用してジョブを分析するをご覧ください。

      • 古い Batch サービス エージェント ソフトウェア エラーを記録します。

        rpc error: code = FailedPrecondition, desc = Invalid resource state for BATCH_AGENT_VERSION: outdated Batch agent version used.
        

        BATCH_AGENT_VERSION は、ジョブで使用される Batch サービス エージェントと通信するためのソフトウェアのバージョンです(例: cloud-batch-agent_20221103.00_p00)。

      • 古い Batch VM OS イメージのエラーを記録します。

        rpc error: code = FailedPrecondition, desc = Invalid resource state for BATCH_VM_OS_IMAGE_NAME: outdated Batch image version.
        

        BATCH_VM_OS_IMAGE_NAME は、ジョブで使用される Batch の VM OS イメージの特定のバージョンです(例: batch-debian-11-20220909-00-p00)。

    2. この問題を解決するには、新しい VM OS イメージを使用します。ジョブがカスタム イメージを使用している場合は、サポートされている公開イメージの最新バージョンのいずれかに基づいてカスタム イメージを再作成します。

      詳細については、サポートされている VM OS イメージVM OS イメージを表示するをご覧ください。

  4. ジョブを再作成します。

VM 外部 IP アドレスの制約に違反している

問題

失敗したジョブの statusEvents フィールドに次の問題が表示されます。

Instance VM_NAME creation failed: Constraint constraints/compute.vmExternalIpAccess violated for project PROJECT_NUMBER.
Add instance VM_NAME to the constraint to use external IP with it.

この問題は、プロジェクト、フォルダ、または組織で compute.vmExternalIpAccess 組織のポリシー制約が設定され、許可リストに登録された VM のみが外部 IP アドレスを使用できるために発生します。

解決策

この問題を解決するには、ジョブを再作成して、次のいずれかを行います。

信頼できるイメージの制約に違反している

問題

失敗したジョブの statusEvents フィールドに次の問題が表示されます。

Instance VM_NAME creation failed: Constraint constraints/compute.trustedImageProjects violated for project PROJECT_ID. Use of images from project batch-custom-image is prohibited.

解決策

この問題は、プロジェクトで信頼できるイメージ(compute.trustedImageProjects)のポリシー制約が設定されているため、batch-custom-image イメージ プロジェクトにある Batch のイメージが許可されないために発生します。

この問題を解決するには、少なくとも次のうちの 1 つ以上を行います。

  • ジョブを再作成して、信頼できるイメージのポリシー制約によってすでに許可されている VM OS イメージを指定します。
  • batch-custom-image イメージ プロジェクトからの VM OS イメージが許可されるように、信頼できるイメージのポリシー制約の変更を許可するように管理者に依頼します。手順については、Batch の VM OS イメージへのアクセスを制御するをご覧ください。

インスタンス テンプレートの使用中にジョブが失敗しました

問題

インスタンス テンプレートを使用する失敗したジョブの statusEvents フィールドに次の問題が表示されます。

INVALID_FIELD_VALUE,BACKEND_ERROR

この問題は、ジョブ インスタンス テンプレートの問題が不明瞭であることが原因です。

解決策

問題をさらにデバッグするには、次の手順を行います。

  1. インスタンス テンプレートを使用して MIG を作成し、エラーが発生しているときに詳細を確認する。
  2. 省略可: 詳細については、Google Cloud コンソールで MIG を作成する長時間実行オペレーションをご覧ください。

    [Compute Engine オペレーション] に移動

タスク失敗の終了コード

ジョブ内の特定のタスクが失敗した場合、タスクはゼロ以外の終了コードを返します。ignoreExitStatus フィールドの構成方法によっては、失敗したタスクによってジョブが失敗する場合があります。

Batch には、実行可能で定義した終了コードに加えて、複数の予約済みの終了コード(次のような終了コード)があります。

VM プリエンプション(50001)

問題

ジョブの statusEvents フィールドに次の問題が表示されます。

Task state is updated from PRE-STATE to FAILED on zones/ZONE/instances/INSTANCE_ID due to Spot Preemption with exit code 50001.

この問題は、実行時にジョブの Spot VM がプリエンプトされた場合に発生します。

解決策

この問題を解決するには、以下のいずれかを行います。

  • 自動化されたタスクの再試行を使用するか、ジョブを手動で再実行して、タスクを再試行します。
  • プリエンプションがないことを保証するには、標準プロビジョニング モデルで VM を使用します。

VM レポートのタイムアウト(50002)

問題

ジョブの statusEvents フィールドに次の問題が表示されます。

Task state is updated from PRE-STATE to FAILED on zones/ZONE/instances/INSTANCE_ID due to Batch no longer receives VM updates with exit code 50002.

この問題は、ジョブの VM が更新を受信できなくなったために、バックエンドでタイムアウトが発生した場合に発生します。

解決策

この問題を解決するには、自動化されたタスクの再試行を使用するか、ジョブを手動で再実行します。

実行中に VM が再起動した(50003)

事象

ジョブの statusEvents フィールドに次の問題が表示されます。

Task state is updated from PRE-STATE to FAILED on zones/ZONE/instances/INSTANCE_ID due to VM is rebooted during task execution with exit code 50003.

この問題は、ジョブの VM が実行時に予期せず再起動した場合に発生します。

解決策

この問題を解決するには、自動化されたタスクの再試行を使用するか、ジョブを手動で再実行します。

VM とタスクが応答しない(50004)

問題

ジョブの statusEvents フィールドに次の問題が表示されます。

Task state is updated from PRE-STATE to FAILED on zones/ZONE/instances/INSTANCE_ID due to tasks cannot be canceled with exit code 50004.

この問題は、タスクが応答しない時間制限に達し、キャンセルできない場合に発生します。

解決策

この問題を解決するには、自動化されたタスクの再試行を使用するか、ジョブを手動で再実行します。

タスクが最大ランタイム(50005)を超えて実行される

事象

ジョブの statusEvents フィールドに次の問題が表示されます。

Task state is updated from PRE-STATE to FAILED on zones/ZONE/instances/INSTANCE_ID due to task runs over the maximum runtime with exit code 50005.

この問題は、次のケースで発生します。

超過した時間制限を具体的に特定するには、ジョブのログを表示し、50005 終了コードが記載されたログを探します。このログの textPayload フィールドは、制限時間を超過した場所と日時を示します。

解決策

この問題を解決するには、制限時間を超えたタスクまたは実行可能物が必要とする合計実行時間を確認します。次に、以下のいずれかを行います。

  • 実行時間が一貫していないタスクや実行可能ファイルなど、このエラーが予想される場合にのみ、ジョブを再作成し、成功率を向上させるためにタスクの再試行を自動化するように構成してみてください。

  • それ以外の場合で、タスクまたは実行可能なものが一貫して、意図的に、現在のタイムアウトが許容するよりも多くの時間を必要とする場合は、より長いタイムアウトを設定します。

実行中に VM が再作成された(50006)

問題

ジョブの statusEvents フィールドに次の問題が表示されます。

Task state is updated from PRE-STATE to FAILED on zones/ZONE/instances/INSTANCE_ID due to VM is recreated during task execution with exit code 50006.

この問題は、ジョブの VM が実行時に予期せず再作成された場合に発生します。

解決策

この問題を解決するには、自動化されたタスクの再試行を使用するか、ジョブを手動で再実行します。

次のステップ