Criar acionadores com base em eventos do Firestore

Este guia aborda as instruções para criar gatilhos para serviços e funções do Cloud Run com base em eventos do Firestore.

É possível configurar os serviços do Cloud Run para que sejam acionados por eventos em um banco de dados do Firestore. Quando acionado, seu serviço lê e atualiza um banco de dados do Firestore em resposta a esses eventos pelas APIs do Firestore e bibliotecas de cliente.

Em um ciclo de vida típico, o seguinte acontece quando um serviço do Cloud Run é acionado por eventos do Firestore:

  1. O serviço espera por mudanças em um documento específico.

  2. Quando uma mudança ocorre, o serviço é acionado e realiza as tarefas dele.

  3. O serviço recebe um objeto de dados com um snapshot do documento afetado. Para eventos write ou update, o objeto de dados contém snapshots que representam o estado do documento antes e depois do evento de acionamento.

Tipos de evento

O Firestore oferece suporte aos eventos create, update, delete e write. O evento write engloba todas as modificações em um documento.

Tipo de evento Gatilho
google.cloud.firestore.document.v1.created (padrão) Acionado quando um documento é gravado pela primeira vez.
google.cloud.firestore.document.v1.updated Acionado quando um documento já existe e tem algum valor alterado.
google.cloud.firestore.document.v1.deleted Acionado quando um documento com dados é excluído.
google.cloud.firestore.document.v1.written Acionado quando um documento é criado, atualizado ou excluído.

Os caracteres curingas são escritos em gatilhos usando chaves, por exemplo: projects/YOUR_PROJECT_ID/databases/(default)/documents/collection/{document_wildcard}

Especificar o caminho do documento

Para acionar seu serviço, especifique um caminho de documento para detectar. O caminho do documento precisa estar no mesmo projeto Google Cloud que o serviço.

Confira a seguir alguns exemplos de caminhos de documentos válidos:

  • users/marie: gatilho válido. Monitora um único documento, /users/marie.

  • users/{username}: gatilho válido. Monitora todos os documentos do usuário. Caracteres curingas são usados para monitorar todos os documentos na coleção.

  • users/{username}/addresses: gatilho inválido. Refere-se à subcoleção addresses, não a um documento.

  • users/{username}/addresses/home: gatilho válido. Monitora o documento de endereço residencial de todos os usuários.

  • users/{username}/addresses/{addressId}: gatilho válido. Monitora todos os documentos de endereço.

  • users/{user=**}: gatilho válido. Monitora todos os documentos do usuário e quaisquer documentos em subcoleções em cada documento do usuário, como /users/userID/address/home ou /users/userID/phone/work.

Caracteres curinga e parâmetros

Se você não souber o documento específico que quer monitorar, use um {wildcard} em vez do ID do documento:

  • users/{username} detecta alterações feitas em todos os documentos do usuário.

Neste exemplo, quando qualquer campo em qualquer documento em users é alterado, ele corresponde a um caractere curinga chamado {username}.

Se um documento em users tiver subcoleções e um campo em um dos documentos dessas subcoleções for alterado, o caractere curinga {username} não será acionado. Se o objetivo é responder a eventos em subcoleções também, use o caractere curinga de vários segmentos {username=**}.

As correspondências de caractere curinga são extraídas dos caminhos do documento. Defina quantos caracteres curinga você quiser para substituir a coleção explícita ou os IDs dos documentos. É possível usar até um caractere curinga de vários segmentos, como {username=**}.

Estruturas de eventos

Esse gatilho invoca seu serviço com um evento semelhante a:

{
    "oldValue": { // Update and Delete operations only
        A Document object containing a pre-operation document snapshot
    },
    "updateMask": { // Update operations only
        A DocumentMask object that lists changed fields.
    },
    "value": {
        // A Document object containing a post-operation document snapshot
    }
}

Cada objeto Document contém um ou mais objetos Value. Consulte a documentação Value para referências de tipo.

Antes de começar

  1. Verifique se você configurou um novo projeto para o Cloud Run conforme descrito na página de configuração.
  2. Ative as APIs Artifact Registry, Cloud Build, API Cloud Run Admin, Eventarc, Firestore Cloud Logging e API Pub/Sub:

    Ativar as APIs

  3. Conceda as permissões e os papéis necessários do IAM.

Papéis necessários para a conta do implantador

Para ter as permissões necessárias para acionar eventos do Firestore, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.

Por padrão, as permissões do Cloud Build incluem permissões para upload e download de artefatos do Artifact Registry.

Configurar o banco de dados do Firestore

Antes de implantar o serviço, crie um banco de dados do Firestore:

  1. Acesse a página de dados do Firestore.

  2. Selecione Criar banco de dados.

  3. Clique em Modo nativo e selecione Continuar.

  4. No campo Nomeie seu banco de dados, insira um ID do banco de dados, como firestore-db.

  5. Em Tipo de local, selecione Região e escolha a região em que seu banco de dados vai ficar. Essa opção é permanente.

  6. Deixe a seção Regras de segurança no estado em que se encontra.

  7. Clique em Criar banco de dados.

