Encaminhe eventos do Firebase Realtime Database para o GKE

Um acionador do Eventarc declara o seu interesse num determinado evento ou conjunto de eventos. Pode configurar o encaminhamento de eventos especificando filtros para o acionador, incluindo a origem do evento e o serviço Google Kubernetes Engine (GKE) de destino em execução num cluster do GKE. Tenha em atenção que os alvos só podem incluir serviços executados em clusters do GKE (públicos ou privados) com pontos finais públicos. Para segmentar serviços em clusters do GKE com pontos finais privados, encaminhe eventos para pontos finais HTTP internos.

O Eventarc envia eventos para o recetor de eventos num formato CloudEvents através de um pedido HTTP.

Estas instruções mostram como configurar o encaminhamento de eventos para o seu serviço GKE que é acionado por um eventoFirebase Realtime Database direto. Para mais detalhes, consulte a lista de eventos diretos suportados.

Antes de começar

Tem de ativar a federação de identidades da carga de trabalho para o GKE no cluster do GKE em que o serviço de destino está a ser executado. A Workload Identity Federation para o GKE é necessária para configurar corretamente o encaminhador de eventos e é a forma recomendada de aceder aos Google Cloud serviços a partir de aplicações em execução no GKE devido às suas propriedades de segurança e capacidade de gestão melhoradas.

Arquitetura de eventos do Eventarc para destinos do GKE

Workload Identity Federation para o GKE

As aplicações executadas no GKE podem precisar de acesso aGoogle Cloud APIs. A federação de identidades da carga de trabalho para o GKE permite que uma conta de serviço do Kubernetes no seu cluster do GKE atue como uma conta de serviço do IAM. Os pods que usam a conta de serviço do Kubernetes configurada autenticam-se automaticamente como a conta de serviço do IAM quando acedem às APIs Google Cloud . A utilização da federação de identidade da carga de trabalho para o GKE permite-lhe atribuir identidades e autorização distintas e detalhadas a cada aplicação no seu cluster. Tenha em atenção que têm de ser concedidas autorizações específicas à conta de serviço do acionador do Eventarc. Neste documento, consulte os passos para criar uma conta de serviço.

Para mais informações sobre como ativar e configurar a Workload Identity Federation para o GKE nos seus clusters do GKE, consulte o artigo Use a Workload Identity Federation para o GKE.

Encaminhador de eventos

O encaminhador de eventos do Eventarc extrai novos eventos do Eventarc e encaminha-os para o destino do GKE. Este componente funciona como um mediador entre a camada de transporte do Pub/Sub e o serviço GKE. Funciona nos serviços existentes e também suporta serviços de sinalização (incluindo os que não estão expostos fora do cluster totalmente gerido), ao mesmo tempo que simplifica a configuração e a manutenção. Ao nível da rede, para receber eventos num serviço do GKE, não precisa de abrir o serviço ao tráfego externo, uma vez que todos os eventos são enviados a partir de uma origem que reside no mesmo cluster do GKE.

Tenha em atenção que o ciclo de vida do encaminhador de eventos é gerido pelo Eventarc e, se eliminar acidentalmente o encaminhador de eventos, o Eventarc restaura este componente.

Para cada acionador que aponta para um destino do GKE, o encaminhador de eventos (um pod gke-forwarder especificamente configurado) faz o seguinte:

  1. Usa a API Pub/Sub para abrir uma StreamingPull ligação ao transportador de acionadores (um tópico e uma subscrição do Pub/Sub) e recebe eventos à medida que ficam disponíveis.

  2. Transforma eventos no formato CloudEvents correto, codifica-os e envia-os como um pedido HTTP POST para o serviço GKE de destino.

O agente de serviço do Eventarc precisa da autorização para executar e atualizar regularmente a instância do gke-forwarder. Esta autorização tem de ser concedida uma vez por projeto. Para ver detalhes, consulte a secção Ative destinos do GKE neste documento.

Prepare-se para criar um acionador

Para cada acionador que segmenta um serviço do GKE, o Eventarc cria um componente encaminhador de eventos. O Eventarc requer autorizações para instalar o componente e gerir recursos no cluster do GKE. Antes de criar um acionador do Eventarc para destinos do GKE, certifique-se de que conclui as seguintes tarefas.

