このページでは、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
)が妨げられるためにジョブが遅延していることを示しています。ジョブが
QUEUED
、SCHEDULED
、または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
権限によって管理されています。
解決策
この問題を解決するには、次の手順を行います。
- ジョブがインスタンス テンプレートを使用する場合は、インスタンス テンプレートで指定されたサービス アカウントが、ジョブの定義で指定されたサービス アカウントと一致していることを確認します。
- ジョブを作成するユーザーに、ジョブに指定されたサービス アカウントに対するサービス アカウント ユーザーロール(
roles/iam.serviceAccountUser
)が付与されていることを確認します。詳細については、アクセスを管理するをご覧ください。 - ジョブを再作成します。
繰り返しネットワーク
問題
ジョブを作成しようとすると、次の問題が発生します。
Networks must be distinct for NICs in the same InstanceTemplate
この問題は、ジョブに対してネットワークを複数回指定したために発生します。
解決策
この問題を解決するには、ジョブを再作成して、次の方法のいずれかを使用してネットワークを指定します。
- VM インスタンス テンプレート: このジョブの作成時に VM インスタンス テンプレートを使用する場合、ネットワークは、VM インスタンス テンプレートに指定する必要があります。
network
フィールドとsubnetwork
フィールド: これらのフィールドは、Batch API でジョブを作成する場合はリクエスト本文で、gcloud CLI を使用してジョブを作成する場合は JSON 構成ファイルで使用できます。--network
フラグと--subnetwork
フラグ: これらのフラグは、gcloud CLI を使用してジョブを作成するときに、gcloud batch jobs submit
コマンドで使用できます。
詳細については、ジョブのネットワークを指定するをご覧ください。
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 ジョブのログは表示されません。
解決策
この問題を解決するには、次の操作を行います。
- 現在の Cloud Logging の除外フィルタを無効にして、ログが Cloud Logging から自動的に除外されていないことを確認します。
- プロジェクトに対して Cloud Logging API が有効になっていることを確認します。
- ジョブのサービス アカウントに ログ書き込み(
roles/logging.logWriter
)IAM ロールがあることを確認します。詳細については、プロジェクトで Batch を有効にするをご覧ください。 - gcloud CLI または Batch API を使用してジョブの詳細を表示します。
ジョブの詳細により、ジョブがログを生成しなかった理由を理解でき、ログから入手したかった情報が提供される可能性があります。たとえば、次の操作を行います。
- ロギングが有効になっていることを確認するには、ジョブの
logsPolicy
フィールドを確認します。 - ジョブの実行が正常に終了したことを確認するには、ジョブの
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 イメージ内のソフトウェアが必要です。
解決策
この問題を解決するには、次の手順を行います。
ジョブの VM に、その状態を Batch サービス エージェントに報告するために必要な権限があることを確認します。
- ジョブのサービス アカウントを特定するには、gcloud CLI または Batch API を使用してジョブの詳細を表示します。サービス アカウントがリストにない場合、ジョブはデフォルトで Compute Engine のデフォルトのサービス アカウントを使用します。
ジョブのサービス アカウントに Batch Agent Reporter のロール(
roles/batch.agentReporter
)に対する権限があることを確認します。詳細については、アクセスの管理とサービス アカウントの使用を制限するをご覧ください。たとえば、Compute Engine のデフォルトのサービス アカウントに必要な権限を付与するには、次のコマンドを使用します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --role roles/batch.agentReporter \ --member serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com
ジョブの VM に適切なネットワーク アクセスがあることを確認します。詳細については、Batch ネットワークの概要と、一般的なネットワーキング問題のトラブルシューティングをご覧ください。
ジョブの VM OS イメージを指定した場合は、VM OS イメージが現在サポートされていることを確認します。
ジョブに対して 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
)。
この問題は、新しい VM OS イメージを使用することで解決できます。 ジョブでカスタム イメージを使用している場合は、サポートされている公開イメージの最新バージョンに基づいてカスタム イメージを再作成します。
詳細については、サポートされている VM OS イメージと VM OS イメージを表示するをご覧ください。
ジョブを再作成します。
Cloud Monitoring にリソース指標がない
問題
ジョブのリソース指標を表示する必要があるが、想定される指標の一部または全部が欠落しています。
この問題は、次のような理由でよく発生します。
- プロジェクトで API が有効になってませんでした。 プロジェクトの他のすべてを正しく構成しても、Cloud Monitoring API が有効になるまでリソース指標が表示されないことがあります。 Ops エージェントの場合は、Cloud Logging API も有効にする必要があります。
- 指標を表示するための十分な権限がありません。十分な権限がないと指標を表示できません。
- ジョブの VM が実行されませんでした。ジョブの VM が少なくとも 1 つ実行されるまで、ジョブの指標は生成できません。
- ジョブの構成または権限が Ops エージェントの指標をサポートしていません。 一部のリソース指標は、Ops エージェントからのみ提供できます。Ops エージェントの指標をサポートするには、ジョブが Ops エージェントの要件を満たし、Ops エージェントをインストールして、Monitoring に指標を書き込めるサービス アカウントを使用する必要があります。
- 指標を表示するには、別の方法またはフィルタを使用する必要があります。 指標を表示する方法によっては、VM が削除された後に VM の指標が表示されない場合があります。また、指標がフィルタまたは表示期間によって除外される場合は表示されません。さらに、指標グラフの解像度は調整可能なため、少量のデータでは表示が難しくなることがあります。
- 指標が削除されました。指標は削除後に表示できません。指標の削除は Monitoring の保持期間の後に自動的に行われます。
解決策
Ops エージェントの指標のみがない場合は、まず次の手順で問題を解決してみてください。
- 次の手順に沿って、ジョブの構成を確認します。
- ジョブの完全な構成情報を確認するには、gcloud CLI または Batch API を使用してジョブの詳細を表示します。出力を残りの手順で使用します。
- ジョブのサービス アカウントに、Ops エージェントの指標を書き込む権限があることを確認します。
- ジョブが Ops エージェントの要件をすべて満たしていることを確認します。
- ジョブによって Ops エージェントが正しくインストールされていることを確認します。Ops エージェントを実行可能ファイルに手動でインストールすることは可能ですが、推奨される方法は、
installOpsAgent
フィールドをtrue
に設定して、Ops エージェントを自動的にインストールすることです。
- 問題が解決しない場合は、Google Cloud Observability ドキュメントの Ops エージェントのトラブルシューティングをご覧ください。
または、次の手順で問題を解決します。
- プロジェクトで Monitoring API が有効になっていることを確認します。
- ジョブの VM の実行が開始され、実行時間が Monitoring の保持期間内であることを確認します。ジョブの実行時間は、ジョブの詳細を表示することで確認できます。
- 次の操作を行い、指標の表示に使用しているメソッドに問題がないことを確認します。
- 問題が解決しない場合は、Google Cloud Observability ドキュメントの Cloud Monitoring のトラブルシューティングをご覧ください。
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 アドレスを使用できるために発生します。
解決策
この問題を解決するには、ジョブを再作成して、次のいずれかを行います。
- 制約の対象外のプロジェクトを使用します。
- すべての VM に対する外部アクセスをブロックするジョブを作成する。
信頼できるイメージの制約に違反している
問題
失敗したジョブの 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
この問題は、ジョブのインスタンス テンプレートの不明確な問題が原因で発生します。
解決策
問題をさらにデバッグするには、次の手順を行います。
- インスタンス テンプレートを使用して MIG を作成し、より詳細な情報でエラーが発生していないかを確認します。
省略可: 詳細を確認するには、Google Cloud コンソールで MIG を作成する長時間実行オペレーションをご覧ください。
タスク失敗の終了コード
ジョブ内の特定のタスクが失敗すると、タスクはゼロ以外の終了コードを返します。
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.
この問題は、バックエンドにタイムアウトがあり、Batch がジョブの VM からの更新を受信できなくなった場合に発生します。残念ながら、ハードウェアの障害やソフトウェアの障害の多くは、VM が応答しなくなる可能性があります。たとえば、一時的なホストイベントやリソースの不足が原因で VM がクラッシュする場合があります。
解決策
この問題を解決するには、次の操作を行います。
- 問題が一時的なものであり、それ自体で解決される場合は、自動化されたタスクの再試行を使用するか、ジョブを手動で再実行して、タスクを再試行します。
問題が解決しない場合は、次のいずれか 1 つ以上を行うことで、VM が応答しなくなる原因を特定して解決します。
推奨: Google Cloud サポートまたは Cloud フォーラムの Batch ラベルを通じたサポートを利用します。
問題を特定して解決してみてください。たとえば、Compute Engine に精通している場合は、次の操作を行って、ジョブの VM のトラブルシューティングを試すことができます。
ジョブの VM の名前を特定するには、次の手順を行います。
- ジョブのログを表示します。
- フレーズ
report agent state:
を含むエントリでログをフィルタします。 ログを調べて、各タスクの試行ごとに VM を特定します。各ログは次のようになり、1 つの
instance:
フレーズと 1 つ以上のtask_id:
フレーズが含まれています。report agent state: ... instance:"INSTANCE_NAME" ... task_id:"task/JOB_UID-group0-TASK_INDEX/TASK_RETRIES/0 ..."
このログには次の値が含まれます。
INSTANCE_NAME
: VM の名前。JOB_UID
: ジョブの一意の ID(UID)。TASK_INDEX
: タスクのインデックス。TASK_RETRIES
: この VM で実行されたタスクの試行。再試行回数の形式になります。 たとえば、タスクの最初の試行の場合、この値は0
です。 自動化されたタスクの再試行を有効にしない限り、各タスクは 1 回だけ試行されます。
Compute Engine のドキュメントを使用して、ジョブの VM のトラブルシューティングを行います。たとえば、VM のシャットダウンと再起動のトラブルシューティングと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.
この問題は、次のケースで発生します。
- タスクの実行時間が
maxRunDuration
フィールドで指定された時間制限を超えている - 実行可能ファイルの実行時間が、
timeout
フィールドで指定された時間制限を超えている
どの時間制限を超過したかを特定するには、ジョブのログを表示し、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 が予期せず再作成された場合に発生します。
解決策
この問題を解決するには、自動化されたタスクの再試行を使用するか、ジョブを手動で再実行します。