Nesta página, mostramos como criar um gatilho do Eventarc para que um serviço do Cloud Run possa receber eventos de outro serviço Google Cloud .
O Eventarc é um serviço do Google Cloud que permite criar arquiteturas orientadas a eventos sem ter que implementar, personalizar ou manter a infraestrutura subjacente.
Para criar um acionador do Eventarc, especifique filtros para o acionador e configure o roteamento do evento, incluindo a origem do evento e o serviço de destino do Cloud Run. Quando o evento ou o conjunto de eventos especificados correspondem aos filtros, o serviço do Cloud Run é invocado automaticamente em resposta aos eventos. Um serviço que usa gatilhos do Eventarc é chamado de serviço orientado a eventos. Os eventos enviados para o serviço do Cloud Run são recebidos na forma de solicitações HTTP.
Os seguintes tipos de evento acionam solicitações para seu serviço:
- É criado um registro de auditoria que corresponde aos critérios de filtro do gatilho
- Eventos diretos, como uma atualização de um bucket do Cloud Storage
- Mensagens diretas publicadas em um tópico do Pub/Sub
Também é possível criar um gatilho do Eventarc usando a Google Cloud CLI ou na página do console do Eventarc. Para instruções sobre como criar um gatilho para um provedor, tipo de evento e destino específicos, filtre a lista para saber mais sobre os provedores e destinos de eventos do Eventarc.
Local do gatilho
Ao criar um acionador do Eventarc, você especifica um local para ele. Ele 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 do Cloud Run orientado a eventos na mesma região. Para mais informações, consulte Entender os locais do Eventarc.
Identidade do acionador
A conta de serviço do gatilho do Eventarc precisa ter permissão para invocar o serviço. Talvez seja necessário verificar se a conta de serviço padrão do Compute Engine tem as permissões corretas para invocar seu serviço. Para mais informações, consulte Papéis necessários.
Antes de começar
Verifique se você configurou um novo projeto para o Cloud Run conforme descrito na página de configuração.
Ative as APIs Artifact Registry, Cloud Build, Cloud Run Admin e Eventarc:
Funções exigidas
Você ou seu administrador precisa conceder à conta do implantador, à identidade do gatilho e, opcionalmente, ao agente de serviço do Pub/Sub os seguintes papéis do IAM.
Papéis necessários para a conta do implantador
Para receber as permissões necessárias para configurar gatilhos do Eventarc, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:
-
Editor do Cloud Build (
roles/cloudbuild.builds.editor
) -
Administrador do Cloud Run (
roles/run.admin
) -
Administrador do Eventarc (
roles/eventarc.admin
) -
Acessador de exibição de registros (
roles/logging.viewAccessor
) -
Administrador de projetos do IAM (
roles/resourcemanager.projectIamAdmin
) -
Administrador da conta de serviço (
roles/iam.serviceAccountAdmin
) -
Usuário da conta de serviço (
roles/iam.serviceAccountUser
) -
Administrador do Service Usage (
roles/serviceusage.serviceUsageAdmin
)
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 por meio de papéis personalizados ou de 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.
Papéis necessários para a identidade do gatilho
Anote as propriedades da conta de serviço padrão do Compute Engine, porque você vai anexá-la a um gatilho do Eventarc para representar a identidade do acionador para fins de teste. Essa conta de serviço é criada automaticamente depois de ativar ou usar um serviço do Google Cloud que usa o Compute Engine e com o seguinte formato de e-mail:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Substitua
PROJECT_NUMBER
pelo número do seu projeto Google Cloud. Encontre o número do projeto na página Boas-vindas do console do Google Cloud ou executando o seguinte comando:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Para ambientes de produção, é altamente recomendável criar uma nova conta de serviço, conceder a ela um ou mais papéis do IAM que contenham as permissões mínimas necessárias, bem como seguir o princípio de privilégio mínimo.
- Por padrão, os serviços do Cloud Run só podem ser chamados por proprietários do projeto, editores do projeto e administradores e invocadores do Cloud Run.
É possível controlar o acesso por serviço. No entanto, para fins de teste, conceda o
papel de chamador
do Cloud Run (
run.invoker
) no projeto Google Cloud à conta de serviço do Compute Engine. Isso concede o papel em todos os serviços e jobs do Cloud Run em um projeto.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/run.invoker
Se você criar um gatilho para um serviço autenticado do Cloud Run sem conceder o papel de chamador do Cloud Run, o gatilho será criado com sucesso e estará ativo. No entanto, o acionador não funcionará conforme o esperado e uma mensagem semelhante à seguinte aparecerá nos registros:
The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.
- Conceda o
papel de receptor de eventos
do Eventarc (
roles/eventarc.eventReceiver
) no projeto à conta de serviço padrão do Compute Engine para que o gatilho do Eventarc possa receber eventos de provedores de eventos.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/eventarc.eventReceiver
Papel opcional para o agente de serviço do Pub/Sub
- Se você ativou o agente de serviço do Cloud Pub/Sub até 8 de abril
de 2021, para oferecer compatibilidade com solicitações push autenticadas do Pub/Sub, conceda
o papel de Criador de token da conta de serviço (
roles/iam.serviceAccountTokenCreator
) ao agente de serviço. Caso contrário, esse papel é concedido por padrão:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Criar um gatilho para serviços
É possível especificar um acionador depois de implantar um serviço.
Clique na guia para ver instruções usando a ferramenta de sua preferência.
Console
Implante seu serviço do Cloud Run usando contêineres ou da origem.
No Google Cloud console, acesse o Cloud Run:
Na lista de serviços, clique em um serviço atual.
Na página "Detalhes do serviço", acesse a guia Gatilhos.
Clique em Adicionar acionador e selecione uma opção.
No painel Gatilho do Eventarc, modifique os detalhes do gatilho da seguinte maneira:
No campo Nome do gatilho, digite um nome ou use o nome padrão.
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.
Selecione um provedor de eventos 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.
Selecione um tipo de evento 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.
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.
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.
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
eroute/subroute
.Depois de preencher os campos obrigatórios, clique em Salvar gatilho.
Depois de criar o gatilho, verifique a integridade garantindo que haja uma marca de seleção check_circle na guia Gatilhos.
gcloud
Implante seu serviço do Cloud Run usando contêineres ou da origem.
Execute o comando a seguir para criar um gatilho que filtra eventos:
gcloud eventarc triggers create TRIGGER_NAME \ --location=REGION \ --destination-run-service=SERVICE \ --destination-run-region=REGION \ --event-filters="EVENT_FILTER" \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Substitua:
TRIGGER_NAME pelo nome do gatilho.
EVENTARC_TRIGGER_LOCATION com o local do 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. Para mais informações, consulte Locais do Eventarc.
SERVICE pelo nome do serviço que você está implantando.
REGION pela região do Cloud Run do serviço.
PROJECT_NUMBER pelo número do projeto Google Cloud . 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 gatilho do Eventarc precisa ter permissão para invocar o serviço. Por padrão, o Cloud Run usa a conta de serviço de computação padrão.
A flag
event-filters
especifica os filtros de evento que o gatilho monitora. Um evento que corresponde a todos os filtros deevent-filters
aciona chamadas para seu serviço. Cada gatilho precisa ter um tipo de evento compatível. Não é possível mudar o tipo de filtro de evento depois da criação. Para mudar o tipo de filtro de evento, crie um novo gatilho e exclua o antigo. Opcional: é possível repetir a flag--event-filters
com um filtro compatível no formatoATTRIBUTE=VALUE
para adicionar mais filtros.
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
Clique na guia para ver instruções usando a ferramenta de sua preferência.
Console
Ao usar o console do Google Cloud para criar uma função, você também pode adicionar um gatilho a ela. Siga estas etapas para criar um gatilho 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 uma opção.
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 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.
Selecione um provedor de eventos 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 um tipo de evento 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.
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 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
,route
eroute/subroute
.
Depois de preencher os campos obrigatórios, clique em Salvar gatilho.
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 código de amostra para implantar sua função:
gcloud run deploy FUNCTION \ --source . \ --function FUNCTION_ENTRYPOINT \ --base-image BASE_IMAGE_ID \ --region REGION
Substitua:
FUNCTION pelo 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 é 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 com o ambiente de imagem base da 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 com a Google Cloud região em que você quer implantar a função. Por exemplo,
us-central1
.
Execute o comando a seguir para criar um gatilho que filtra eventos:
gcloud eventarc triggers create TRIGGER_NAME \ --location=REGION \ --destination-run-service=FUNCTION \ --destination-run-region=REGION \ --event-filters="EVENT_FILTER" \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Substitua:
TRIGGER_NAME pelo nome do gatilho.
EVENTARC_TRIGGER_LOCATION com o local do 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 a função na mesma região. Para mais informações, consulte Locais do Eventarc.
FUNCTION pelo nome da função que você está implantando.
REGION pela região do Cloud Run da função.
PROJECT_NUMBER pelo número do projeto Google Cloud . 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 gatilho do Eventarc precisa ter permissão para invocar a função. Por padrão, o Cloud Run usa a conta de serviço de computação padrão.
A flag
event-filters
especifica os filtros de evento que o gatilho monitora. Um evento que corresponde a todos os filtros deevent-filters
aciona chamadas para sua função. Cada gatilho precisa ter um tipo de evento compatível. Não é possível mudar o tipo de filtro de evento depois da criação. Para mudar o tipo de filtro de evento, crie um novo gatilho e exclua o antigo. Opcional: é possível repetir a flag--event-filters
com um filtro compatível no formatoATTRIBUTE=VALUE
para adicionar mais filtros.
Terraform
Para criar um gatilho do Eventarc para uma função do Cloud Run, consulte Criar um gatilho usando o Terraform.
Definir o prazo de confirmação do Pub/Sub
As funções do Cloud Run orientadas por eventos são implementadas usando o Eventarc
em combinação com uma assinatura do Pub/Sub. Por padrão, o
prazo de confirmação (ack
)
dessa assinatura do Pub/Sub é de 10 segundos. Essa configuração é insuficiente para muitas funções e pode causar execuções duplicadas indesejadas.
Recomendamos que você defina o prazo ack
para seu serviço ou função como o valor máximo de 600 segundos da seguinte maneira:
Console
Depois de implantar a função, siga estas etapas para modificar o prazo
ack
dela:
No Google Cloud console, acesse o Cloud Run:
Localize a função que você quer atualizar na lista de serviços e clique nela para abrir os detalhes.
Abra a guia Gatilhos.
Clique no nome do gatilho para abrir Detalhes do gatilho.
Clique no link Tópico para abrir o painel de edição.
Clique no nome ID da assinatura para acessar o painel de assinatura e clique em Editar na parte de cima da página.
Defina o valor do Prazo de confirmação como 600 e clique em Atualizar para salvar a mudança.
gcloud
Atualize o prazo de ack
por acionador para o valor máximo de 600 segundos.
Os comandos a seguir fazem referência a variáveis (TRIGGER_NAME
e REGION
) cujos valores foram definidos nas etapas anteriores.
## Per Cloud Run function: # Update Ack Deadline to max (600s) SUBSCRIPTION_ID=$(gcloud eventarc triggers describe "$TRIGGER_NAME" --location $REGION --format json | jq -r '.transport.pubsub.subscription') gcloud pubsub subscriptions update "$SUBSCRIPTION_ID" --ack-deadline=600
Faça uma atualização em massa em todos os gatilhos de serviço e função para definir os prazos de ack
como 600 segundos:
### Match all Cloud Run service triggers and update all deadlines to 600s (max timeout) ### This will change ALL Cloud Run Service and Cloud Run function TRIGGER_NAMES=($(gcloud eventarc triggers list | awk '/Cloud Run service/ {print $1}')) if [ ${#TRIGGER_NAMES[@]} -eq 0 ]; then echo "No matching triggers found" fi for trigger in "${TRIGGER_NAMES[@]}"; do echo "Updating ack deadline for trigger: $trigger" SUBSCRIPTION_ID=$(gcloud eventarc triggers describe "$trigger" --location $REGION --format json | jq -r '.transport.pubsub.subscription') if [ -z "$SUBSCRIPTION_ID" ]; then echo "Error: Could not retrieve subscription ID for trigger: $trigger" continue # Skip to the next trigger fi gcloud pubsub subscriptions update "$SUBSCRIPTION_ID" --ack-deadline=600 echo "Ack deadline updated for subscription: $SUBSCRIPTION_ID" done
Ver o ID e a origem do CloudEvent
Para conferir o ID e a origem do CloudEvent que acionaram seu serviço, consulte os seguintes recursos nos registros de serviço do Cloud Run:
LogEntry.labels.run.googleapis.com/cloud_event_id
LogEntry.labels.run.googleapis.com/cloud_event_source
A seguir
- Saiba mais sobre o Eventarc
- Entenda os componentes faturáveis do Eventarc
- Criar acionadores para funções implantadas no Cloud Run
- Tipos de eventos do Google compatíveis com o Eventarc.
- Ativar novas tentativas de eventos no Eventarc