O modelo de dados do Firestore consiste em coleções que contêm documentos. Cada documento contém um conjunto de pares de chave-valor.

Criar acionadores

Dependendo do tipo de serviço que você está implantando, é possível:

Criar um gatilho para serviços

Depois de implantar um serviço, é possível configurar um acionador usando o console Google Cloud , a Google Cloud CLI ou o Terraform.

Console

  1. Implante seu serviço do Cloud Run usando contêineres ou de origem.

  2. No Google Cloud console, acesse o Cloud Run:

    Acesse o Cloud Run

  3. Na lista de serviços, clique em um serviço atual.

  4. Na página de detalhes do serviço, acesse a guia Gatilhos.

  5. Clique em Adicionar gatilho e selecione Gatilho do Firestore.

  6. No painel Gatilho do Eventarc, modifique os detalhes do gatilho da seguinte maneira:

    1. No campo Nome do gatilho, digite um nome ou use o nome padrão.

    2. Selecione um Tipo de acionador na lista para especificar um dos seguintes tipos de acionador:

      • 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.

    3. Selecione Firestore na lista Provedor de eventos para escolher um produto que ofereça o tipo de evento para acionar seu serviço. Para ver a lista de provedores de eventos, consulte Provedores e destinos de eventos.

    4. Selecione type=google.cloud.firestore.document.v1.created 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.

    5. Na seção "Filtros", selecione um banco de dados, uma operação e valores de atributos ou use as seleções padrão.

    6. 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 recurso Google Cloud que você quer monitorar para eventos. Na maioria dos cenários, você também precisa implantar o serviço na mesma região. Consulte Noções básicas sobre locais do Eventarc para mais detalhes sobre locais de acionador do Eventarc.

    7. 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 o serviço. A conta de serviço do acionador do Eventarc precisa ter permissão para invocar o serviço. Por padrão, o Cloud Run usa a conta de serviço padrão do Compute Engine.

    8. 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, route e route/subroute.

    9. 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.

    10. Depois de preencher os campos obrigatórios, clique em Salvar gatilho.

  7. Depois de criar o gatilho, verifique a integridade garantindo que haja uma marca de seleção na guia Gatilhos.

gcloud

  1. Implante seu serviço do Cloud Run usando contêineres ou de origem.

  2. 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=DESTINATION_RUN_SERVICE  \
        --destination-run-region=DESTINATION_RUN_REGION \
        --event-filters="type=EVENT_FILTER_TYPE" \
        --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
    

    Substitua:

    • TRIGGER_NAME: o ID do gatilho ou um identificador totalmente qualificado.
    • LOCATION: o local do gatilho do Eventarc. Como alternativa, é possível definir a propriedade eventarc/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.

    • DESTINATION_RUN_SERVICE: o nome do serviço do Cloud Run que recebe os eventos do gatilho. O serviço pode estar em qualquer um dos locais compatíveis com o Cloud Run e não precisa estar no mesmo local que o gatilho. No entanto, o serviço precisa estar no mesmo projeto que o gatilho e receberá eventos como solicitações POST HTTP enviadas para o caminho de URL raiz (/) sempre que o evento for gerado.
    • DESTINATION_RUN_REGION: (opcional) o local do Cloud Run em que o serviço de destino do Cloud Run pode ser encontrado. Se não especificado, presume-se que o serviç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.written especifica 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ção users precisam 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 um serviço do Cloud Run, consulte Criar um gatilho usando o Terraform.

Criar um gatilho para funções

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:

  1. No Google Cloud console, acesse o Cloud Run:

    Acessar o Cloud Run

  2. 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.

  3. Na seção Gatilho, clique em Adicionar gatilho.

  4. Selecione Gatilho do Firestore.

  5. No painel Gatilho do Eventarc, modifique os detalhes do gatilho da seguinte maneira:

    1. Insira um nome para o gatilho no campo Nome do gatilho ou use o nome padrão.

    2. 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.

    3. 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.

    4. Selecione type=google.cloud.firestore.document.v1.created 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.

    5. Na seção "Filtros", selecione um banco de dados, uma operação e valores de atributos ou use as seleções padrão.

    6. 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.

    7. 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.

    8. 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, route e route/subroute.

    9. 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.

  6. Depois de preencher os campos obrigatórios, clique em Salvar gatilho.

  7. Clique em Criar.

  8. 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:

  1. 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 REGION
    

    Substitua:

    • 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.

  2. 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" \
        --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
    

    Substitua:

    • TRIGGER_NAME: o ID do gatilho ou um identificador totalmente qualificado.
    • LOCATION: o local do gatilho do Eventarc. Como alternativa, é possível definir a propriedade eventarc/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.written especifica 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ção users precisam 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.

Consulte Ampliar o Firestore com acionadores de eventos usando o Cloud Run functions para mais informações.

A seguir

  • Confira exemplos de funções que são acionadas quando você faz mudanças em um documento dentro de uma coleção especificada.