Saiba mais sobre os passos de resolução de problemas que podem ser úteis se tiver problemas ao usar o Pub/Sub.
Não é possível criar um tópico
Verifique se tem as autorizações necessárias.
Para criar um tópico do Pub/Sub, precisa da função de gestão de identidades e acessos (IAM) de editor do Pub/Sub (roles/pubsub.editor
) no projeto. Se não tiver esta função, contacte o seu administrador.
Para mais informações de resolução de problemas relacionadas com tópicos, consulte as seguintes páginas:
Não é possível criar uma subscrição
Verifique se fez o seguinte:
Verifique se tem as autorizações necessárias. Para criar uma subscrição do Pub/Sub, precisa da função IAM Editor do Pub/Sub (roles/pubsub.editor) no projeto. Se não tiver esta função, contacte o seu administrador.
Especificou um nome para a subscrição.
Especificou o nome de um tópico existente ao qual quer anexar a subscrição.
Se estiver a criar uma subscrição push, especifique
https://
em letras minúsculas (nãohttp://
nemHTTPS://
) como o protocolo para o seu URL de receção no campopushEndpoint
.
Para mais informações de resolução de problemas sobre subscrições, consulte as seguintes páginas:
Resolução de problemas de obtenção, envio, BigQuery> ou Cloud Storage
Resolução de problemas de subscrições com transformações de mensagens únicas
Resolva problemas de autorizações
As autorizações do Pub/Sub controlam que utilizadores e contas de serviço podem realizar ações nos seus recursos do Pub/Sub. Quando as autorizações estão configuradas incorretamente, podem originar erros de autorização recusada e interromper o fluxo de mensagens. Os registos de auditoria fornecem um registo detalhado de todas as alterações de autorizações, o que lhe permite identificar a origem destes problemas.
Para resolver problemas de autorização do Pub/Sub com registos de auditoria:
Obtenha as autorizações necessárias para ver o Explorador de registos.
Para mais informações, consulte a secção Antes de começar.
Na Trusted Cloud consola, aceda à página Explorador de registos.
Selecione um Trusted Cloud projeto, uma pasta ou uma organização existente.
Segue-se uma lista de filtros que pode usar para encontrar registos relevantes:
resource.type="pubsub_topic" OR resource.type="pubsub_subscription"
: Use esta consulta como ponto de partida quando estiver a resolver problemas que possam envolver alterações às configurações de tópicos ou subscrições, ou ao controlo de acesso. Pode combiná-lo com outros filtros para refinar ainda mais a pesquisa.protoPayload.methodName="google.iam.v1.SetIamPolicy"
: use esta consulta quando suspeitar que um problema é causado por autorizações incorretas ou em falta. Ajuda a acompanhar quem fez alterações à política de IAM e quais foram essas alterações. Isto pode ser útil para resolver problemas, como utilizadores que não conseguem publicar em tópicos ou subscrever subscrições, aplicações com acesso negado a recursos do Pub/Sub ou alterações inesperadas no controlo de acesso.protoPayload.status.code=7
: use esta consulta quando encontrar erros relacionados explicitamente com autorizações. Isto ajuda a identificar as ações que estão a falhar e quem as está a tentar. Pode combinar esta consulta com as anteriores para identificar o recurso específico e a alteração da política de IAM que podem estar a causar a recusa de autorização.
Analise os registos para determinar fatores como a data/hora do evento, o principal que fez a alteração e o tipo de alterações feitas.
Com base nas informações recolhidas dos registos de auditoria, pode tomar medidas corretivas.
Resolva problemas de autorizações do Terraform
Quando usar o Pub/Sub com o Terraform, conceda explicitamente as funções necessárias no seu código do Terraform. Por exemplo, para a publicação, a conta de serviço da sua aplicação precisa da função roles/pubsub.publisher
. Se este papel não estiver definido explicitamente no seu código do Terraform, uma futura atualização terraform apply
pode removê-lo. Isto acontece frequentemente durante atualizações não relacionadas, o que faz com que uma aplicação fiável falhe subitamente com erros PERMISSION_DENIED
.
Definir explicitamente a função no seu código impede estas regressões acidentais.
A subscrição foi eliminada
As subscrições do Pub/Sub podem ser eliminadas de duas formas principais:
Um utilizador ou uma conta de serviço com autorizações suficientes elimina intencionalmente a subscrição.
Uma subscrição é eliminada automaticamente após um período de inatividade, que é de 31 dias por predefinição. Para mais informações acerca da política de validade da subscrição, consulte o artigo Período de validade.
Para resolver problemas relacionados com uma subscrição eliminada, siga estes passos:
Na Trusted Cloud consola, aceda à página de subscrições do Pub/Sub e verifique se a subscrição já não está listada. Para mais informações sobre como listar subscrições, consulte o artigo Liste uma subscrição.
Verifique os registos de auditoria. Navegue para o Explorador de registos. Use o filtro
protoPayload.methodName="google.pubsub.v1.Subscriber.DeleteSubscription"
para encontrar subscrições eliminadas. Examine os registos para determinar se alguém eliminou a subscrição ou se esta foi eliminada devido a inatividade.InternalExpireInactiveSubscription
indica que uma subscrição foi eliminada devido a inatividade. Para mais informações sobre como usar os registos de auditoria para resolução de problemas, consulte o artigo Resolva problemas do Pub/Sub com registos de auditoria.
Erro 403 (Forbidden)
Normalmente, um erro 403 significa que não tem as autorizações corretas para
realizar uma ação. Por exemplo, pode receber um erro 403 User not authorized
ao tentar publicar num tópico ou extrair de uma subscrição.
Se receber este erro, faça o seguinte:
- Certifique-se de que ativou a API Pub/Sub na Trusted Cloud consola.
Certifique-se de que o principal que faz o pedido tem as autorizações necessárias nos recursos da API Pub/Sub relevantes, especialmente se estiver a usar a API Pub/Sub para comunicação entre projetos.
Se estiver a usar o Dataflow, certifique-se de que o
{PROJECT_NUMBER}@cloudservices.s3ns-system.iam.gserviceaccount.com
e a conta de serviço do Compute Engine{PROJECT_NUMBER}-compute@developer.s3ns-system.iam.gserviceaccount.com
têm as autorizações necessárias no recurso da API Pub/Sub relevante. Para mais informações, consulte o artigo Segurança e autorizações do Dataflow.Se estiver a usar o App Engine, verifique a página de autorizações do seu projeto para ver se uma conta de serviço do App Engine está listada como editor do Pub/Sub. Se não for o caso, adicione a sua conta de serviço do App Engine como editor do Pub/Sub. Normalmente, a conta de serviço do App Engine tem o formato
<project-id>@appspot.s3ns-system.iam.gserviceaccount.com
.Pode usar os registos de auditoria para resolver problemas de autorizações.
Outros códigos de erro comuns
Para ver uma lista de outros códigos de erro comuns relacionados com a API Pub/Sub e as respetivas descrições, consulte Códigos de erro.
Usar operações administrativas excessivas
Se verificar que está a usar demasiada da sua quota para operações administrativas, pode ter de refatorar o seu código. Como ilustração, considere o seguinte pseudocódigo. Neste exemplo, está a ser usada uma operação administrativa (GET
) para verificar a presença de uma subscrição antes de tentar consumir os respetivos recursos. GET
e CREATE
são operações de administrador:
if !GetSubscription my-sub {
CreateSubscription my-sub
}
Consume from subscription my-sub
Um padrão mais eficiente é tentar consumir mensagens da subscrição (partindo do princípio de que pode ter uma certeza razoável do nome da subscrição). Nesta abordagem otimista, só recebe ou cria a subscrição se houver um erro. Considere este exemplo:
try {
Consume from subscription my-sub
} catch NotFoundError {
CreateSubscription my-sub
Consume from subscription my-sub
}
Pode usar os seguintes exemplos de código para implementar este padrão no idioma da sua escolha:
Ir
O exemplo seguinte usa a versão principal da biblioteca de cliente Go Pub/Sub (v2). Se ainda estiver a usar a biblioteca v1, consulte o guia de migração para a v2. Para ver uma lista de exemplos de código da v1, consulte os exemplos de código descontinuados.
Antes de experimentar este exemplo, siga as instruções de configuração do Go em Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Go do Pub/Sub.
Java
Antes de experimentar este exemplo, siga as instruções de configuração do Java no artigo Início rápido: usar bibliotecas cliente. Para mais informações, consulte a documentação de referência da API Java do Pub/Sub.
Node.js
Antes de experimentar este exemplo, siga as instruções de configuração do Node.js em Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Node.js do Pub/Sub.
Node.ts
Antes de experimentar este exemplo, siga as instruções de configuração do Node.js em Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Node.js do Pub/Sub.
Python
Antes de experimentar este exemplo, siga as instruções de configuração do Python em Início rápido: usar bibliotecas cliente. Para mais informações, consulte a documentação de referência da API Python Pub/Sub.
C++
Antes de experimentar este exemplo, siga as instruções de configuração do C++ no artigo Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API C++ do Pub/Sub.