Obtén información sobre los pasos para solucionar problemas que pueden servirte si tienes dificultades con Pub/Sub.
No se puede crear un tema
Verifica que tengas los permisos necesarios.
Para crear un tema de Pub/Sub, necesitas el rol de Identity and Access Management de editor de Pub/Sub (roles/pubsub.editor) en el proyecto. Si no tienes este rol, comunícate con tu administrador.
Para obtener más información sobre la solución de problemas relacionados con los temas, consulta las siguientes páginas:
No se puede crear una suscripción
Comprueba si completaste estos pasos:
Verifica que tengas los permisos necesarios. Para crear una suscripción a Pub/Sub, necesitas el rol de IAM de editor de Pub/Sub (roles/pubsub.editor) en el proyecto. Si no tienes este rol, comunícate con tu administrador.
Especificaste un nombre para la suscripción.
Especificaste el nombre de un tema existente al que deseas adjuntar la suscripción.
Si creas una suscripción de envío, especifica
https://en minúsculas (nohttp://niHTTPS://) como el protocolo para tu URL de recepción en el campopushEndpoint.
Para obtener más información sobre la solución de problemas relacionados con las suscripciones, consulta las siguientes páginas:
Solución de problemas de extracción, inserción, BigQuery o Cloud Storage
Solución de problemas relacionados con las suscripciones con transformaciones de mensaje único
Soluciona problemas de permisos
Los permisos de Pub/Sub controlan qué usuarios y cuentas de servicio pueden realizar acciones en tus recursos de Pub/Sub. Cuando los permisos están mal configurados, pueden generar errores de permiso denegado y perturbar el flujo de mensajes. Los registros de auditoría proporcionan un registro detallado de todos los cambios de permisos, lo que te permite identificar la fuente de estos problemas.
Para solucionar problemas de permisos de Pub/Sub con registros de auditoría, haz lo siguiente:
Obtén los permisos necesarios para ver el Explorador de registros.
Para obtener más información, consulta Antes de comenzar.
En la consola de Google Cloud , accede a la página Explorador de registros.
Elige una organización, un proyecto o una carpeta de Google Cloud existentes.
Esta es una lista de filtros que puedes usar para encontrar registros relevantes:
resource.type="pubsub_topic" OR resource.type="pubsub_subscription": Usa esta consulta como punto de partida cuando soluciones problemas relacionados con cambios en la configuración de temas o suscripciones, o con el control de acceso. Puedes combinarlo con otros filtros para definir mejor tu búsqueda.protoPayload.methodName="google.iam.v1.SetIamPolicy": Usa esta consulta cuando sospeches que un problema se debe a permisos incorrectos o faltantes. Te ayuda a hacer un seguimiento de quién realizó cambios en la política de IAM y cuáles fueron esos cambios. Esto puede ser útil para solucionar problemas, como usuarios que no pueden publicar en temas o suscribirse a suscripciones, aplicaciones a las que se les deniega el acceso a recursos de Pub/Sub o cambios inesperados en el control de acceso.protoPayload.status.code=7: Usa esta búsqueda cuando encuentres errores relacionados explícitamente con los permisos. Esto te ayuda a identificar qué acciones fallan y quiénes las intentan. Puedes combinar esta consulta con las anteriores para identificar el recurso específico y el cambio en la política de IAM que podrían estar causando la denegación de permisos.
Analiza los registros para determinar factores como la marca de tiempo del evento, la principal que realizó el cambio y el tipo de cambios que se realizaron.
Según la información recopilada de los registros de auditoría, puedes tomar medidas correctivas.
Soluciona problemas de permisos de Terraform
Cuando uses Pub/Sub con Terraform, otorga explícitamente los roles requeridos en tu código de Terraform. Por ejemplo, para publicar, la cuenta de servicio de tu aplicación necesita el rol roles/pubsub.publisher. Si este rol no se define de forma explícita en tu código de Terraform, una futura terraform apply podría quitarlo. Esto suele ocurrir durante actualizaciones no relacionadas, lo que provoca que una aplicación confiable falle repentinamente con errores de PERMISSION_DENIED.
Definir el rol de forma explícita en tu código evita estas regresiones accidentales.
Se borró la suscripción
Las suscripciones a Pub/Sub se pueden borrar de dos maneras principales:
Un usuario o una cuenta de servicio con permisos suficientes borra intencionalmente la suscripción.
Las suscripciones se borran automáticamente después de un período de inactividad, que es de 31 días de forma predeterminada. Para obtener más información sobre la política de vencimiento de suscripciones, consulta Período de vencimiento.
Para solucionar problemas relacionados con una suscripción borrada, sigue estos pasos:
En la consola de Google Cloud , ve a la página Suscripciones de Pub/Sub y verifica que la suscripción ya no aparezca en la lista. Para obtener más información sobre cómo mostrar suscripciones, consulta Cómo mostrar una suscripción.
Verifica los registros de auditoría. Navega al Explorador de registros. Usa el filtro
protoPayload.methodName="google.pubsub.v1.Subscriber.DeleteSubscription"para encontrar las suscripciones borradas. Examina los registros para determinar si alguien borró la suscripción o si se borró por inactividad.InternalExpireInactiveSubscriptionindica que se borró una suscripción por inactividad. Si deseas obtener más información para usar los registros de auditoría en la solución de problemas, consulta Soluciona problemas de Pub/Sub con registros de auditoría.
403 (Forbidden) error
Por lo general, un error 403 significa que no tienes los permisos correctos para realizar una acción. Por ejemplo, es posible que recibas un error 403 User not authorized cuando intentes publicar en un tema o extraer datos de una suscripción.
Si recibes este error, haz lo siguiente:
- Asegúrate de que habilitaste la API de Pub/Sub en la consola deGoogle Cloud .
Asegúrate de que la cuenta principal que realiza la solicitud tenga los permisos necesarios en los recursos relevantes de la API de Pub/Sub, en especial, si usas la API de Pub/Sub para la comunicación entre proyectos.
Si usas Dataflow, asegúrate de que
{PROJECT_NUMBER}@cloudservices.gserviceaccount.comy la cuenta de servicio de Compute Engine{PROJECT_NUMBER}-compute@developer.gserviceaccount.comtengan los permisos necesarios en el recurso de la API de Pub/Sub pertinente. Para obtener más información, consulta Seguridad y permisos de Dataflow.Si usas App Engine, revisa la página de permisos de tu proyecto para ver si alguna cuenta de servicio de App Engine aparece como editor de Pub/Sub. Si no es así, agrega tu cuenta de servicio de App Engine como editor de Pub/Sub. Por lo general, la cuenta de servicio de App Engine tiene el formato
<project-id>@appspot.gserviceaccount.com.Puedes usar los registros de auditoría para solucionar problemas de permisos.
Otros códigos de error comunes
Para ver una lista de otros códigos de error comunes relacionados con la API de Pub/Sub y sus descripciones, consulta Códigos de error.
Tiempos de espera agotados, latencia o errores de red
Es posible que experimentes fallas intermitentes o persistentes cuando tus aplicaciones cliente de Pub/Sub intenten conectarse a los servicios de Google Cloud. Estos problemas pueden manifestarse de la siguiente manera:
- Se producen demoras significativas al publicar mensajes, lo que puede generar una acumulación de trabajo pendiente en la aplicación.
- Errores de tiempo de espera, como
DEADLINE_EXCEEDED,code = DeadlineExceededojava.net.SocketTimeoutExceptionde gRPC - Fallas de E/S de red, como errores
UNAVAILABLE: io exceptionoConnection refusedcuando se intenta acceder a servicios comopubsub.googleapis.comooauth2.googleapis.com
Estos problemas de conectividad pueden surgir incluso sin cambios en la configuración de Pub/Sub o en el código de la aplicación. Esto ocurre con frecuencia cuando los firewalls locales o de VPC usan listas de direcciones IP permitidas codificadas para las APIs de Google. Los servicios de Google, incluidos Pub/Sub y sus dependencias, como los servicios de autenticación, usan un rango dinámico de direcciones IP. Si tu firewall no tiene en cuenta las direcciones IP nuevas, puede bloquear el tráfico a ellas, lo que provoca errores de conexión y autenticación.
Para garantizar una conectividad estable, evita las reglas de firewall basadas en IP estáticas para los servicios de Google. En cambio, puedes hacer lo siguiente:
- Configura tu firewall para permitir el tráfico con los rangos de IP publicados de Google para los dominios predeterminados en lugar de las direcciones codificadas. Para obtener información sobre cómo obtener estos rangos y automatizar las actualizaciones de tus reglas de firewall, consulta Direcciones IP para dominios predeterminados.
- Habilita el Acceso privado a Google, que permite que las instancias dentro de tu red de VPC accedan a las APIs y los servicios de Google sin atravesar Internet pública, lo que simplifica la administración del firewall.
JWT no válido: El token debe ser de corta duración
Si recibes un error como Invalid JWT: Token must be a short-lived token (60
minutes) and in a reasonable timeframe cuando tu aplicación interactúa con la API de Pub/Sub, esto suele indicar un problema con el tiempo de las credenciales de autenticación.
Este error se produce durante la validación del token web JSON (JWT) que se usa para autenticar las solicitudes a la API. Una causa común es una diferencia de tiempo significativa (desviación del tiempo) entre la máquina cliente que ejecuta la biblioteca de Pub/Sub y los servidores de autenticación de Google. Debido a que los JWT tienen un período de validez limitado, las discrepancias en el reloj pueden hacer que se traten como vencidos o aún no válidos.
Para resolver este problema, sincroniza el reloj de tu máquina cliente:
Verifica que la fecha, la hora y la zona horaria de tu máquina sean correctas.
Usa un servicio de Protocolo de hora de red (NTP) para mantener sincronizada la hora del sistema y verifica que el servicio se esté ejecutando y configurado correctamente.
Uso de operaciones administrativas excesivas
Si descubres que consumes demasiado tu cuota para operaciones administrativas, es posible que debas reestructurar el código. A modo de ilustración, considera este seudocódigo. En este ejemplo, se usa una operación administrativa (GET) para verificar la presencia de una suscripción antes de que intente consumir sus recursos. GET y CREATE son operaciones de administrador:
if !GetSubscription my-sub {
CreateSubscription my-sub
}
Consume from subscription my-sub
Una opción más eficaz es intentar consumir los mensajes de la suscripción (siempre que puedas estar seguro del nombre de la suscripción). Con este enfoque optimista, solo obtienes o creas la suscripción si hay un error. Considera el siguiente ejemplo:
try {
Consume from subscription my-sub
} catch NotFoundError {
CreateSubscription my-sub
Consume from subscription my-sub
}
Puedes usar las siguientes muestras de código para implementar este patrón en el lenguaje que elijas:
Go
En el siguiente ejemplo, se usa la versión principal de la biblioteca cliente de Pub/Sub de Go (v2). Si aún usas la biblioteca de la versión 1, consulta la guía de migración a la versión 2. Para ver una lista de muestras de código de la versión 1, consulta las muestras de código obsoletas.
Antes de probar esta muestra, sigue las instrucciones de configuración de Go en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Go.
Java
Antes de probar esta muestra, sigue las instrucciones de configuración de Java en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Java.
Node.js
Antes de probar esta muestra, sigue las instrucciones de configuración de Node.js en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Node.js.
Node.ts
Antes de probar esta muestra, sigue las instrucciones de configuración de Node.js en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Node.js.
Python
Antes de probar esta muestra, sigue las instrucciones de configuración de Python en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Python.
C++
Antes de probar esta muestra, sigue las instrucciones de configuración de C++ en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para C++.