Migrar activadores de Pub/Sub de eventos para Cloud Run for Anthos a Eventarc

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Puedes migrar los activadores de eventos para que un servicio de Cloud Run for Anthos pueda recibir eventos de Pub/Sub mediante Eventarc. En esta guía, se supone que migras activadores existentes de Eventos para Cloud Run for Anthos y que tu servicio de Cloud Run for Anthos se ejecuta en un clúster de Google Kubernetes Engine (GKE). Se debe ejecutar una migración para cada clúster.

Esta ruta de migración evita la pérdida de eventos y minimiza su duplicación.

La migración implica lo siguiente:

  1. Para permitir que Eventarc administre recursos en el clúster de GKE, habilita los destinos de GKE.
  2. Si es necesario, habilita Workload Identity para el clúster de GKE que ejecuta el servicio de Cloud Run for Anthos de destino.
  3. Identifica activadores existentes de Eventos para Cloud Run for Anthos.
  4. Crea un activador de Eventarc que apunte al mismo servicio de Cloud Run for Anthos que el activador existente.
  5. Confirma que el activador de Eventarc entregue eventos como se espera.
  6. Borra el activador del evento original y realiza una limpieza después de la migración.

Antes de comenzar

En esta guía, suponemos que ya tienes lo siguiente:

Configura el entorno de la línea de comandos

Para configurar las herramientas de línea de comandos de gcloud y kubectl, sigue estos pasos:

  1. Instala y, luego, inicializa Google Cloud CLI.

  2. Accede con tu cuenta:

    gcloud auth login
  3. Configura los ajustes predeterminados para la CLI de 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
    

    Reemplaza lo siguiente:

    • PROJECT_ID por el ID del proyecto.
    • CLUSTER_NAME por el nombre del clúster
    • CLUSTER_LOCATION por cualquier zona en la que GKE es compatible; por ejemplo, us-central1-a
    • LOCATION por una ubicación para el activador de Eventarc; por ejemplo, us-central1
  4. Habilita las siguientes API para el proyecto:

    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. Instala la herramienta de línea de comandos kubectl:

    gcloud components install kubectl
  6. Actualiza los componentes instalados de la CLI de gcloud:

    gcloud components update

Habilita los destinos de GKE

Para permitir que Eventarc administre recursos en el clúster de GKE, habilita los destinos de GKE y vincula la cuenta de servicio de Eventarc con los roles necesarios.

  1. Habilita los destinos de GKE para Eventarc:

    gcloud eventarc gke-destinations init
    
  2. Cuando se te solicite vincular los roles necesarios, ingresa y.

    Los siguientes roles están vinculados:

    • roles/compute.viewer
    • roles/container.developer
    • roles/iam.serviceAccountAdmin

Habilita Workload Identity en un clúster

Si Workload Identity ya está habilitada en tu clúster, puedes omitir este paso.

Workload Identity es la manera recomendada de acceder a los servicios de Google Cloud desde aplicaciones que se ejecutan en Google Kubernetes Engine (GKE) debido a sus propiedades de seguridad y capacidad de administración mejoradas. También es necesaria para reenviar eventos de Cloud Run for Anthos mediante Eventarc.

Para habilitar Workload Identity en un clúster existente, consulta Usa Workload Identity.

Identifica activadores existentes de Eventos para Cloud Run for Anthos

Antes de migrar cualquier evento existente para los activadores de Cloud Run for Anthos, debes recuperar los detalles del activador.

  1. Enumera los eventos existentes de los activadores de Cloud Run for Anthos para el clúster:

    gcloud beta events triggers list --namespace EVENTS_NAMESPACE
    

    Reemplaza EVENTS_NAMESPACE por el espacio de nombres de tu agente de eventos.

    El resultado es similar a este:

       TRIGGER             EVENT TYPE                                     TARGET
    ✔  trigger-id          google.cloud.pubsub.topic.v1.messagePublished  cloud-run-service-name
    
  2. Necesitarás el ID del tema para crear el activador de Eventarc. Recupera el ID del tema para el activador de eventos existentes de 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)"
    

    Reemplaza TRIGGER_ID por el ID del activador de eventos existente de Cloud Run for Anthos o un identificador completamente calificado.

    El resultado es similar a este:

    topic:     topic-id
    type:      google.cloud.pubsub.topic.v1.messagePublished
    name:      cloud-run-service-name
    namespace: events
    

