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:
Ve a la página Explorador de registros y selecciona tu proyecto.
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.
Busca la entrada de registro que coincida con la respuesta de error HTTP que quieras investigar. Por ejemplo, filtra por
httpRequest.status
.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:
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 eljsonPayload
de la entrada de registro, significa que el error se debe a que se ha eliminado o inhabilitado la cuenta de servicio.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 HTTP500
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.comgcloud 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
.