このページでは、API Gateway の一般的なトラブルシューティングについて説明します。
「gcloud api-gateway」コマンドを実行できない
gcloud api-gateway ...
コマンドを実行するには、Cloud SDK を更新し、必要な Google サービスを有効にする必要があります。詳細については、開発環境の構成をご覧ください。
コマンド「gcloud api-gateway api-configs create」を実行すると、「サービス アカウントが存在しません」と表示される
gcloud api-gateway api-configs create ...
コマンドを実行したときに次の形式のエラーが発生した場合:
ERROR: (gcloud.api-gateway.api-configs.create) FAILED_PRECONDITION: Service Account "projects/-/serviceAccounts/service_account_email" does not exist
次のコマンドを再実行しますが、今回は --backend-auth-service-account
オプションを含めて、使用するサービス アカウントのメールアドレスを明示的に指定します。
gcloud api-gateway api-configs create CONFIG_ID \ --api=API_ID --openapi-spec=API_DEFINITION \ --project=PROJECT_ID --backend-auth-service-account=SERVICE_ACCOUNT_EMAIL
開発環境の構成の説明に従って、サービス アカウントに必要な権限がすでに割り当てられていることを確認します。
API リクエストが HTTP 403 エラーを返す
デプロイされた API に対するリクエストで API クライアントに HTTP 403 エラーが返された場合は、リクエストされた URL が有効であっても、なんらかの理由でアクセスが禁止されています。
デプロイされた API には、API 構成の作成時に使用したサービス アカウントに付与されているロールに関連付けられた権限があります。一般に、HTTP 403 エラーは、サービス アカウントにバックエンド サービスへのアクセスに必要な権限がないためです。
同じ Google Cloud Platform(GCP)で API とバックエンド サービスを定義した場合は、サービス アカウントに Editor
ロール、またはバックエンド サービスにアクセスするために必要なロールが割り当てられていることを確認します。たとえば、バックエンド サービスが Cloud Functions を使用して実装されている場合、サービス アカウントに Cloud Function Invoker
ロールが割り当てられていることを確認します。
API リクエストが HTTP 401 または 500 エラーを返す
デプロイされた API に対するリクエストで API クライアントに HTTP 401 または 500 エラーが返された場合は、バックエンド サービスを呼び出す API 構成を作成たときに使用されたサービス アカウントの使用に問題がある可能性があります。
デプロイされた API には、API 構成の作成時に使用したサービス アカウントに付与されているロールに関連付けられた権限があります。サービス アカウントでは、API サービスのデプロイ時に両方とも存在することが確認され、API のデプロイ時に API Gateway で使用できます。
ゲートウェイのデプロイ後にサービス アカウントが削除されるか無効になると、次の一連のイベントが発生する可能性があります。
サービス アカウントを削除または無効にした直後に、ゲートウェイのログに 401 HTTP レスポンスが表示されることがあります。ログエントリの
jsonPayload
でresponse_code_details
フィールドが"via_upstream"
に設定されている場合、サービス アカウントの削除または無効化がエラーの原因であることを示します。API Gateway のログに対応するログエントリがないと、HTTP 500 エラーが表示されることもあります。サービス アカウントが削除または無効になった直後にゲートウェイへのリクエストがない場合、HTTP 401 レスポンスは表示されませんが、対応する API Gateway ログがないと、HTTP 500 エラーが表示され、ゲートウェイのサービス アカウントがアクティブではなくなった可能性があります。
ログ情報を表示できない
API が正しく応答していても、ログにデータが含まれていない場合は、通常、API Gateway に必要なすべての Google サービスが有効になっていないことを意味します。
API Gateway では、次の Google サービスを有効にする必要があります。
名前 | タイトル |
---|---|
apigateway.googleapis.com |
API Gateway API |
servicemanagement.googleapis.com |
Service Management API |
servicecontrol.googleapis.com |
Service Control API |
必要なサービスが有効になっていることを確認するには:
gcloud services list
必要なサービスが表示されない場合は、次のコマンドを使用してサービスを有効にします。
gcloud services enable apigateway.googleapis.comgcloud services enable servicemanagement.googleapis.com
gcloud services enable servicecontrol.googleapis.com
gcloud
サービスの詳細については、gcloud
サービスをご覧ください。