Um tópico de importação do Cloud Storage permite-lhe ingerir continuamente dados do Cloud Storage no Pub/Sub. Em seguida, pode transmitir os dados para qualquer um dos destinos suportados pelo Pub/Sub. O Pub/Sub deteta automaticamente novos objetos adicionados ao contentor do Cloud Storage e carrega-os.
O Cloud Storage é um serviço para armazenar os seus objetos em Google Cloud. Um objeto é um fragmento de dados imutável que consiste num ficheiro de qualquer formato. Armazena objetos em contentores denominados contentores. Os contentores também podem conter pastas geridas, que usa para fornecer acesso expandido a grupos de objetos com um prefixo de nome partilhado.
Para mais informações sobre o Cloud Storage, consulte a documentação do Cloud Storage.
Para mais informações sobre tópicos de importação, consulte o artigo Acerca dos tópicos de importação.
Antes de começar
Tem de existir um contentor do Cloud Storage antes de criar um tópico de importação do Cloud Storage. Se estiver a usar a consola para criar o tópico de importação, o fluxo de trabalho permite-lhe criar um contentor do Cloud Storage. Para outros métodos de configuração, consulte o artigo Crie contentores.
Se aplicável, certifique-se de que a política de armazenamento de mensagens do tópico do Pub/Sub se sobrepõe à região onde o seu contentor do Cloud Storage está localizado. Para mais informações, consulte o artigo A política de armazenamento de mensagens está em conformidade com a localização do contentor.
Alguns Google Cloud serviços têm Google Cloudcontas de serviço geridas que permitem que os serviços acedam aos seus recursos. Estas contas de serviço são conhecidas como agentes de serviço. O Pub/Sub cria e mantém uma conta de serviço para cada projeto no formato
service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com
. Configure as funções e as autorizações necessárias na conta de serviço do Pub/Sub para gerir tópicos de importação do Cloud Storage, incluindo o seguinte:Conceda a função de publicador do Pub/Sub (
roles/pubsub.publisher
) à conta de serviço do Pub/Sub. Esta conta de serviço vai publicar no tópico de importação. Para conceder esta função, precisa de uma conta de utilizador com a função de administrador do Pub/Sub (roles/pubsub.admin
). Para mais informações, consulte o artigo Adicione a função de publicador do Pub/Sub à conta de serviço do Pub/Sub.Conceda autorizações do Cloud Storage à conta de serviço do Pub/Sub. Para conceder estas autorizações, precisa de uma conta de utilizador com a função de administrador do armazenamento (
roles/storage.admin
). Para mais informações, consulte o artigo Atribua funções do Cloud Storage à conta de serviço do Pub/Sub.
Funções e autorizações necessárias
Para receber as autorizações de que
precisa para criar e gerir um tópico de importação do Cloud Storage,
peça ao seu administrador para lhe conceder a função de IAM de
Editor do Pub/Sub (roles/pubsub.editor
)
no seu tópico ou projeto.
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Esta função predefinida contém as autorizações necessárias para criar e gerir um tópico de importação do Cloud Storage. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:
Autorizações necessárias
As seguintes autorizações são necessárias para criar e gerir um tópico de importação do Cloud Storage:
-
Crie um tópico de importação:
pubsub.topics.create
-
Elimine um tópico de importação:
pubsub.topics.delete
-
Obtenha um tópico de importação:
pubsub.topics.get
-
Indique um tópico de importação:
pubsub.topics.list
-
Publicar num tópico de importação:
pubsub.topics.publish
-
Atualize um tópico de importação:
pubsub.topics.update
-
Obtenha a Política IAM para um tópico de importação:
pubsub.topics.getIamPolicy
-
Configure a política IAM para um tópico de importação:
pubsub.topics.setIamPolicy
Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.
Pode configurar o controlo de acesso ao nível do projeto e ao nível do recurso individual.
A política de armazenamento de mensagens está em conformidade com a localização do contentor
A política de armazenamento de mensagens do tópico do Pub/Sub tem de sobrepor-se às regiões onde o seu contentor do Cloud Storage está localizado. Esta política determina onde o Pub/Sub tem autorização para armazenar os seus dados de mensagens.
Para grupos com o tipo de localização como região: a política tem de incluir essa região específica. Por exemplo, se o seu contentor estiver na região
us-central1
, a política de armazenamento de mensagens também tem de incluirus-central1
.Para contentores com o tipo de localização como duas regiões ou várias regiões: a política tem de incluir, pelo menos, uma região na localização de duas regiões ou várias regiões. Por exemplo, se o seu contentor estiver em
US multi-region
, a política de armazenamento de mensagens pode incluirus-central1
,us-east1
ou qualquer outra região emUS multi-region
.Se a política não incluir a região do contentor, a criação do tópico falha. Por exemplo, se o seu contentor estiver em
europe-west1
e a sua política de armazenamento de mensagens incluir apenasasia-east1
, recebe um erro.Se a política de armazenamento de mensagens incluir apenas uma região que se sobreponha à localização do contentor, a redundância multirregional pode ser comprometida. Isto deve-se ao facto de, se essa única região ficar indisponível, os seus dados poderem não ficar acessíveis. Para garantir a redundância total, recomenda-se que inclua, pelo menos, duas regiões na política de armazenamento de mensagens que façam parte da localização multirregional ou birregional do contentor.
Para mais informações sobre as localizações dos contentores, consulte a documentação.
Ative a publicação
Para ativar a publicação, tem de atribuir a função de publicador do Pub/Sub à conta de serviço do Pub/Sub para que o Pub/Sub possa publicar no tópico de importação do Cloud Storage.
Ativar a publicação em todos os tópicos de importação do Cloud Storage
Escolha esta opção quando não tiver um tópico de importação do Cloud Storage disponível no seu projeto.
Na Google Cloud consola, aceda à página IAM.
Selecione a caixa de verificação Incluir concessões de funções fornecidas pela Google.
Procure a conta de serviço do Pub/Sub com o seguinte formato:
service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com
Para esta conta de serviço, clique no botão Editar principal.
Se necessário, clique em Adicionar outra função.
Pesquise e selecione a função de publicador do Pub/Sub (
roles/pubsub.publisher
).Clique em Guardar.
Ative a publicação num único tópico de importação do Cloud Storage
Se quiser conceder ao Pub/Sub autorização para publicar num tópico de importação do Cloud Storage específico que já exista, siga estes passos:
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Execute o comando
gcloud pubsub topics add-iam-policy-binding
:gcloud pubsub topics add-iam-policy-binding TOPIC_ID\ --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com"\ --role="roles/pubsub.publisher"
Substitua o seguinte:
TOPIC_ID é o ID ou o nome do tópico de importação do Cloud Storage.
PROJECT_NUMBER é o número do projeto. Para ver o número do projeto, consulte o artigo Identificar projetos.
storage.objects.list
storage.objects.get
storage.buckets.get
Conceda autorizações ao nível do contentor. No contentor do Cloud Storage específico, conceda a função de leitor de objetos antigos do Storage (
roles/storage.legacyObjectReader
) e as funções de leitor de contentores antigos do Storage (roles/storage.legacyBucketReader
) à conta de serviço do Pub/Sub.Se tiver de conceder funções ao nível do projeto, pode, em alternativa, conceder a função de administrador de armazenamento (
roles/storage.admin
) no projeto que contém o contentor do Cloud Storage. Conceda esta função à conta de serviço do Pub/Sub.Na Google Cloud consola, aceda à página Cloud Storage.
Clique no contentor do Cloud Storage a partir do qual quer ler mensagens e importar para o tópico de importação do Cloud Storage.
É apresentada a página Detalhes do contentor.
Na página Detalhes do contentor, clique no separador Autorizações.
No separador Autorizações > Ver por principais, clique em Conceder acesso.
É aberta a página Conceder acesso.
Na secção Adicionar membros, introduza o nome da sua conta de serviço do Pub/Sub.
O formato da conta de serviço é
service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com
. Por exemplo, para um projeto com PROJECT_NUMBER=112233445566
, a conta de serviço tem o formatoservice-112233445566@gcp-sa-pubsub.iam.gserviceaccount.com
.No menu pendente Atribuir funções > Selecionar uma função, introduza
Object Reader
e selecione a função Storage Legacy Object Reader.Clique em Adicionar outra função.
No menu pendente Selecionar uma função, introduza
Bucket Reader
e selecione a função Leitor de contentores antigos de armazenamento.Clique em Guardar.
Na Google Cloud consola, aceda à página IAM.
No separador Autorizações > Ver por principais, clique em Conceder acesso.
É aberta a página Conceder acesso.
Na secção Adicionar membros, introduza o nome da sua conta de serviço do Pub/Sub.
O formato da conta de serviço é
service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com
. Por exemplo, para um projeto com PROJECT_NUMBER=112233445566
, a conta de serviço tem o formatoservice-112233445566@gcp-sa-pubsub.iam.gserviceaccount.com
.No menu pendente Atribuir funções > Selecionar uma função, introduza
Storage Admin
e selecione a função Administrador de armazenamento.Clique em Guardar.
Texto. Presume-se que os objetos contêm dados com texto simples. Este formato de entrada tenta carregar todos os objetos no contentor, desde que o objeto cumpra o tempo mínimo de criação de objetos e corresponda aos critérios de padrão glob.
Delimitador. Também pode especificar um delimitador pelo qual os objetos são divididos em mensagens. Se não for definido, a predefinição é o caráter de nova linha (
\n
). O delimitador só pode ser um único caráter.Avro. Os objetos estão no formato binário Apache Avro. Qualquer objeto que não esteja num formato Apache Avro válido não é carregado. Seguem-se as limitações relativas ao formato Avro:
- As versões 1.1.0 e 1.2.0 do Avro não são suportadas.
- O tamanho máximo de um bloco Avro é de 16 MB.
Pub/Sub Avro. Os objetos estão no formato binário Apache Avro com um esquema correspondente ao de um objeto escrito no Cloud Storage através de uma subscrição do Cloud Storage do Pub/Sub com o formato de ficheiro Avro. Seguem-se algumas diretrizes importantes para o Pub/Sub Avro:
O campo de dados do registo Avro é usado para preencher o campo de dados da mensagem Pub/Sub gerada.
Se a opção write_metadata for especificada para a subscrição do Cloud Storage, todos os valores no campo de atributos são preenchidos como os atributos da mensagem Pub/Sub gerada.
Se for especificada uma chave de ordenação na mensagem original escrita no Cloud Storage, este campo é preenchido como um atributo com o nome
original_message_ordering_key
na mensagem do Pub/Sub gerada.
- A criação do tópico e da subscrição em separado, mesmo que seja feita em rápida sucessão, pode levar à perda de dados. Existe um curto período durante o qual o tópico existe sem uma subscrição. Se forem enviados dados para o tópico durante este período, estes são perdidos. Se criar primeiro o tópico, criar a subscrição e, em seguida, converter o tópico num tópico de importação, garante que não perde nenhuma mensagem durante o processo de importação.
Na Google Cloud consola, aceda à página Tópicos.
Clique em Criar tópico.
É apresentada a página de detalhes do tópico.
No campo ID do tópico, introduza um ID para o tópico de importação do Cloud Storage.
Para mais informações sobre a atribuição de nomes a tópicos, consulte as diretrizes de nomenclatura.
Selecione Adicionar uma subscrição predefinida.
Selecione Ativar carregamento.
Para a origem da carregamento, selecione Google Cloud Storage.
Para o contentor do Cloud Storage, clique em Procurar.
É aberta a página Selecionar contentor. Selecione uma das seguintes opções:
Selecione um contentor existente de qualquer projeto adequado.
Clique no ícone de criação e siga as instruções no ecrã para criar um novo contentor. Depois de criar o contentor, selecione-o para o tópico de importação do Cloud Storage.
Quando especifica o contentor, o Pub/Sub verifica se existem as autorizações adequadas no contentor para a conta de serviço do Pub/Sub. Se existirem problemas de autorizações, é apresentada uma mensagem semelhante à seguinte:
Unable to verify if the Pub/Sub service agent has write permissions on this bucket. You may be lacking permissions to view or set permissions.
Se tiver problemas de autorização, clique em Definir autorizações. Para mais informações, consulte o artigo Conceda autorizações do Cloud Storage à conta de serviço do Pub/Sub.
Para o Formato do objeto, selecione Texto, Avro ou Pub/Sub Avro.
Se selecionar Texto, pode especificar opcionalmente um Delimitador com o qual dividir os objetos em mensagens.
Para mais informações sobre estas opções, consulte o artigo Formato de entrada.
Opcional. Pode especificar um tempo mínimo de criação de objetos para o seu tópico. Se estiver definido, apenas são carregados objetos criados após a hora mínima de criação de objetos.
Para mais informações, consulte o artigo Tempo mínimo de criação de objetos.
Tem de especificar um padrão glob. Para carregar todos os objetos no contentor, use
**
como padrão glob. Se estiver definido, apenas os objetos que correspondam ao padrão indicado são carregados.Para mais informações, consulte o artigo Faça corresponder um padrão glob.
Manter as outras predefinições.
Clique em Criar tópico.
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Execute o comando
gcloud pubsub topics create
:gcloud pubsub topics create TOPIC_ID \ --cloud-storage-ingestion-bucket=BUCKET_NAME \ --cloud-storage-ingestion-input-format=INPUT_FORMAT \ --cloud-storage-ingestion-text-delimiter=TEXT_DELIMITER \ --cloud-storage-ingestion-minimum-object-create-time=MINIMUM_OBJECT_CREATE_TIME \ --cloud-storage-ingestion-match-glob=MATCH_GLOB
No comando, apenas
TOPIC_ID
, a flag--cloud-storage-ingestion-bucket
e a flag--cloud-storage-ingestion-input-format
são obrigatórias. As restantes flags são opcionais e podem ser omitidas.Substitua o seguinte:
TOPIC_ID
: o nome ou o ID do seu tópico.BUCKET_NAME
: especifica o nome de um contentor existente. Por exemplo,prod_bucket
. O nome do contentor não pode incluir o ID do projeto. Para criar um contentor, consulte o artigo Crie contentores.INPUT_FORMAT
: especifica o formato dos objetos carregados. Pode sertext
,avro
oupubsub_avro
. Para mais informações sobre estas opções, consulte o artigo Formato de entrada.TEXT_DELIMITER
: Especifica o delimitador com o qual dividir os objetos de texto em mensagens do Pub/Sub. Este deve ser um único caráter e só deve ser definido quandoINPUT_FORMAT
étext
. A predefinição é o caráter de nova linha (\n
).Quando usar a CLI gcloud para especificar o delimitador, preste muita atenção ao processamento de carateres especiais, como a nova linha
\n
. Use o formato'\n'
para garantir que o delimitador é interpretado corretamente. A utilização simples de\n
sem aspas nem carateres de escape resulta num delimitador de"n"
.MINIMUM_OBJECT_CREATE_TIME
: especifica o tempo mínimo em que um objeto foi criado para que seja carregado. Deve estar em UTC no formatoYYYY-MM-DDThh:mm:ssZ
. Por exemplo,2024-10-14T08:30:30Z
.Qualquer data, passada ou futura, de
0001-01-01T00:00:00Z
a9999-12-31T23:59:59Z
, inclusive, é válida.MATCH_GLOB
: especifica o padrão glob a corresponder para que um objeto seja carregado. Quando usa a CLI gcloud, um padrão glob com carateres*
tem de ter o carater*
formatado como carater de escape no formato\*\*.txt
ou todo o padrão glob tem de estar entre aspas"**.txt"
ou'**.txt'
. Para ver informações sobre a sintaxe suportada para padrões glob, consulte a documentação do Cloud Storage.
-
Na Google Cloud consola, aceda à página Tópicos.
-
Clique no tópico de importação do Cloud Storage.
-
Na página de detalhes do tópico, clique em Editar.
-
Atualize os campos que quer alterar.
-
Clique em Atualizar.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Para evitar perder as definições do tópico de importação, certifique-se de que inclui todas as definições sempre que atualizar o tópico. Se omitir algo, o Pub/Sub repõe a definição para o respetivo valor predefinido original.
Execute o comando
gcloud pubsub topics update
com todos os sinalizadores mencionados no seguinte exemplo:gcloud pubsub topics update TOPIC_ID \ --cloud-storage-ingestion-bucket=BUCKET_NAME\ --cloud-storage-ingestion-input-format=INPUT_FORMAT\ --cloud-storage-ingestion-text-delimiter=TEXT_DELIMITER\ --cloud-storage-ingestion-minimum-object-create-time=MINIMUM_OBJECT_CREATE_TIME\ --cloud-storage-ingestion-match-glob=MATCH_GLOB
Substitua o seguinte:
-
TOPIC_ID é o ID ou o nome do tópico. Não é possível atualizar este campo.
-
BUCKET_NAME: especifica o nome de um contentor existente. Por exemplo,
prod_bucket
. O nome do contentor não pode incluir o ID do projeto. Para criar um contentor, consulte o artigo Crie contentores. -
INPUT_FORMAT: especifica o formato dos objetos carregados. Pode ser
text
,avro
oupubsub_avro
. Consulte o formato de entrada para mais informações sobre estas opções. -
TEXT_DELIMITER: Especifica o delimitador com o qual dividir os objetos de texto em mensagens do Pub/Sub. Este deve ser um único caráter e só deve ser definido quando
INPUT_FORMAT
étext
. A predefinição é o caráter de nova linha (\n
).Quando usar a CLI gcloud para especificar o delimitador, preste muita atenção ao processamento de carateres especiais, como a nova linha
\n
. Use o formato'\n'
para garantir que o delimitador é interpretado corretamente. A utilização simples de\n
sem aspas nem carateres de escape resulta num delimitador de"n"
. -
MINIMUM_OBJECT_CREATE_TIME: especifica o tempo mínimo em que um objeto foi criado para que seja carregado. Deve estar em UTC no formato
YYYY-MM-DDThh:mm:ssZ
. Por exemplo,2024-10-14T08:30:30Z
.Qualquer data, passada ou futura, de
0001-01-01T00:00:00Z
a9999-12-31T23:59:59Z
, inclusive, é válida. -
MATCH_GLOB: especifica o padrão glob a corresponder para que um objeto seja carregado. Quando usa a CLI gcloud, um padrão glob com carateres
*
tem de ter o carater*
formatado como carater de escape no formato\*\*.txt
ou todo o padrão glob tem de estar entre aspas"**.txt"
ou'**.txt'
. Para ver informações sobre a sintaxe suportada para padrões glob, consulte a documentação do Cloud Storage.
-
Ative os registos da plataforma para um tópico de importação do Cloud Storage.
Escolha o tipo de subscrição para o seu tópico.
Saiba como publicar uma mensagem num tópico.
Resolva problemas de um tópico de importação do Cloud Storage.
Atribua funções do Cloud Storage à conta de serviço do Pub/Sub
Para criar um tópico de importação do Cloud Storage, a conta de serviço do Pub/Sub tem de ter autorização para ler a partir do contentor do Cloud Storage específico. As seguintes autorizações são necessárias:
Para atribuir estas autorizações à conta de serviço do Pub/Sub, escolha um dos seguintes procedimentos:
Autorizações de contentor
Execute os seguintes passos para conceder a função Storage Legacy Object Reader (roles/storage.legacyObjectReader
) e as funções Storage Legacy Bucket Reader (roles/storage.legacyBucketReader
) à conta de serviço do Pub/Sub ao nível do contentor:
Autorizações do projeto
Execute os seguintes passos para conceder a função de administrador de armazenamento (roles/storage.admin
) ao nível do projeto:
Para mais informações sobre o IAM do Cloud Storage, consulte o artigo Cloud Storage Identity and Access Management.
Propriedades dos tópicos de importação do Cloud Storage
Para mais informações sobre as propriedades comuns em todos os tópicos, consulte o artigo Propriedades de um tópico.
Nome do contentor
Este é o nome do contentor do Cloud Storage a partir do qual o Pub/Sub lê os dados publicados num tópico de importação do Cloud Storage.
Formato de entrada
Quando cria um tópico de importação do Cloud Storage, pode especificar o formato dos objetos a serem carregados como Texto, Avro ou Pub/Sub Avro.
Tempo mínimo de criação de objetos
Opcionalmente, pode especificar um tempo mínimo de criação de objetos quando cria um tópico de importação do Cloud Storage. Apenas são carregados objetos criados a partir desta data/hora. Esta data/hora tem de ser fornecida
num formato como YYYY-MM-DDThh:mm:ssZ
.
Qualquer data, passada ou futura, entre 0001-01-01T00:00:00Z
e 9999-12-31T23:59:59Z
, inclusive, é válida.
Corresponda ao padrão glob
Opcionalmente, pode especificar um padrão glob de correspondência quando cria um tópico de importação do Cloud Storage. Apenas são carregados objetos com nomes que correspondem a este padrão. Por exemplo, para carregar todos os objetos com o sufixo .txt
, pode especificar o padrão glob como **.txt
.
Para ver informações sobre a sintaxe suportada para padrões glob, consulte a documentação do Cloud Storage.
Use tópicos de importação do Cloud Storage
Pode criar um novo tópico de importação ou editar um tópico existente.
Considerações
Crie um tópico de importação do Cloud Storage
Para criar um tópico de importação do Cloud Storage, siga estes passos:
Consola
gcloud
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.
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.
Se tiver problemas, consulte o artigo Resolução de problemas de um tópico de importação do Cloud Storage.
Edite um tópico de importação do Cloud Storage
Pode editar um tópico de importação do Cloud Storage para atualizar as respetivas propriedades.
Por exemplo, para reiniciar o carregamento, pode alterar o contentor ou atualizar o tempo mínimo de criação de objetos.
Para editar um tópico de importação do Cloud Storage, siga estes passos:
Consola
gcloud
Quotas e limites para tópicos de importação do Cloud Storage
O débito do publicador para tópicos de importação está limitado pela quota de publicação do tópico. Para mais informações, consulte o artigo Quotas e limites do Pub/Sub.