Consola

  1. Na Google Cloud consola, na página do seletor de projetos, selecione ou crie um Google Cloud projeto.

    Aceder ao seletor de projetos

  2. Ative as APIs Eventarc, Eventarc Publishing, Google Kubernetes Engine e Resource Manager.

    Ative as APIs

  3. Se aplicável, ative a API relacionada com os eventos diretos. Por exemplo, para eventos, ative a APIFirebase Realtime Database . Firebase Realtime Database

  4. Se ainda não tiver uma, crie uma conta de serviço gerida pelo utilizador e, em seguida, conceda-lhe as funções e as autorizações necessárias para que o Eventarc possa gerir eventos para o seu serviço de destino.

    1. Na Google Cloud consola, aceda à página Criar conta de serviço.

      Aceda a Criar conta de serviço

    2. Selecione o seu projeto.

    3. No campo Nome da conta de serviço, introduza um nome. A Google Cloud consola preenche o campo ID da conta de serviço com base neste nome.

      No campo Descrição da conta de serviço, introduza uma descrição. Por exemplo, Service account for event trigger.

    4. Clique em Criar e continuar.

    5. Para conceder o acesso adequado, na lista Selecionar uma função, selecione as funções de gestão de identidade e de acesso (IAM) necessárias para conceder à sua conta de serviço. Para mais informações, consulte o artigo Funções e autorizações para alvos do GKE.

      Para funções adicionais, clique em Adicionar outra função e adicione cada função adicional.

    6. Clique em Continuar.

    7. Para concluir a criação da conta, clique em Concluído.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    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.

  2. Ative as APIs Eventarc, Eventarc Publishing, Google Kubernetes Engine e Resource Manager.

    gcloud services enable eventarc.googleapis.com \
        eventarcpublishing.googleapis.com \
        container.googleapis.com \
        cloudresourcemanager.googleapis.com

  3. Se aplicável, ative a API relacionada com os eventos diretos. Por exemplo, para Firebase Realtime Database eventos, ative firebasedatabase.googleapis.com.

  4. Se ainda não tiver uma, crie uma conta de serviço gerida pelo utilizador e, em seguida, conceda-lhe as funções e as autorizações necessárias para que o Eventarc possa gerir eventos para o destino do GKE.

    1. Crie a conta de serviço:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Substitua SERVICE_ACCOUNT_NAME pelo nome da conta de serviço. Tem de ter entre 6 e 30 carateres e pode conter carateres alfanuméricos em minúsculas e traços. Depois de criar uma conta de serviço, não pode alterar o respetivo nome.

    2. Conceda as funções ou as autorizações da gestão de identidade e de acesso (IAM) necessárias. Para mais informações, consulte o artigo Funções e autorizações para alvos do GKE.

Ative os destinos do GKE

Para permitir que o Eventarc faça a gestão de recursos no cluster do GKE, ative os destinos do GKE e associe o agente de serviço do Eventarc às funções necessárias.

  1. Ative os destinos do GKE para o Eventarc:

    gcloud eventarc gke-destinations init
  2. No comando para associar as funções necessárias, introduza y.

    As seguintes funções estão associadas:

    • roles/compute.viewer
    • roles/container.developer
    • roles/iam.serviceAccountAdmin

Crie um acionador

Pode criar um acionador do Eventarc através da CLI Google Cloud ou da Google Cloud consola.