Crea un activador de Eventarc para reemplazar el activador existente

Antes de crear el activador de Eventarc, configura una cuenta de servicio administrada por el usuario y asígnale roles específicos a fin de que Eventarc pueda administrar eventos para los destinos de Cloud Run for Anthos.

  1. Crea una cuenta de servicio de Google Cloud usando (GSA).

    TRIGGER_GSA=SERVICE_ACCOUNT_NAME
    gcloud iam service-accounts create $TRIGGER_GSA

    Reemplaza SERVICE_ACCOUNT_NAME por un nombre que tenga entre 6 y 30 caracteres. Puede contener guiones y caracteres alfanuméricos en minúscula.

  2. Otorga las funciones pubsub.subscriber y monitoring.metricWriter a la cuenta de servicio:

    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. Crea un activador de Eventarc nuevo basado en la configuración del activador de eventos existente de Cloud Run for Anthos. Todos los argumentos, incluido el servicio de destino, el clúster y el ID del tema, deben coincidir con los del activador de eventos existente de 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
    

    Reemplaza EVENTARC_TRIGGER_NAME por un nombre para el activador de Eventarc nuevo y TOPIC_ID por el ID del tema de Pub/Sub que recuperaste antes.

    Esto crea un activador de Eventarc para el ID del tema de Pub/Sub.

  4. Confirma que el activador se haya creado correctamente:

    gcloud eventarc triggers list
    

    El resultado es similar a este:

    NAME                  TYPE                                           DESTINATION_RUN_SERVICE  DESTINATION_RUN_PATH  ACTIVE
    eventarc-trigger-name google.cloud.pubsub.topic.v1.messagePublished                                                 Yes
    

Prueba la migración y verifica la salida

A fin de probar tu migración, activa un evento de prueba mediante la publicación en un tema de Pub/Sub y, luego, verifica que haya al menos un evento entregado para cada uno de los activadores de eventos existentes de Cloud Run for Anthos y Eventarc, respectivamente.

Por ejemplo, si suponemos que completaste el instructivo Recibe eventos de Pub/Sub y ahora migras ese activador de Eventos para Cloud Run for Anthos, el resultado después de activar un evento de prueba se duplicaría y sería similar al siguiente:

  Hello, World! ID: 2896291125947199
  Hello, World! ID: 2896291125947199

También puedes usar la siguiente situación para obtener orientación sobre cómo el receptor del evento puede mostrar los datos del evento:

  1. Publica un mensaje en el tema de Pub/Sub:

    gcloud pubsub topics publish TOPIC_ID \
      --message "Hello, World!"
    
  2. Verifica el evento y su entrega correcta. Por ejemplo, consulta los registros del servicio receptor de Cloud Run for Anthos:

    kubectl logs \
      --selector serving.knative.dev/service=DESTINATION_SERVICE \
      -c user-container \
      -n EVENTS_NAMESPACE \
      --tail=100
    

    El resultado de los dos activadores es similar al siguiente, con diferencias solo en Context Attributes y Extensions. Los datos del mensaje real, con la excepción de los datos de subscription, deben ser idénticos para que no se requieran cambios en el receptor de eventos después de la migración a Eventarc.

    Evento de 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"
        }
      }
    

    Eventos de Eventos para 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"
        }
      }
    

Realiza una limpieza después de la migración

Después de probar y verificar la migración del activador a Eventarc, puedes borrar el activador original de Eventos para Cloud Run for Anthos.

  1. Borra el activador de Eventos para Cloud Run for Anthos:

    gcloud beta events triggers delete TRIGGER_NAME \
      --platform gke \
      --namespace EVENTS_NAMESPACE \
      --quiet
    

Migraste un activador existente de Eventos para Cloud Run for Anthos a Eventarc.

¿Qué sigue?