Descubre soluciones que pueden resultarte útiles si tienes algún problema mientras usas Pub/Sub.
No se puede crear un tema
Verifica que tienes los permisos necesarios.
Para crear un tema de Pub/Sub, necesitas el rol Editor de Pub/Sub (roles/pubsub.editor
) de gestión de identidades y accesos en el proyecto. Si no tienes este rol, ponte en contacto con tu administrador.
Para obtener más información sobre cómo solucionar problemas relacionados con los temas, consulta las siguientes páginas:
No se puede crear una suscripción
Comprueba que has hecho lo siguiente:
Verifica que tienes los permisos necesarios. Para crear una suscripción de Pub/Sub, necesitas el rol de gestión de identidades y accesos Editor de Pub/Sub (roles/pubsub.editor) en el proyecto. Si no tienes este rol, ponte en contacto con tu administrador.
Especifica un nombre para la suscripción.
Se ha especificado el nombre de un tema al que quieres adjuntar la suscripción.
Si creas una suscripción push, especifica
https://
en minúsculas (nohttp://
niHTTPS://
) como protocolo de la URL de recepción en el campopushEndpoint
.
Para obtener más información sobre cómo solucionar problemas relacionados con las suscripciones, consulta las siguientes páginas:
Solución de problemas de pull, push, BigQuery o Cloud Storage
Solucionar problemas de suscripciones con transformaciones de un solo mensaje
Solucionar problemas de permisos
Los permisos de Pub/Sub controlan qué usuarios y cuentas de servicio pueden realizar acciones en tus recursos de Pub/Sub. Si los permisos no están configurados correctamente, pueden producirse errores de denegación de permisos e interrumpir el flujo de mensajes. Los registros de auditoría proporcionan un registro detallado de todos los cambios de permisos, lo que te permite identificar el origen de estos problemas.
Para solucionar problemas de permisos de Pub/Sub con registros de auditoría, sigue estos pasos:
Obtén los permisos necesarios para ver el explorador de registros.
Para obtener más información, consulta la sección Antes de empezar.
En la Google Cloud consola, ve a la página Explorador de registros.
Selecciona un proyecto, una carpeta o una organización Google Cloud .
A continuación, se muestra una lista de filtros que puede usar para encontrar los registros pertinentes:
resource.type="pubsub_topic" OR resource.type="pubsub_subscription"
: Usa esta consulta como punto de partida cuando tengas que solucionar algún problema que pueda implicar cambios en las configuraciones de temas o suscripciones, o en el control de acceso. Puedes combinarlo con otros filtros para acotar aún más la búsqueda.protoPayload.methodName="google.iam.v1.SetIamPolicy"
: usa esta consulta cuando sospeches que un problema se debe a permisos incorrectos o que faltan. Te ayuda a hacer un seguimiento de quién ha hecho cambios en la política de gestión de identidades y accesos y cuáles han sido esos cambios. Esto puede ser útil para solucionar problemas, como cuando los usuarios no pueden publicar en temas o suscribirse a suscripciones, cuando se deniega el acceso a recursos de Pub/Sub a las aplicaciones o cuando se producen cambios inesperados en el control de acceso.protoPayload.status.code=7
: usa esta consulta cuando se produzcan errores relacionados explícitamente con los permisos. De esta forma, podrás identificar qué acciones fallan y quién intenta llevarlas a cabo. Puedes combinar esta consulta con las anteriores para identificar el recurso específico y el cambio en la política de gestión de identidades y accesos que puede estar provocando la denegación de permisos.
Analiza los registros para determinar factores como la marca de tiempo del evento, la entidad que ha realizado el cambio y el tipo de cambios que se han realizado.
En función de la información recogida en los registros de auditoría, puedes tomar medidas correctivas.
Solucionar problemas de permisos de Terraform
Cuando uses Pub/Sub con Terraform, asigna explícitamente los roles necesarios 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 explícitamente en tu código de Terraform, una futura terraform apply
podría eliminarlo. Esto suele ocurrir durante actualizaciones no relacionadas, lo que provoca que una aplicación fiable falle de repente con errores PERMISSION_DENIED
.
Si defines explícitamente el rol en el código, evitarás estas regresiones accidentales.
Se ha eliminado la suscripción
Las suscripciones de Pub/Sub se pueden eliminar de dos formas principales:
Un usuario o una cuenta de servicio con los permisos suficientes elimina la suscripción de forma intencionada.
Las suscripciones se eliminan automáticamente tras un periodo de inactividad, que es de 31 días de forma predeterminada. Para obtener más información sobre la política de vencimiento de las suscripciones, consulta el artículo Periodo de vencimiento.
Para solucionar problemas con una suscripción eliminada, sigue estos pasos:
En la Google Cloud consola, vaya a la página de suscripciones de Pub/Sub y compruebe que la suscripción ya no aparece. Para obtener más información sobre cómo mostrar suscripciones, consulta Mostrar una suscripción.
Consulta los registros de auditoría. Ve a Explorador de registros. Usa el filtro
protoPayload.methodName="google.pubsub.v1.Subscriber.DeleteSubscription"
para encontrar las suscripciones eliminadas. Examina los registros para determinar si alguien ha eliminado la suscripción o si se ha eliminado por inactividad.InternalExpireInactiveSubscription
indica que se ha eliminado una suscripción por inactividad. Para obtener más información sobre cómo usar los registros de auditoría para solucionar problemas, consulte Solucionar problemas de Pub/Sub con registros de auditoría.
Error 403 (Forbidden)
Un error 403 suele significar que no tienes los permisos correctos para realizar una acción. Por ejemplo, puede que recibas un error 403 User not authorized
al intentar publicar en un tema o extraer datos de una suscripción.
Si aparece este error, haz lo siguiente:
- Asegúrate de haber habilitado la API Pub/Sub en laGoogle Cloud consola.
Asegúrate de que la entidad de seguridad que hace la solicitud tenga los permisos necesarios en los recursos de la API Pub/Sub pertinentes, sobre todo si usas la API Pub/Sub para la comunicación entre proyectos.
Si usas Dataflow, asegúrate de que tanto
{PROJECT_NUMBER}@cloudservices.gserviceaccount.com
como la cuenta de servicio de Compute Engine{PROJECT_NUMBER}-compute@developer.gserviceaccount.com
tengan los permisos necesarios en el recurso de la API Pub/Sub correspondiente. Para obtener más información, consulta Seguridad y permisos de los flujos de datos.Si usas App Engine, consulta la página Permisos de tu proyecto para ver si aparece una cuenta de servicio de App Engine como editor de Pub/Sub. Si no es así, añade tu cuenta de servicio de App Engine como editor de Pub/Sub. Normalmente, 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 habituales
Para ver una lista de otros códigos de error habituales relacionados con la API Pub/Sub y sus descripciones, consulta Códigos de error.
Usar operaciones administrativas excesivas
Si detectas que estás usando demasiado tu cuota de operaciones administrativas, puede que tengas que refactorizar tu código. Para ilustrarlo, veamos este seudocódigo. En este ejemplo, se usa una operación administrativa (GET
)
para comprobar si hay una suscripción antes de
intentar consumir sus recursos. Tanto GET
como CREATE
son operaciones de administrador:
if !GetSubscription my-sub {
CreateSubscription my-sub
}
Consume from subscription my-sub
Un patrón más eficiente es intentar consumir mensajes de la suscripción (siempre que puedas estar razonablemente seguro del nombre de la suscripción). Con este enfoque optimista, solo obtienes o creas la suscripción si hay un error. Observa el siguiente ejemplo:
try {
Consume from subscription my-sub
} catch NotFoundError {
CreateSubscription my-sub
Consume from subscription my-sub
}
Puedes usar los siguientes ejemplos de código para implementar este patrón en el lenguaje que quieras:
Go
En el siguiente ejemplo se usa la versión principal de la biblioteca de cliente de Pub/Sub de Go (v2). Si sigues usando la biblioteca v1, consulta la guía de migración a la versión 2. Para ver una lista de ejemplos de código de la versión 1, consulta los ejemplos de código obsoletos.
Antes de probar este ejemplo, sigue las instrucciones de configuración de Go que se indican en la guía de inicio rápido sobre cómo usar bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Go de Pub/Sub.
Java
Antes de probar este ejemplo, sigue las instrucciones de configuración de Java que se indican en la guía de inicio rápido sobre cómo usar bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API de Java de Pub/Sub.
Node.js
Antes de probar este ejemplo, sigue las instrucciones de configuración de Node.js que se indican en la guía de inicio rápido sobre cómo usar bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API de Node.js de Pub/Sub.
Node.ts
Antes de probar este ejemplo, sigue las instrucciones de configuración de Node.js que se indican en la guía de inicio rápido sobre cómo usar bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API de Node.js de Pub/Sub.
Python
Antes de probar este ejemplo, sigue las instrucciones de configuración de Python que se indican en la guía de inicio rápido sobre cómo usar bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API de Python de Pub/Sub.
C++
Antes de probar este ejemplo, sigue las instrucciones de configuración de C++ que se indican en la guía de inicio rápido sobre cómo usar bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API de C++ de Pub/Sub.