Consola

  1. Na Google Cloud consola, aceda à página Triggers do Eventarc.

    Aceda a Acionadores

  2. Clique em Criar acionador.
  3. Escreva um Nome do acionador.

    Este é o ID do acionador e tem de começar com uma letra. Pode conter até 63 letras minúsculas, números ou hífenes.

  4. Para o Tipo de acionador, selecione Fontes Google.
  5. Na lista Fornecedor de eventos, selecione Firebase Realtime Database.

    Tenha em atenção que o nome do fornecedor de eventos usado na Google Cloud documentação associada pode não ter um prefixo de Cloud ou Google Cloud. Por exemplo, na consola, o Memorystore for Redis é denominado Google Cloud Memorystore for Redis.

  6. Na lista Tipo de evento, nos eventos Direto, selecione um tipo de evento.
  7. Na lista Tipo de conteúdo dos dados de eventos, selecione a codificação do payload do evento.

    Para eventos diretos de Firebase Realtime Database, este tem de ser application/json.

  8. Na lista Região, selecione a mesma região que o Google Cloud serviço que está a gerar eventos.

    Para mais informações, consulte o artigo Localizações do Eventarc.

  9. No campo Atributo 1, o ID do recurso da instância funciona como um filtro de eventos. Selecione um operador para este filtro:
  10. No campo Valor do atributo 1, introduza o nome da instância da base de dados a partir da qual vai receber eventos. Consoante o operador que escolheu no passo anterior, o valor do atributo deve ser o nome exato ou um formato de padrão de caminho.
  11. Para o atributo ref, selecione o operador Padrão do caminho.
  12. No campo Valor do atributo 2, introduza o caminho da instância da base de dados para receber eventos se os dados forem criados, atualizados ou eliminados nesse caminho ou em qualquer caminho secundário.
  13. Selecione a conta de serviço que vai invocar o seu serviço ou fluxo de trabalho.

    Em alternativa, pode criar uma nova conta de serviço.

    Isto especifica o email da conta de serviço de gestão de identidade e de acesso (IAM) associado ao acionador e ao qual concedeu anteriormente funções específicas necessárias pelo Eventarc.

  14. Na lista Destino do evento, selecione Kubernetes Engine.
  15. Selecione um serviço.

    Este é o nome do serviço que recebe os eventos para o acionador. O serviço tem de estar no mesmo projeto que o acionador e recebe eventos como pedidos HTTP POST enviados para o respetivo caminho do URL raiz (/) sempre que o evento é gerado.

  16. Opcionalmente, pode especificar o caminho do URL do serviço para enviar o pedido recebido.

    Este é o caminho relativo no serviço de destino para o qual os eventos do acionador devem ser enviados. Por exemplo: /, /route, route, route/subroute.

  17. Opcionalmente, para adicionar uma etiqueta, pode clicar em Adicionar etiqueta. As etiquetas são pares de chave-valor que ajudam a organizar os seus Google Cloud recursos. Para mais informações, consulte o artigo O que são etiquetas?
  18. Clique em Criar.
  19. Depois de criar um acionador, não é possível modificar os filtros da origem do evento. Em alternativa, crie um novo acionador e elimine o antigo. Para mais informações, consulte o artigo Faça a gestão dos acionadores.

gcloud

Pode criar um acionador executando um gcloud eventarc triggers createcomando juntamente com flags obrigatórias e opcionais.

gcloud eventarc triggers create TRIGGER \
    --location=LOCATION \
    --destination-gke-cluster=DESTINATION_GKE_CLUSTER \
    --destination-gke-location=DESTINATION_GKE_LOCATION \
    --destination-gke-namespace=DESTINATION_GKE_NAMESPACE \
    --destination-gke-service=DESTINATION_GKE_SERVICE \
    --destination-gke-path=DESTINATION_GKE_PATH \
    --event-filters="type=EVENT_FILTER_TYPE" \
    --event-filters="instance=INSTANCE" \
    --event-filters-path-pattern="ref=REF" \
    --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com"

