Información general sobre la solución de problemas

En esta página se proporciona información general para solucionar problemas de API Gateway.

No se pueden ejecutar comandos "gcloud api-gateway"

Para ejecutar los comandos de gcloud api-gateway ..., debes haber actualizado la CLI de Google Cloud y haber habilitado los servicios de Google necesarios. Consulta más información sobre cómo configurar tu entorno de desarrollo.

El comando "gcloud api-gateway api-configs create" indica que la cuenta de servicio no existe

Si ejecutas el comando gcloud api-gateway api-configs create ... y recibes un error con el siguiente formato:

ERROR: (gcloud.api-gateway.api-configs.create) FAILED_PRECONDITION:
Service Account "projects/-/serviceAccounts/service_account_email" does not exist

Vuelve a ejecutar el comando, pero esta vez incluye la opción --backend-auth-service-account para especificar explícitamente la dirección de correo de la cuenta de servicio que quieras usar:

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

Asegúrate de que ya has asignado los permisos necesarios a la cuenta de servicio, tal como se describe en el artículo Configurar el entorno de desarrollo.

Determinar el origen de las respuestas de error de la API

Si las solicitudes a tu API implementada dan como resultado un error (códigos de estado HTTP 400 a 599), puede que no quede claro en la propia respuesta si el error procede de la pasarela o de tu backend. Para determinarlo, haz lo siguiente:

  1. Ve a la página Explorador de registros y selecciona tu proyecto.

    Ir a Explorador de registros

  2. Filtra el recurso de la pasarela pertinente con la siguiente consulta de registro:

    resource.type="apigateway.googleapis.com/Gateway"
    resource.labels.gateway_id="GATEWAY_ID"
    resource.labels.location="GCP_REGION"

    Donde:

    • GATEWAY_ID especifica el nombre de la pasarela.
    • GCP_REGION es la Google Cloud región de la pasarela implementada.
  3. Busca la entrada de registro que coincida con la respuesta de error HTTP que quieras investigar. Por ejemplo, filtra por httpRequest.status.

  4. Inspecciona el contenido del campo jsonPayload.responseDetails.

Si el valor del campo jsonPayload.responseDetails es "via_upstream", significa que la respuesta de error procede de tu backend y tendrás que solucionar los problemas directamente en él. Si es otro valor, la respuesta de error procede de la pasarela. Consulta las siguientes secciones de este documento para obtener más consejos para solucionar problemas.

La solicitud a la API devuelve un error HTTP 403

Si una solicitud a una API implementada devuelve un error HTTP 403 al cliente de la API, significa que la URL solicitada es válida, pero el acceso está prohibido por algún motivo.

Una API implementada tiene los permisos asociados a los roles concedidos a la cuenta de servicio que usaste al crear la configuración de la API. Normalmente, el error HTTP 403 se debe a que la cuenta de servicio no tiene los permisos necesarios para acceder al servicio de backend.

Si has definido la API y el servicio backend en el mismo proyecto de Google Cloud, asegúrate de que la cuenta de servicio tenga asignado el rol Editor o el rol necesario para acceder al servicio backend. Por ejemplo, si el servicio backend se implementa con funciones de Cloud Run, asegúrate de que la cuenta de servicio tenga asignado el rol Cloud Function Invoker.

La solicitud a la API devuelve un error HTTP 401 o 500

Si una solicitud a una API implementada devuelve un error HTTP 401 o 500 al cliente de la API, puede que haya un problema al usar la cuenta de servicio que se usó al crear la configuración de la API para llamar al servicio backend.

Una API implementada tiene los permisos asociados a los roles concedidos a la cuenta de servicio que usaste al crear la configuración de la API. Se comprueba la cuenta de servicio para asegurarse de que existe y de que la pasarela de APIs puede usarla cuando se implementa la API.

Si la cuenta de servicio se elimina o inhabilita después de implementar la pasarela, puede producirse la siguiente secuencia de eventos:

  1. Inmediatamente después de que se elimine o inhabilite la cuenta de servicio, es posible que veas respuestas HTTP 401 en los registros de tu pasarela. Si el campo jsonPayload.responseDetails tiene el valor "via_upstream" en el jsonPayload de la entrada de registro, significa que el error se debe a que se ha eliminado o inhabilitado la cuenta de servicio.

  2. También puede que veas un error HTTP 500 sin ninguna entrada de registro correspondiente en los registros de API Gateway. Si no se envían solicitudes a tu pasarela inmediatamente después de que se elimine o inhabilite la cuenta de servicio, es posible que no veas las respuestas HTTP 401, pero los errores HTTP 500 sin los registros de la pasarela de la API correspondientes indican que la cuenta de servicio de la pasarela puede que ya no esté activa.

Si el backend de la solicitud fallida es otra API (como bigquery.googleapis.com), verás respuestas HTTP 401 en los registros de tu pasarela con el campo jsonPayload.responseDetails definido como "via_upstream". Google Cloud Esto se debe a que API Gateway se autentica en los backends con un token de ID, mientras que otras APIs Google Cloud requieren un token de acceso.

Solicitudes a la API con latencia alta

Al igual que Cloud Run y Cloud Run Functions, API Gateway está sujeto a la latencia de arranque en frío. Si tu pasarela no ha recibido tráfico durante 15 o 20 minutos, las solicitudes que se hagan a tu pasarela durante los primeros 10 o 15 segundos del arranque en frío experimentarán una latencia de entre 3 y 5 segundos.

Si el problema persiste después del periodo inicial de "calentamiento", consulta los registros de solicitudes de los servicios backend que hayas configurado en tu configuración de API. Por ejemplo, si el servicio de backend se implementa mediante Cloud Run functions, consulta las entradas de Cloud Logging del registro de solicitudes de Cloud Functions asociado.

No se puede ver la información del registro

Si tu API responde correctamente, pero los registros no contienen datos, suele significar que no has habilitado todos los servicios de Google que requiere API Gateway.

API Gateway requiere que habilites los siguientes servicios de Google:

Nombre Título
apigateway.googleapis.com API de API Gateway
servicemanagement.googleapis.com API Service Management
servicecontrol.googleapis.com API Service Control

Para confirmar que los servicios necesarios están habilitados, sigue estos pasos:

gcloud services list

Si no ves los servicios necesarios, habilítalos:

gcloud services enable apigateway.googleapis.com
gcloud services enable servicemanagement.googleapis.com
gcloud services enable servicecontrol.googleapis.com

Para obtener más información sobre los servicios de gcloud, consulta los servicios de gcloud.