Migrar gatilhos do Pub/Sub de eventos do Cloud Run for Anthos para o Eventarc

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

É 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:

  1. Permitir que o Eventarc gerencie recursos no cluster do GKE, ative os destinos do GKE.
  2. 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.
  3. Identificar os gatilhos atuais do Events do Cloud Run for Anthos.
  4. Criar um gatilho do Eventarc que aponte para o mesmo serviço do Cloud Run for Anthos que o gatilho atual.
  5. Confirmar se o gatilho do Eventarc está entregando eventos conforme esperado.
  6. 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:

  1. Instale e inicialize a Google Cloud CLI.

  2. Faça login usando sua conta:

    gcloud auth login
  3. 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:

    • PROJECT_ID pelo ID do projeto;
    • CLUSTER_NAME pelo nome do cluster.
    • CLUSTER_LOCATION por qualquer zona com suporte para o GKE. Por exemplo: us-central1-a
    • LOCATION por um local para o gatilho do Eventarc. Por exemplo: us-central1
  4. 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
    
  5. Instale a ferramenta de linha de comando kubectl:

    gcloud components install kubectl
  6. 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.

  1. Ative os destinos do GKE para o Eventarc:

    gcloud eventarc gke-destinations init
    
  2. 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.

  1. 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
    
  2. 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.

  1. 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.

  2. Conceda os papéis pubsub.subscriber e monitoring.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"
  3. 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.

  4. 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:

  1. Publique uma mensagem no tópico do Pub/Sub:

    gcloud pubsub topics publish TOPIC_ID \
      --message "Hello, World!"
    
  2. 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 e Extensions. Os dados reais da mensagem, exceto os dados subscription, 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.

  1. 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.

A seguir