Cada origem, destino e gatilho do Eventarc tem um local próprio. Às vezes, esses locais precisam ser correspondentes. Em outros momentos, eles podem ser diferentes. 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 especificado pela
‑‑location sinalização:
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ê verá um erro semelhante ao seguinte:
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 uma única região e 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 de serviço do Pub/Sub regionais para publicar no tópico para que todos os dados permaneçam em uma única região.
Implantações multirregionais e duplicação de mensagens
Ao criar 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 que apontam para o mesmo tópico global do Pub/Sub, cada gatilho atuará 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 realizar a implantação multirregional sem duplicação de mensagens, é possível separar a ingestão de eventos do processamento regional. Crie um único gatilho do Eventarc em uma única região e configure o gatilho 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 à fronteira geográfica virtual, o destino oferece alcance global.
Independente da arquitetura, verifique se os processadores de eventos são idempotentes para processar possíveis duplicados, já que o Eventarc oferece entrega de eventos pelo menos uma vez.
A seguir
- Para saber como rotear eventos entre Google Cloud projetos, consulte o tutorial.