Entender os locais do Eventarc

Com o Eventarc, é possível rotear eventos entre serviços do Google Cloud e gerenciar a residência de dados e a latência de processamento. Todo fluxo de trabalho de evento envolve três dimensões de local: a origem do evento, o gatilho do Eventarc que gerencia o roteamento e o destino que processa a carga útil.

Embora os destinos de destino possam estar em regiões diferentes da origem, os requisitos para locais do acionador dependem do provedor de eventos.

Saiba mais em Locais do Eventarc.

Local de origem

O local da origem do evento costuma definir o local do acionador. No exemplo a seguir, como o bucket do Cloud Storage está na região europe-west1, o gatilho também precisa estar localizado em europe-west1.

gcloud eventarc triggers create trigger-storage \
    --destination-run-service=hello \
    --destination-run-region=us-central1 \
    --location=europe-west1 \
    --event-filters="type=google.cloud.storage.object.v1.finalized" \
    --event-filters="bucket=my-bucket-in-europe-west1-region" \
    --service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com

Local de destino

Ao implantar o destino do evento (por exemplo, um serviço do Cloud Run), você escolhe uma região compatível como o local. Normalmente, por motivos de latência e localidade dos dados, você quer que eles estejam na mesma região que a fonte de eventos. No entanto, isso não é um requisito e, no exemplo anterior, a origem do evento está em europe-west1, enquanto a sinalização --destination-run-region indica que o destino do evento está em us-central1.

Local do gatilho

Além disso, o tipo de gatilho do Eventarc que você cria afeta o local do gatilho, que é especificado pela flag ‑‑location:

Registros de auditoria do Cloud

Usando os gatilhos de registros de auditoria do Cloud, é possível conectar qualquer fonte que emita registros de auditoria a um destino de evento. Os gatilhos de registros de auditoria do Cloud estão disponíveis em locais de região única e é possível criar um gatilho global do Eventarc. No entanto, os gatilhos não são suportados em locais birregionais e multirregionais.

O local da origem do evento determina o local do gatilho. Normalmente, é um local de região única. Por exemplo, para capturar eventos do Cloud Storage de um bucket na região europe-west1 com um gatilho de registros de auditoria, crie um gatilho no mesmo local:

gcloud eventarc triggers create trigger-auditlog \
    --destination-run-service=hello \
    --destination-run-region=us-central1 \
    --location=europe-west1 \
    --event-filters="type=google.cloud.audit.log.v1.written" \
    --event-filters="serviceName=storage.googleapis.com" \
    --event-filters="methodName=storage.objects.create" \
    --service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com

Como não há filtragem por bucket ao usar um gatilho de Registros de auditoria do Cloud, isso corresponderá a todos os buckets na região europe-west1. Para filtrar por bucket, use um gatilho direto do Cloud Storage.

Ou, para fazer a correspondência com um bucket birregional ou multirregional, como eu, crie um gatilho com um local global, e isso corresponderá a todos os buckets em todas as regiões em que os filtros de evento correspondem:

gcloud eventarc triggers create trigger-storage \
    --destination-run-service=hello \
    --destination-run-region=us-central1 \
    --location=global \
    --event-filters="type=google.cloud.storage.object.v1.finalized" \
    --event-filters="bucket=my-bucket-in-europe-west1-region" \
    --service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com

Cloud Storage

Os gatilhos do Cloud Storage respondem a eventos dentro de um bucket do Cloud Storage: criação de objetos, exclusão, arquivamento e atualizações de metadados. Os gatilhos do Cloud Storage estão disponíveis em locais de região única, birregionais e multirregionais. Não é possível criar um gatilho global do Eventarc.

O local do bucket do Cloud Storage determina o local do gatilho do Eventarc e eles precisam corresponder. No exemplo a seguir, o local do gatilho corresponde ao do bucket do Cloud Storage (o local multirregional eu):

gcloud eventarc triggers create trigger-storage \
    --destination-run-service=hello \
    --destination-run-region=us-central1 \
    --location=eu \
    --event-filters="type=google.cloud.storage.object.v1.finalized" \
    --event-filters="bucket=my-bucket-in-eu-multi-region" \
    --service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com

Se as regiões do bucket e do gatilho não corresponderem, você vai receber um erro semelhante a este:

ERROR: (gcloud.eventarc.triggers.create) INVALID_ARGUMENT: The request was
invalid: Bucket "my-bucket-in-eu-multi-region" location "eu" does not match
trigger location "europe-west1". Try again by creating the trigger in "eu".

Pub/Sub

Um gatilho do Pub/Sub conecta um tópico do Pub/Sub a um destino de evento. Os gatilhos do Pub/Sub estão disponíveis apenas em locais de região única. Não é possível criar um gatilho global do Eventarc.

Embora os tópicos do Pub/Sub sejam globais e não estejam vinculados a uma única região, ao criar um gatilho do Pub/Sub, é preciso especificar uma região para ele usando a sinalização --location:

gcloud eventarc triggers create trigger-pubsub \
    --destination-run-service=hello \
    --destination-run-region=us-central1 \
    --location=us-central1 \
    --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
    --transport-topic=projects/your-projectid/topics/your-topic

O Eventarc configura a fronteira geográfica virtual para que os eventos do Pub/Sub sejam mantidos apenas no local especificado. Também é possível usar endpoints regionais do serviço Pub/Sub para publicar no tópico e manter todos os dados em uma única região.

Implantações multirregionais e duplicação de mensagens

Quando você cria um gatilho do Eventarc para um tópico do Pub/Sub, o Eventarc cria automaticamente uma assinatura do Pub/Sub exclusiva e subjacente para esse gatilho específico. Isso permite que o Eventarc gerencie o ciclo de vida, as permissões e a conformidade de residência de dados da assinatura.

Se você implantar gatilhos idênticos em várias regiões apontando para o mesmo tópico global do Pub/Sub, cada gatilho vai agir como um assinante separado. Como o Pub/Sub entrega mensagens a todas as assinaturas ativas (distribuição de dados), seus serviços em todas as regiões vão receber e processar a mesma mensagem, resultando em duplicação.

Para fazer uma implantação multirregional sem duplicação de mensagens, é possível desvincular a ingestão de eventos do processamento regional. Crie um único gatilho do Eventarc em uma única região e configure-o para apontar para um balanceador de carga de aplicativo externo global. Em seguida, configure o balanceador de carga para rotear o tráfego para seus back-ends regionais, por exemplo, serviços do Cloud Run em várias regiões.

Essa abordagem garante que as mensagens sejam entregues exatamente uma vez ao balanceador de carga, que distribui os eventos entre as regiões. Embora o gatilho permaneça regional para atender ao geofencing, o destino oferece alcance global.

Independente da sua arquitetura, verifique se os manipuladores de eventos são idempotentes para lidar com possíveis duplicidades, já que o Eventarc oferece entrega de eventos pelo menos uma vez.

A seguir

  • Para saber como encaminhar eventos entre projetos do Google Cloud , consulte o tutorial.