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 の出力ログを添付するとスムーズです

免責事項:本記事の内容は、執筆時点の公開情報をもとに作成したものです。ソフトウェアの仕様は予告なく変更されることがあります。最新の情報は各ツールの公式サポートページをご確認ください。本記事の情報を利用した結果生じたいかなる損害についても、著者および運営者は責任を負いかねます。