É possível migrar gatilhos de eventos para que um serviço do Cloud Run for Anthos receba eventos do Pub/Sub usando o Eventarc. Neste guia, partimos do princípio que você está migrando gatilhos atuais do Events do Cloud Run for Anthos e que o serviço do Cloud Run for Anthos é executado em um cluster do Google Kubernetes Engine (GKE). Uma migração precisa ser executada para cada cluster.
Esse caminho de migração evita a perda de eventos e minimiza a duplicação deles.
A migração envolve o seguinte:
- Permitir que o Eventarc gerencie recursos no cluster do GKE, ative os destinos do GKE.
- Se necessário, ativar a Identidade da carga de trabalho para o cluster do GKE que executa o serviço de destino do Cloud Run for Anthos.
- Identificar os gatilhos atuais do Events do Cloud Run for Anthos.
- Criar um gatilho do Eventarc que aponte para o mesmo serviço do Cloud Run for Anthos que o gatilho atual.
- Confirmar se o gatilho do Eventarc está entregando eventos conforme esperado.
- Excluir o gatilho de evento original e fazer a limpeza após a migração.
Antes de começar
Veja o que é necessário para seguir este guia:
Configurar o ambiente de linha de comando
Para configurar as ferramentas de linha de comando gcloud
e kubectl
:
Faça login usando sua conta:
gcloud auth login
Defina as configurações padrão para a CLI gcloud:
gcloud config set project PROJECT_ID gcloud config set run/cluster CLUSTER_NAME gcloud config set run/cluster_location CLUSTER_LOCATION gcloud config set run/platform gke gcloud config set eventarc/location LOCATION
Substitua:
Ative as seguintes APIs para o projeto:
gcloud services enable cloudapis.googleapis.com gcloud services enable cloudbuild.googleapis.com gcloud services enable cloudresourcemanager.googleapis.com gcloud services enable container.googleapis.com gcloud services enable containerregistry.googleapis.com gcloud services enable eventarc.googleapis.com
Instale a ferramenta de linha de comando
kubectl
:gcloud components install kubectl
Atualize os componentes da CLI gcloud instalados:
gcloud components update
Ativar destinos do GKE
Para permitir que o Eventarc gerencie recursos no cluster do GKE, ative os destinos do GKE e vincule a conta de serviço do Eventarc aos papéis necessários.
Ative os destinos do GKE para o Eventarc:
gcloud eventarc gke-destinations init
No prompt para vincular os papéis necessários, digite
y
.Os papéis a seguir estão vinculados:
roles/compute.viewer
roles/container.developer
roles/iam.serviceAccountAdmin
Ativar a Identidade da carga de trabalho em um cluster
Se a identidade de carga de trabalho já estiver ativada no cluster, pule esta etapa.
A Identidade da carga de trabalho é a maneira recomendada para acessar os serviços do Google Cloud em aplicativos executados no Google Kubernetes Engine (GKE) devido às sólidas capacidades de segurança e gerenciamento. Também é necessária para encaminhar eventos do Cloud Run for Anthos usando o Eventarc.
Para ativar a Identidade da carga de trabalho em um cluster atual, consulte Como usar a Identidade da carga de trabalho.
Identificar os gatilhos atuais do Events do Cloud Run for Anthos
Antes de migrar qualquer gatilho atual do Events do Cloud Run for Anthos, recupere os detalhes do gatilho.
Liste os gatilhos atuais do Events do Cloud Run for Anthos para o cluster:
gcloud beta events triggers list --namespace EVENTS_NAMESPACE
Substitua EVENTS_NAMESPACE pelo namespace do agente de eventos.
A saída será assim:
TRIGGER EVENT TYPE TARGET ✔ trigger-id google.cloud.pubsub.topic.v1.messagePublished cloud-run-service-name
Você vai precisar do ID do tópico para criar o gatilho do Eventarc. Recupere o ID do tópico do gatilho atual do Events do Cloud Run for Anthos:
gcloud beta events triggers describe TRIGGER_ID \ --platform gke --namespace EVENTS_NAMESPACE \ --format="flattened(serialized_source.spec.topic,serialized_trigger.spec.filter.attributes.type,serialized_trigger.spec.subscriber.ref.name,serialized_trigger.spec.subscriber.ref.namespace)"
Substitua TRIGGER_ID pelo ID do gatilho atual do Events do Cloud Run for Anthos ou por um identificador totalmente qualificado.
A saída será assim:
topic: topic-id type: google.cloud.pubsub.topic.v1.messagePublished name: cloud-run-service-name namespace: events
Criar um gatilho do Eventarc para substituir o gatilho atual
Antes de criar o gatilho do Eventarc, configure uma conta de serviço gerenciada pelo usuário e conceda a ela papéis específicos para que o Eventarc possa gerenciar eventos dos destinos do Cloud Run for Anthos.
Crie uma conta de serviço do Google Cloud (GSA):
TRIGGER_GSA=SERVICE_ACCOUNT_NAME gcloud iam service-accounts create $TRIGGER_GSA
Substitua SERVICE_ACCOUNT_NAME por um nome que tenha de 6 a 30 caracteres. Ele pode conter caracteres alfanuméricos minúsculos e traços.
Conceda os papéis
pubsub.subscriber
emonitoring.metricWriter
à conta de serviço:PROJECT_ID=$(gcloud config get-value project) gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/pubsub.subscriber" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/monitoring.metricWriter"
Crie um novo gatilho do Eventarc com base na configuração do gatilho atual do Events do Cloud Run for Anthos. Todos os argumentos, incluindo serviço de destino, cluster e ID do tópico, precisam corresponder ao gatilho atual do Events do Cloud Run for Anthos.
gcloud eventarc triggers create EVENTARC_TRIGGER_NAME \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --location LOCATION \ --destination-gke-service=DESTINATION_SERVICE \ --destination-gke-cluster=CLUSTER_NAME \ --destination-gke-location=CLUSTER_LOCATION \ --destination-gke-namespace=EVENTS_NAMESPACE \ --destination-gke-path=/ \ --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com \ --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID
Substitua EVENTARC_TRIGGER_NAME por um nome para o novo gatilho do Eventarc e TOPIC_ID pelo ID do tópico do Pub/Sub recuperado anteriormente.
Essa ação cria um gatilho do Eventarc para o ID do tópico do Pub/Sub.
Confirme se o gatilho foi criado:
gcloud eventarc triggers list
A saída será assim:
NAME TYPE DESTINATION_RUN_SERVICE DESTINATION_RUN_PATH ACTIVE eventarc-trigger-name google.cloud.pubsub.topic.v1.messagePublished Yes
Testar a migração e verificar a saída
Para testar a migração, acione um evento de teste publicando em um tópico do Pub/Sub. Em seguida, verifique se há pelo menos um evento entregue a cada um dos gatilhos atuais do Events do Cloud Run for Anthos e do Eventarc, respectivamente.
Por exemplo, supondo que você concluiu o tutorial Como receber eventos do Pub/Sub e está migrando esse gatilho do Events do Cloud Run for Anthos, a saída depois de acionar um evento de teste seria duplicada e ficaria assim:
Hello, World! ID: 2896291125947199 Hello, World! ID: 2896291125947199
Também é possível usar o seguinte cenário para uma orientação em que o receptor de eventos pode exibir os dados do evento:
Publique uma mensagem no tópico do Pub/Sub:
gcloud pubsub topics publish TOPIC_ID \ --message "Hello, World!"
Verifique o evento e a entrega dele. Por exemplo, observe os registros do serviço de destino do Cloud Run for Anthos:
kubectl logs \ --selector serving.knative.dev/service=DESTINATION_SERVICE \ -c user-container \ -n EVENTS_NAMESPACE \ --tail=100
A saída dos dois gatilhos é semelhante à seguinte, com diferenças apenas em
Context Attributes
eExtensions
. Os dados reais da mensagem, exceto os dadossubscription
, precisam ser idênticos para que não seja necessário alterar o receptor de eventos após a migração para o Eventarc.Evento do Eventarc:
☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: google.cloud.pubsub.topic.v1.messagePublished source: //pubsub.googleapis.com/projects/project-id/topics/topic-name id: 2759155988927083 time: 2021-07-22T17:47:19.964Z datacontenttype: application/json Data, { "subscription": "projects/project-id/subscriptions/eventarc-us-central1-eventarc-trigger-name-sub-567", "message": { "data": "V29ybGQ=", "messageId": "2759155988927083", "publishTime": "2021-07-22T17:47:19.964Z" } }
Evento do Events do Cloud Run for Anthos:
☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: google.cloud.pubsub.topic.v1.messagePublished source: //pubsub.googleapis.com/projects/project-id/topics/topic-name id: 2759155988927083 time: 2021-07-22T17:47:19.964Z dataschema: https://raw.githubusercontent.com/googleapis/google-cloudevents/master/proto/google/events/cloud/pubsub/v1/data.proto datacontenttype: application/json Extensions, knativearrivaltime: 2021-07-22T17:47:20.723302362Z knsourcetrigger: link0.09767362059083662 traceparent: 00-f3cc6d754d361a0e49e83e5973fa3565-b4a20ef4ecffe96b-00 Data, { "subscription": "cre-src_events_source-for-trigger-name_5ffa9638-8cab-4010-900a-2edb275d9eaf", "message": { "messageId": "2759155988927083", "data": "V29ybGQ=", "publishTime": "2021-07-22T17:47:19.964Z" } }
Fazer a limpeza após a migração
Depois de testar e verificar a migração do gatilho para o Eventarc, é possível excluir o gatilho original o gatilho do Events do Cloud Run for Anthos.
Exclua o gatilho do Events do Cloud Run for Anthos:
gcloud beta events triggers delete TRIGGER_NAME \ --platform gke \ --namespace EVENTS_NAMESPACE \ --quiet
Você migrou um gatilho atual do Events do Cloud Run for Anthos para o Eventarc.