GCP 400 エラーの原因と解決方法
Google Cloud Platform (GCP) で 400 エラーが返される場合、API リクエストに含まれるパラメータに問題があることを示しています。このエラーは「クライアント側の誤り」として分類され、リクエスト自体が不正な形式であることを意味します。
よくある原因
必須フィールドの欠落または型の誤り
API リクエストに必須フィールドが含まれていないか、データ型が異なっている場合に発生します。例えば、Compute Engine インスタンス作成時に machineType(マシンタイプ)を指定しなかったり、数値で指定すべきを文字列で送信したりすると、400 エラーが返されます。
リソース識別子の書き方の誤り
プロジェクト ID、リージョン(地域)、ゾーン(データセンター)の指定が間違っている場合です。例えば us-central1-a であるべきを us-central-1-a と記載すると、API が認識できずエラーになります。
JSON フォーマットの破損
リクエストボディの JSON が正しい形式でない場合も 400 エラーの原因です。引用符の閉じ忘れ、カンマの欠落、不正な文字エンコードなどが該当します。
解決手順
1. エラーレスポンスから問題箇所を特定する
まずは API のエラーレスポンスを確認してください。details フィールドに、どのフィールドが不正かが記載されています。
gcloud compute instances create my-instance \
--zone=us-central1-a
返されたエラーメッセージを読み込み、Invalid value for field など記載されている箇所をメモします。
2. 詳細ログで原因を追跡する
gcloud コマンドに --verbosity=debug オプションを付けることで、詳細ログを表示できます。
gcloud compute instances create my-instance \
--zone=us-central1-a \
--machine-type=n1-standard-1 \
--verbosity=debug
このログにはリクエストの完全な内容が表示されるため、JSON の構文エラーなどを発見しやすくなります。
3. クライアントライブラリのバリデーション機能を活用する
Python などの公式クライアントライブラリを使用することで、リクエスト送信前にパラメータをチェックできます。
from google.cloud import compute_v1
compute_client = compute_v1.InstancesClient()
request = compute_v1.InsertInstanceRequest(
project='my-project',
zone='us-central1-a',
instance_resource=compute_v1.Instance(
name='my-instance',
machine_type='zones/us-central1-a/machineTypes/n1-standard-1',
# 必須フィールドが不足していないか確認される
)
)
operation = compute_client.insert(request=request)
ライブラリ側で型チェックが行われるため、送信前にエラーを検出できます。
それでも解決しない場合
- GCP コンソール上で同じ設定を試し、エラーメッセージを比較する
- API のドキュメントで必須フィールドの一覧を再確認する
- GCP サポートに問い合わせる際は、
--verbosity=debugの出力ログを添付するとスムーズです
免責事項:本記事の内容は、執筆時点の公開情報をもとに作成したものです。ソフトウェアの仕様は予告なく変更されることがあります。最新の情報は各ツールの公式サポートページをご確認ください。本記事の情報を利用した結果生じたいかなる損害についても、著者および運営者は責任を負いかねます。