Substitua o seguinte:

  • TRIGGER: o ID do acionador ou um identificador totalmente qualificado
  • LOCATION: a localização do acionador do Eventarc. Em alternativa, pode definir a propriedade eventarc/location; por exemplo, gcloud config set eventarc/location us-central1.

    Os acionadores da Firebase Realtime Database para o Eventarc só estão disponíveis em determinadas localizações, e o acionador tem de estar na mesma localização que a instância da Firebase Realtime Database. Para mais informações, consulte as localizações do Eventarc e as localizações da base de dados em tempo real.

  • DESTINATION_GKE_CLUSTER: o nome do cluster do GKE no qual o serviço do GKE de destino que recebe eventos está em execução.
  • DESTINATION_GKE_LOCATION: (opcional) a região do Compute Engine do cluster do GKE no qual o serviço do GKE de destino está a ser executado. Se não for especificado, assume-se que o cluster é um cluster regional e está na mesma região que o acionador.
  • DESTINATION_GKE_NAMESPACE: (opcional) o espaço de nomes no qual o serviço do GKE de destino está a ser executado. Se não for especificado, é usado o espaço de nomes default.
  • DESTINATION_GKE_SERVICE: o nome do serviço GKE que recebe os eventos para o acionador. O serviço pode estar em qualquer uma das localizações suportadas do GKE e não tem de estar na mesma localização que o acionador. No entanto, o serviço tem de estar no mesmo projeto que o acionador e recebe eventos como pedidos HTTP POST enviados para o respetivo caminho do URL raiz (/) sempre que o evento é gerado.
  • DESTINATION_GKE_PATH: (opcional) o caminho relativo que especifica no serviço GKE de destino para o qual os eventos do acionador devem ser enviados. Por exemplo: /, /route, route, route/subroute.
  • EVENT_FILTER_TYPE: o identificador do evento do Firebase Realtime Database e pode ser um dos seguintes:

    • google.firebase.database.ref.v1.created: o evento é enviado quando os dados são criados na base de dados
    • google.firebase.database.ref.v1.updated: o evento é enviado quando os dados são atualizados na base de dados
    • google.firebase.database.ref.v1.deleted: o evento é enviado quando os dados são eliminados na base de dados
    • google.firebase.database.ref.v1.written: o evento é enviado quando os dados são criados, atualizados ou eliminados na base de dados
  • INSTANCE: uma única instância da base de dados e o operador pode ser um dos seguintes:

    • Igual; por exemplo, --event-filters="instance=INSTANCE"
    • Padrão de caminho; por exemplo, --event-filters-path-pattern="instance=INSTANCE". Para mais informações, consulte o artigo Compreenda os padrões de caminhos.
  • REF: o caminho na instância da base de dados para a qual quer receber eventos quando os dados são criados, atualizados ou eliminados nesse caminho ou em qualquer um dos respetivos filhos.

  • SERVICE_ACCOUNT_NAME: o nome da sua conta de serviço gerida pelo utilizador.
  • PROJECT_ID: o ID do seu Google Cloud projeto.

Notas:

  • Para eventos diretos de Firebase Realtime Database, a codificação do payload do evento é application/json.
  • Estas flags são obrigatórias:
    • --event-filters="type=EVENT_FILTER_TYPE"
    • --event-filters="instance=INSTANCE" ou --event-filters-path-pattern="instance=INSTANCE"
    • --event-filters-path-pattern="ref=REF"
    • Depois de criar um acionador, não é possível alterar o tipo de filtro de eventos. Para um tipo de evento diferente, tem de criar um novo acionador e eliminar o antigo.
    • A flag --service-account é usada para especificar o email da conta de serviço de gestão de identidade e de acesso (IAM) associado ao acionador.

Exemplo:

gcloud eventarc triggers create helloworld-trigger \
    --location=us-central1 \
    --destination-gke-cluster=gke-events-cluster \
    --destination-gke-location=us-central1-a \
    --destination-gke-namespace=default \
    --destination-gke-service=helloworld-events \
    --destination-gke-path=/ \
    --event-filters="type=google.firebase.database.ref.v1.created" \
    --event-filters="instance=test-instance" \
    --event-filters-path-pattern="ref=users/*" \
    --service-account=${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com

Este comando cria um acionador denominado helloworld-trigger para o evento identificado como google.firebase.database.ref.v1.created e para o caminho users/* na instância da base de dados identificada como test-instance.

Terraform

Pode criar um acionador para um destino do GKE através do Terraform. Para ver detalhes, consulte o artigo Crie um acionador com o Terraform.

Crie uma lista de um acionador

Pode confirmar a criação de um acionador listando os acionadores do Eventarc através da CLI do Google Cloud ou da Google Cloud consola.

Consola

  1. Na Google Cloud consola, aceda à página Triggers do Eventarc.

    Aceda a Acionadores

    Esta página lista os seus acionadores em todas as localizações e inclui detalhes como nomes, regiões, fornecedores de eventos, destinos e muito mais.

  2. Para filtrar os acionadores:

    1. Clique em Filtro ou no campo Acionadores de filtro.
    2. Na lista Propriedades, selecione uma opção para filtrar os acionadores.

    Pode selecionar uma única propriedade ou usar o operador lógico OR para adicionar mais propriedades.

  3. Para ordenar os acionadores, junto ao título de qualquer coluna suportada, clique em Ordenar.

gcloud

Execute o seguinte comando para listar os seus acionadores:

gcloud eventarc triggers list --location=-

Este comando lista os seus acionadores em todas as localizações e inclui detalhes como nomes, tipos, destinos e estados.

O que se segue?