Este guia mostra exemplos de funções que são acionadas quando você faz mudanças em um documento dentro de uma coleção especificada.
Antes de começar
Antes de executar o exemplo de código neste guia, faça o seguinte:
- Ativar APIs e conceder os papéis necessários para implantar funções
- Configurar um banco de dados do Firestore
Exemplos
Os exemplos a seguir demonstram como escrever funções que respondem a um gatilho do Firestore.
Exemplo 1: função Hello Firestore
A amostra a seguir imprime os campos de um evento de acionamento do Firestore:
Node.js
Python
Go
Java
C#
Implantar a função "Olá, Firestore"
Se ainda não tiver feito isso, configure o banco de dados do Firestore.
Depois de implantar uma função, é possível configurar um gatilho usando o console Google Cloud , a Google Cloud CLI ou o Terraform.
Console
Ao usar o console do Google Cloud para criar uma função, também é possível adicionar um acionador a ela. Siga estas etapas para criar um acionador para sua função:
No Google Cloud console, acesse o Cloud Run:
Clique em Escrever uma função e insira os detalhes dela. Para mais informações sobre como configurar funções durante a implantação, consulte Implantar funções.
Na seção Gatilho, clique em Adicionar gatilho.
Selecione Gatilho do Firestore.
No painel Gatilho do Eventarc, modifique os detalhes do gatilho da seguinte maneira:
Insira um nome para o gatilho no campo Nome do gatilho ou use o nome padrão.
Selecione um Tipo de acionador na lista:
Fontes do Google para especificar acionadores para Pub/Sub, Cloud Storage, Firestore, e outros provedores de eventos do Google.
Terceiros para integração com provedores que não são do Google que oferecem uma origem do Eventarc. Para mais informações, consulte Eventos de terceiros no Eventarc.
Selecione Cloud Firestore na lista Provedor de eventos para escolher um produto que ofereça o tipo de evento para acionar sua função. Para ver a lista de provedores de eventos, consulte Provedores e destinos de eventos.
Selecione type=google.cloud.firestore.document.v1.written na lista Tipo de evento. A configuração do gatilho varia de acordo com o tipo de evento compatível: Para mais informações, consulte Tipos de eventos.
Deixe o campo Tipo de conteúdo de dados de eventos no estado em que se encontra.
Na seção Filtros, selecione um banco de dados, uma operação e valores de atributo ou use as seleções padrão.
Se o campo Região estiver ativado, selecione um local para o gatilho do Eventarc. Em geral, o local de um gatilho do Eventarc precisa corresponder ao local do recursoGoogle Cloud que você quer monitorar para eventos. Na maioria dos cenários, você também precisa implantar a função na mesma região. Consulte Noções básicas sobre locais do Eventarc para mais detalhes sobre locais de acionador do Eventarc.
No campo Conta de serviço, selecione uma conta de serviço. Os acionadores do Eventarc são vinculados a contas de serviço para usar como uma identidade ao invocar a função. A conta de serviço do acionador do Eventarc precisa ter permissão para invocar a função. Por padrão, o Cloud Run usa a conta de serviço padrão do Compute Engine.
Se quiser, especifique o caminho do URL do serviço para enviar a solicitação recebida. Esse é o caminho relativo no serviço de destino para o qual os eventos do gatilho precisam ser enviados. Por exemplo:
/,/route,routeeroute/subroute.Se quiser ativar novas tentativas em caso de falha na tentativa de entrega, marque a caixa de seleção Ativar novas tentativas em caso de falha. Caso contrário, o comportamento padrão é uma única tentativa de entrega sem novas tentativas. Para mais informações, consulte Repetir eventos.
Depois de preencher os campos obrigatórios, clique em Salvar gatilho.
Clique em Criar.
Na guia Origem, edite o código-fonte se necessário e selecione Salvar e implantar novamente.
gcloud
Ao criar uma função usando a CLI gcloud, primeiro é necessário implantar a função e, em seguida, criar um gatilho. Siga estas etapas para criar um gatilho para sua função:
Execute o seguinte comando no diretório que contém o exemplo de código para implantar sua função:
gcloud run deploy FUNCTION \ --source . \ --function FUNCTION_ENTRYPOINT \ --base-image BASE_IMAGE_ID \ --region REGIONSubstitua:
FUNCTION: o nome da função que você está implantando. É possível omitir esse parâmetro inteiramente, mas será solicitado o nome, se você omiti-lo.FUNCTION_ENTRYPOINT: o ponto de entrada da função no código-fonte. Esse é o código que o Cloud Run executa quando a função é executada. O valor dessa sinalização precisa ser um nome de função ou de classe totalmente qualificada no código-fonte.BASE_IMAGE_ID: o ambiente de imagem de base para sua função. Para mais detalhes sobre as imagens de base e os pacotes incluídos em cada imagem, consulte Imagens de base dos ambientes de execução.REGION: a Google Cloud região em que você quer implantar a função. Por exemplo,europe-west1.
Execute o comando a seguir para criar um gatilho que filtra e encaminha eventos:
gcloud eventarc triggers create TRIGGER_NAME \ --location=LOCATION \ --destination-run-service=FUNCTION \ --destination-run-region=DESTINATION_RUN_REGION \ --event-filters="type=EVENT_FILTER_TYPE" \ --event-filters=database='(default)' \ --event-data-content-type=application/protobuf \ --event-filters-path-pattern=document='users/{username}' \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.comSubstitua:
TRIGGER_NAME: o ID do gatilho ou um identificador totalmente qualificado.LOCATION: o local do gatilho do Eventarc. Como alternativa, é possível definir a propriedadeeventarc/location, por exemplo:gcloud config set eventarc/location us-central1.Para evitar problemas de desempenho e residência de dados, o local precisa corresponder ao do serviço Google Cloud que está gerando eventos. Saiba mais em Locais do Eventarc.
-
FUNCTION: o nome da função implantada do Cloud Run que recebe os eventos do gatilho. -
DESTINATION_RUN_REGION: (opcional) o local do Cloud Run em que a função de destino do Cloud Run pode ser encontrada. Se não especificado, presume-se que a função está na mesma região que o gatilho. EVENT_FILTER_TYPE: o identificador do evento. Um evento é gerado quando uma chamada de API para o método é bem-sucedida. Para operações de longa duração, o evento só é gerado no final da operação e apenas se a ação for realizada com êxito. Para conferir uma lista de tipos de evento compatíveis, consulte Tipos de evento do Google compatíveis com o Eventarc.SERVICE_ACCOUNT_NAME: o nome da conta de serviço gerenciada pelo usuário.PROJECT_ID: o ID do projeto Google Cloud .
Observações:
- Após a criação de um gatilho, o tipo do filtro de evento não pode ser alterado. Para um tipo de evento diferente, crie um novo gatilho.
--event-filters=type=google.cloud.firestore.document.v1.writtenespecifica que a função é acionada quando um documento é criado, atualizado ou excluído, de acordo com o tipo de evento.--event-filters=database='(default)'especifica o banco de dados do Firebase. Para o nome padrão do banco de dados, use(default).--event-filters-path-pattern=document='users/{username}'fornece o padrão de caminho dos documentos que precisam ser monitorados para mudanças relevantes. Esse padrão de caminho informa que todos os documentos na coleçãousersprecisam ser monitorados. Para mais informações, consulte Entender os padrões de caminho.- Opcionalmente, para especificar uma única tentativa de entrega de evento sem novas tentativas, use a
flag
--max-retry-attempts. O único valor válido é1. Se você omitir a flag, o comportamento padrão de repetição será aplicado. Para mais informações, consulte Repetir eventos. - Outras flags estão disponíveis. Para obter mais informações, consulte
gcloud eventarc triggers create.
Terraform
Para criar um gatilho do Eventarc para uma função do Cloud Run, consulte Criar um gatilho usando o Terraform.
Testar a função "Olá, Firestore"
Para testar a função "Olá, Firestore", configure uma coleção chamada
users no seu banco de dados do Firestore:
No console do Google Cloud , acesse a página "Bancos de dados do Firestore":
Clique em Iniciar uma coleção.
Especifique
userscomo o ID da coleção.Para começar a adicionar o primeiro documento da coleção, em Adicionar o primeiro documento, aceite o ID do documento gerado automaticamente.
Adicione pelo menos um campo para o documento, especificando um nome e um valor. Por exemplo, em Nome do campo, insira
usernamee, em Valor do campo, insirarowan.Quando terminar, clique em Save.
Esta ação cria um novo documento, acionando sua função.
Para confirmar que sua função foi acionada, clique no nome vinculado da função na página Visão geral do Cloud Run no console Google Cloud para abrir a página Detalhes do serviço.
Na guia Observabilidade, selecione Registros e procure a seguinte string:
Function triggered by change to: //firestore.googleapis.com/projects/your-project-id/databases/(default)'
Exemplo 2: converter para a função "Maiúsculas"
O exemplo abaixo recupera o valor adicionado pelo usuário, converte a string nesse local para letras maiúsculas e substitui o valor pela string de caracteres maiúsculos:
Node.js
Use protobufjs para decodificar os dados do evento. Inclua google.events.cloud.firestore.v1
data.proto
na sua origem.
Python
Go
Java
C#
Implantar a função "Converter para letras maiúsculas"
Se ainda não tiver feito isso, configure o banco de dados do Firestore.
Depois de implantar uma função, é possível configurar um gatilho usando o console Google Cloud , a Google Cloud CLI ou o Terraform.
Console
Ao usar o console do Google Cloud para criar uma função, também é possível adicionar um acionador a ela. Siga estas etapas para criar um acionador para sua função:
No Google Cloud console, acesse o Cloud Run:
Clique em Escrever uma função e insira os detalhes dela. Para mais informações sobre como configurar funções durante a implantação, consulte Implantar funções.
Na seção Gatilho, clique em Adicionar gatilho.
Selecione Gatilho do Firestore.
No painel Gatilho do Eventarc, modifique os detalhes do gatilho da seguinte maneira:
Insira um nome para o gatilho no campo Nome do gatilho ou use o nome padrão.
Selecione um Tipo de acionador na lista:
Fontes do Google para especificar acionadores para Pub/Sub, Cloud Storage, Firestore, e outros provedores de eventos do Google.
Terceiros para integração com provedores que não são do Google que oferecem uma origem do Eventarc. Para mais informações, consulte Eventos de terceiros no Eventarc.
Selecione Firestore na lista Provedor de eventos para escolher um produto que ofereça o tipo de evento para acionar sua função. Para ver a lista de provedores de eventos, consulte Provedores e destinos de eventos.
Selecione type=google.cloud.firestore.document.v1.written na lista Tipo de evento. A configuração do gatilho varia de acordo com o tipo de evento compatível: Para mais informações, consulte Tipos de eventos.
Deixe o campo Tipo de conteúdo de dados de eventos no estado em que se encontra.
Na seção Filtros, selecione um banco de dados, uma operação e valores de atributo ou use as seleções padrão. Se você nomeou o banco de dados, insira o nome no campo Valor de atributo 1.
Se o campo Região estiver ativado, selecione um local para o gatilho do Eventarc. Em geral, o local de um gatilho do Eventarc precisa corresponder ao local do recursoGoogle Cloud que você quer monitorar para eventos. Na maioria dos cenários, você também precisa implantar a função na mesma região. Consulte Noções básicas sobre locais do Eventarc para mais detalhes sobre locais de acionador do Eventarc.
No campo Conta de serviço, selecione uma conta de serviço. Os acionadores do Eventarc são vinculados a contas de serviço para usar como uma identidade ao invocar a função. A conta de serviço do acionador do Eventarc precisa ter permissão para invocar a função. Por padrão, o Cloud Run usa a conta de serviço padrão do Compute Engine.
Se quiser, especifique o caminho do URL do serviço para enviar a solicitação recebida. Esse é o caminho relativo no serviço de destino para o qual os eventos do gatilho precisam ser enviados. Por exemplo:
/,/route,routeeroute/subroute.Se quiser ativar novas tentativas em caso de falha na tentativa de entrega, marque a caixa de seleção Ativar novas tentativas em caso de falha. Caso contrário, o comportamento padrão é uma única tentativa de entrega sem novas tentativas. Para mais informações, consulte Repetir eventos.
Depois de preencher os campos obrigatórios, clique em Salvar gatilho.
Clique em Criar.
Na guia Origem, edite o código-fonte se necessário e selecione Salvar e implantar novamente.
gcloud
Ao criar uma função usando a CLI gcloud, primeiro é necessário implantar a função e, em seguida, criar um gatilho. Siga estas etapas para criar um gatilho para sua função:
Execute o seguinte comando no diretório que contém o exemplo de código para implantar sua função:
gcloud run deploy FUNCTION \ --source . \ --function FUNCTION_ENTRYPOINT \ --base-image BASE_IMAGE_ID \ --region REGIONSubstitua:
FUNCTION: o nome da função que você está implantando. É possível omitir esse parâmetro inteiramente, mas será solicitado o nome, se você omiti-lo.FUNCTION_ENTRYPOINT: o ponto de entrada da função no código-fonte. Esse é o código que o Cloud Run executa quando a função é executada. O valor dessa sinalização precisa ser um nome de função ou de classe totalmente qualificada no código-fonte.BASE_IMAGE_ID: o ambiente de imagem de base para sua função. Para mais detalhes sobre as imagens de base e os pacotes incluídos em cada imagem, consulte Imagens de base dos ambientes de execução.REGION: a Google Cloud região em que você quer implantar a função. Por exemplo,europe-west1.
Execute o comando a seguir para criar um gatilho que filtra e encaminha eventos:
gcloud eventarc triggers create TRIGGER_NAME \ --location=LOCATION \ --destination-run-service=FUNCTION \ --destination-run-region=DESTINATION_RUN_REGION \ --event-filters=type=google.cloud.firestore.document.v1.written \ --event-filters=database='(default)' \ --event-data-content-type=application/protobuf \ --event-filters-path-pattern=document='messages/{pushId}' \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.comSubstitua:
TRIGGER_NAME: o ID do gatilho ou um identificador totalmente qualificado.LOCATION: o local do gatilho do Eventarc. Como alternativa, é possível definir a propriedadeeventarc/location, por exemplo:gcloud config set eventarc/location us-central1.Para evitar problemas de desempenho e residência de dados, o local precisa corresponder ao do serviço Google Cloud que está gerando eventos. Saiba mais em Locais do Eventarc.
-
FUNCTION: o nome da função implantada do Cloud Run que recebe os eventos do gatilho. -
DESTINATION_RUN_REGION: (opcional) o local do Cloud Run em que a função de destino do Cloud Run pode ser encontrada. Se não especificado, presume-se que a função está na mesma região que o gatilho. EVENT_FILTER_TYPE: o identificador do evento. Um evento é gerado quando uma chamada de API para o método é bem-sucedida. Para operações de longa duração, o evento só é gerado no final da operação e apenas se a ação for realizada com êxito. Para conferir uma lista de tipos de evento compatíveis, consulte Tipos de evento do Google compatíveis com o Eventarc.SERVICE_ACCOUNT_NAME: o nome da conta de serviço gerenciada pelo usuário.PROJECT_ID: o ID do projeto Google Cloud .
Observações:
- Após a criação de um gatilho, o tipo do filtro de evento não pode ser alterado. Para um tipo de evento diferente, crie um novo gatilho.
--event-filters=type=google.cloud.firestore.document.v1.writtenespecifica que a função é acionada quando um documento é criado, atualizado ou excluído, de acordo com o tipo de evento.--event-filters=database='(default)'especifica o banco de dados do Firebase. Para o nome padrão do banco de dados, use(default).--event-filters-path-pattern=document='users/{username}'fornece o padrão de caminho dos documentos que precisam ser monitorados para mudanças relevantes. Esse padrão de caminho informa que todos os documentos na coleçãousersprecisam ser monitorados. Para mais informações, consulte Entender os padrões de caminho.- Opcionalmente, para especificar uma única tentativa de entrega de evento sem novas tentativas, use a
flag
--max-retry-attempts. O único valor válido é1. Se você omitir a flag, o comportamento padrão de repetição será aplicado. Para mais informações, consulte Repetir eventos. - Outras flags estão disponíveis. Para obter mais informações, consulte
gcloud eventarc triggers create.
Terraform
Para criar um gatilho do Eventarc para uma função do Cloud Run, consulte Criar um gatilho usando o Terraform.
Use os outros campos como estão:
--event-filters=type=google.cloud.firestore.document.v1.writtenespecifica que a função é acionada quando um documento é criado, atualizado ou excluído, de acordo com o tipo de eventogoogle.cloud.firestore.document.v1.written.--event-filters=database='(default)'especifica o banco de dados do Firestore. Para o nome padrão do banco de dados, use(default).--event-filters-path-pattern=document='messages/{pushId}'fornece o padrão de caminho dos documentos que precisam ser monitorados para alterações relevantes. Esse padrão de caminho informa que todos os documentos na coleçãomessagesprecisam ser monitorados. Para mais informações, consulte Entender os padrões de caminho.
Testar a função "Converter para letras maiúsculas"
Para testar a função "Converter para letras maiúsculas" que você acabou de implantar, configure
uma coleção chamada messages no seu
banco de dados do Firestore:
No console do Google Cloud , acesse a página "Bancos de dados do Firestore":
Selecione o ID do banco de dados do Firestore.
Clique em Iniciar uma coleção.
Especifique
messagescomo o ID da coleção.Para começar a adicionar o primeiro documento da coleção, em Adicionar o primeiro documento, aceite o ID do documento gerado automaticamente.
Para acionar a função implantada, adicione um documento em que o Nome do campo seja
originale o Valor do campo sejaminka.Ao salvar o documento, você verá a palavra em letras minúsculas no campo de valor ser convertida em maiúsculas.
Se você editar posteriormente o valor do campo para conter letras minúsculas, isso acionará a função novamente, convertendo todas as letras minúsculas para maiúsculas.
Limitações para funções
- Não garantimos acionamentos em ordem. Alterações rápidas podem acionar invocações de função em uma ordem inesperada.
- Os eventos são entregues pelo menos uma vez, mas um único evento pode resultar em invocações de várias funções. Evite depender de mecanismos do tipo "apenas uma vez" e escreva funções idempotentes.
- Um gatilho está associado a um único banco de dados. Não é possível criar um gatilho que corresponda a vários bancos de dados.
- A exclusão de um banco de dados não remove automaticamente nenhum gatilho dele. O acionador deixa de entregar eventos, mas continua existindo até que você o exclua.