このドキュメントでは、Compute Engine リージョン ビュー API エンドポイントを使用してグローバル リソースをクエリする際の整合性、レプリケーションの遅延、割り当て指標の動作のトラブルシューティング方法について説明します。リージョン化された読み取り専用エンドポイントの詳細については、 グローバルリソースのリージョン ビューをご覧ください。
レプリケーションの遅延またはリソースの欠落
リージョン メタデータ エンドポイントをクエリすると、新しく作成されたグローバル リソースまたは最近更新されたメタデータ フィールドがリージョン レスポンスにすぐに表示されないことがあります。
リージョン ビュー API は、中央のグローバル データベースのリージョン読み取り専用レプリカをクエリして読み取りリクエストを処理します。標準のグローバル エンドポイントを使用してプライマリ グローバル リソースに加えられた更新は、これらのリージョン レプリカに非同期で複製されます。
この非同期レプリケーションにより、リージョン ビューは結果整合性が保たれます。中央のグローバル データベースからリージョン レプリカへの P99 レプリケーション レイテンシは通常 60 秒未満です。
解決策: この問題を解決するには、次のいずれかを試してください。
- レプリケーションを待つ: ほとんどのレプリケーションの更新は 60 秒以内に完了します。自動化されたスクリプトまたはクライアント ワークロードが新しく作成されたリソースをクエリする場合は、クライアントが指数バックオフで再試行ロジックを実装していることを確認してください。
- 透過的なフォールバックを理解する: リージョン レプリカをターゲットとする特定のリソース ID の明示的な
GETリクエストがキャッシュミスになった場合、Compute Engine は同じトランザクション内で中央のグローバル データベースへのフォールバック読み取りを自動的に試行します。 - 強整合性を確保するためにグローバル エンドポイントをクエリする: デプロイ パイプラインでレプリケーション レイテンシなしで書き込み後読み取り整合性が厳密に要求される場合は、リージョン ビューではなく、正規のグローバル エンドポイントを直接クエリします。たとえば、
projects.get、images.get、またはimages.listをクエリします。
404 Not Found レスポンス
特定のイメージまたはプロジェクト ビューを取得しようとすると、404 Not Found HTTP ステータス コードが返されることがあります。
404 Not Found エラーは、次の理由で発生する可能性があります。
- ターゲット リソースが中央のグローバル データベースに存在しない。
- ターゲット リソースが数秒以内に作成され、リージョン レプリカへのレプリケーションが完了しておらず、中央のグローバル データベースへの透過的なフォールバック リクエストがタイムアウトしたか失敗した。
- リクエスト URL で無効なリージョン パラメータまたはプロジェクト ID を指定した。
解決策: この問題を解決するには、次のことを試してください。
- 標準の
グローバル
describeまたはlistリクエスト(たとえば、gcloud compute images describe IMAGE_NAMEまたはgcloud compute project-info describe --project=PROJECT_ID)を実行して、リクエストされたリソースがグローバルに存在することを確認します。 - リクエスト URL パスを調べて、ターゲットの
REGION文字列が有効でアクティブであることを確認します。 - リソースが新しく作成された場合は、60 秒後にリクエストを再試行します。
projectViews レスポンスに quota 配列がない
リージョン projectViews.get エンドポイントを使用して compute.Project リソースをクエリすると、quota 配列がレスポンスから除外されます。
リージョンの障害分離と高可用性を維持するため、projectViews エンドポイントはリージョン
レプリカから厳密に読み取ります。ゾーン間で割り当て使用量を収集するためにクロスリージョン ファンアウトを実行しないため、quota
配列は除外されます。
解決策: この問題を解決するには、次の操作を行います。
- アプリケーションが、リージョン
projectViewsエンドポイントから返されるレスポンスにquota配列が含まれることを想定していないことを確認します。 - すべての
リージョンとゾーンで正確な割り当て構成とリアルタイムの使用状況指標を取得するには、グローバル
projects.getエンドポイントをクエリするか、 Cloud Monitoring で Compute Engine API の割り当て指標をモニタリングします。
次のステップ
- 復元力のあるコントロール プレーンの読み取りにリージョン ビューを使用するを確認する。
- 高可用性を実現するためにグローバル リソースにリージョンでアクセスする方法を学ぶ。