このページでは、Cloud Scheduler の問題を解決する方法について説明します。
Cloud Scheduler は、各ジョブ実行の開始時と終了時にログを公開します。Cloud Scheduler で使用可能な監査ログなど、特定のジョブのログを取得、表示、分析できます。詳細については、ログの表示をご覧ください。
デフォルトでは、Cloud Scheduler ジョブがターゲット サービス(ジョブ リクエスト ハンドラ)から確認応答を受信しない場合、ジョブは失敗したと見なされます。Cloud Scheduler は、構成した指数バックオフに従ってジョブを再試行します。
Google Cloud サービスに影響するインシデントについては、Google Cloud Service Health ダッシュボードと Cloud Scheduler に関して報告されているすべてのインシデントをご覧ください。
ダウンストリーム サービスの問題によりジョブが失敗する
ジョブの失敗は、Cloud Scheduler 自体ではなく、Cloud Scheduler がターゲットとするダウンストリーム サービス(Cloud Run など)の問題が原因である可能性があります。次の条件が満たされている場合は、ダウンストリーム サービスの問題が疑われます。
- Cloud Scheduler の権限が正しく設定されている。
- Cloud Scheduler がターゲット サービスに正常に到達できる。
- Cloud Scheduler 実行ログのエラー メッセージは、ダウンストリーム サービスから送信されます。
この問題を解決するには、次の操作を行います。
- ダウンストリーム サービスを直接呼び出す: Cloud Scheduler を使用せずにダウンストリーム サービスを正常に呼び出すことができることを確認します。呼び出しが成功した場合は、Cloud Scheduler が問題の原因である可能性が高くなります。呼び出しが失敗した場合は、ダウンストリーム サービスでさらにデバッグを行う必要があります。
- 宛先サービスログを調べる: 宛先サービスのログを調べて、出力されているエラーを特定し、それに応じてトリアージします。
- 長時間実行オペレーションを探す: Cloud Scheduler が長時間実行オペレーション(30 分以上)に対して HTTP
504
エラーを返す場合は、宛先サービスでリクエスト タイムアウトが長くなっている可能性があるため、宛先サービスログで実行が成功したか失敗したかを確認します。このようなシナリオでは、Cloud Scheduler はタイムアウトしますが、宛先サービスはタイムアウトしません。
ジョブが権限エラーで失敗する
権限は、どのプリンシパルがリソースにアクセスできるか、どのオペレーションが許可されるかを制御します。権限が正しく構成されていないと、ジョブの実行が中断され、権限拒否エラーが発生する可能性があります。監査ログには、すべての権限変更の詳細な記録が提供されるため、これらの問題の原因を特定できます。
Cloud Scheduler ジョブが権限エラーで失敗すると、実行ログに "debugInfo":"URL_ERROR-ERROR_OTHER. Original HTTP response code number = 403"
のようなメッセージが表示されることがあります。
この問題を解決するには、次のいずれか 1 つ以上の確認を行います。
サービス エージェントに付与された IAM ロールを確認する: Cloud Scheduler サービス エージェントには、Cloud Scheduler サービス エージェント(
roles/cloudscheduler.serviceAgent
)ロールが必要です。このロールがないと、Cloud Scheduler ジョブは失敗します。このロールは、Cloud Scheduler サービス エージェントに手動で付与できます。手動での付与が必要になるのは、Cloud Scheduler API を 2019 年 3 月 19 日より前に有効にした場合、または Cloud Scheduler サービス エージェントのロールを削除した場合のみです。詳細については、Cloud Scheduler サービス エージェントのロールを付与するをご覧ください。サービス アカウントの権限を確認する: ジョブにアタッチされているサービス アカウントに、宛先サービスを呼び出すための正しい権限とスコープがあることを確認します。これには、ターゲットが別のプロジェクトにある場合や、中間サービスの最終ターゲットである場合も含まれます。ターゲットが Google Cloud内にある場合は、サービス アカウントに必要なロールが付与されていることを確認します。 Google Cloud 内の各サービスには特定のロールが必要です。生成されたトークンは受信側のサービスによって自動的に検証されます。たとえば、Cloud Run と Cloud Run functions の場合は、
Cloud Run Invoker
ロールを付与する必要があります。ターゲットが Google Cloudの外部にある場合、受信サービスはトークンを手動で確認する必要があります。詳細については、Cloud Scheduler に対して認証すると HTTP ターゲットで認証を使用するをご覧ください。VPC Service Controls の違反を確認する: VPC Service Controls は、データ漏洩を防ぐためのセキュアな境界を設定できる Google Cloudの機能です。VPC Service Controls に起因するエラーかどうかを特定するには、VPC Service Controls が有効で、使用するプロジェクトとサービスに適用されているかどうかを確認します。プロジェクトとサービスが VPC Service Controls で保護されているかどうかを確認するには、そのリソース階層レベルで VPC Service Controls ポリシーを確認します。
問題の範囲を把握するには、監査ログから VPC Service Controls エラーを取得します。
-
Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。
検索バーを使用してこのページを検索する場合は、小見出しが [Logging] の結果を選択します。
次の条件で監査ログをクエリします。
severity="ERROR" AND protoPayload.status.details.violations.type="VPC_SERVICE_CONTROLS"
具体的には、エラー メッセージに次のテキストが含まれることがあります。
Request is prohibited by organization's policy
Request violates VPC Service Controls
VPC Service Controls の構成時に発生する可能性のある問題の詳細については、一般的な問題のトラブルシューティングをご覧ください。
-
プライベート エンドポイントを確認する: Cloud Scheduler は、VPC Service Controls の境界内の Cloud Run、Cloud Run functions、 Google Cloud API などの特定のプライベート エンドポイントのみを呼び出すことができます。宛先サービスの上り(内向き)設定(Cloud Run での上り(内向き)ネットワークを制限するなど)と、アタッチされたサービス アカウントの権限を確認します。
URL_ERROR-ERROR_DNS
エラー メッセージが表示されることがあります。詳細については、このドキュメントの宛先ターゲットに到達できないためジョブが失敗するをご覧ください。
宛先ターゲットに到達できないため、ジョブが失敗する
この問題は、宛先ターゲットに到達できないため、Cloud Scheduler ジョブが失敗した場合に発生します。実行ログに URL_ERROR
または URL_UNREACHABLE
で始まるエラーが表示されます。
この問題を解決するには、受信したエラー メッセージに応じて、次のいずれかのチェックを行います。
URL_ERROR-ERROR_AUTHENTICATION
: HTTP401 (Unauthorized)
または HTTP407 (Proxy Authentication Required)
エラーが返されます。宛先ターゲットで認証が必要ですが、Cloud Scheduler リクエストに有効な認証トークンが含まれていません。たとえば、リクエストに認可ヘッダーがないか、認証情報が無効です。ジョブの認証設定を確認します。詳細については、Cloud Scheduler に対して認証すると HTTP ターゲットで認証を使用するをご覧ください。URL_ERROR-ERROR_DNS
: ドメイン ネーム システム(DNS)を使用してホスト名を解決できなかったため、URL の取得が失敗したことを示します。たとえば、ホスト名が存在しないか、関連付けられた IP アドレスがない場合などです。エラー メッセージにOriginal HTTP response code number = 0
というテキストが含まれる場合があります。ホスト名の有効性を確認し、プライベート エンドポイントを呼び出すときに、Cloud Scheduler でサポートされていることを確認して、上り(内向き)設定を確認します。URL_ERROR-ERROR_NOT_FOUND
: ウェブサーバーが HTTP404 Not Found
エラーを返します。ターゲット URL が正しく、リソースが存在するかどうかを確認します。URL_ERROR-ERROR_OTHER
: これは、以前に詳細が説明されていない一般的な HTTP4xx
エラーを指します。ログを調べて、元の HTTP レスポンス コードを取得します。HTTP403
エラーが表示された場合は、このドキュメントの権限エラーでジョブが失敗するを参照してください。URL_UNREACHABLE-UNREACHABLE_5xx
: 宛先ターゲットが HTTP5xx
または429
エラーを返します。これは一時的な状態(サーバーの過負荷など)である可能性があります。宛先ターゲットのログを確認して、問題をデバッグします。URL_UNREACHABLE-UNREACHABLE_CONNECTION_RESET
: ピアによって接続がリセットされました。外部サーバー側の問題を確認します。URL_UNREACHABLE-UNREACHABLE_ERROR
: ネットワーク エラーを示します。ターゲット URL が正しいかどうか、アクセスをブロックしているファイアウォール ルールがないかどうかを確認します。
ジョブの実行に関する問題
Cloud Scheduler ジョブは、定義された時刻または一定の間隔で実行されます。ジョブの実行中に次の問題が発生することがあります。
以前は機能していたジョブが実行を停止する
この問題は、Cloud Scheduler API が無効になっているため、以前に正常に実行された Cloud Scheduler ジョブの実行が停止した場合に発生します。API が無効になった時刻を確認するには、次の条件で監査ログをクエリします。
resource.type="audited_resource" AND protoPayload.serviceName="cloudscheduler.googleapis.com" AND operation.producer="serviceusage.googleapis.com" AND protoPayload.authorizationInfo.permission="serviceusage.services.disable"
この問題を解決するには、Cloud Scheduler API を有効にします。
夏時間によりジョブの実行が不規則になる
Google Cloud コンソールを使用して Cloud Scheduler ジョブを作成する場合は、タイムゾーンを指定する必要があります。Google Cloud CLI を使用する場合は、--time-zone
フラグを使用してタイムゾーンを任意で指定できます。指定しない場合、使用されるデフォルトのタイムゾーンは協定世界時(UTC
)です。
この問題は、ジョブが UTC 以外のタイムゾーンで構成され、夏時間(DST)の変更により実行が不規則になった場合に発生します。これは想定された挙動です。
ジョブで非常に正確な周期が必要な場合は、DST を検出しないタイムゾーンを選択する必要があります。特に、この問題を完全に回避するには、UTC タイムゾーンを使用するようにジョブ スケジュールを構成します。
詳細については、cron ジョブの形式とタイムゾーンをご覧ください。
次のステップ
Cloud Scheduler のドキュメントで問題の解決策が見つからない場合は、次のオプションを検討してください。
- Stack Overflow で質問してコミュニティからサポートを受けるか、
google-cloud-scheduler
タグを使用して類似の問題を検索する。 - Google Cloud カスタマーケアに問い合わせて、サポートケースを登録します。
- 公開バグトラッカーを使用して、バグの報告や機能リクエストを行う。
詳細については、Cloud Scheduler のサポートをご覧ください。