Recibir eventos mediante mensajes de Pub/Sub (gcloud CLI)

En esta guía de inicio rápido se muestra cómo configurar un servicio de Google Kubernetes Engine (GKE) como destino para recibir eventos de temas de Pub/Sub mediante Eventarc.

En esta guía de inicio rápido, harás lo siguiente:

  1. Completa las tareas preparatorias, como habilitar APIs y configurar una cuenta de servicio.
  2. Crea un clúster de GKE.
  3. Inicializa los destinos de GKE en Eventarc.
  4. Despliega un servicio de GKE que reciba eventos.
  5. Crea un activador de Eventarc que conecte un tema de Pub/Sub con el servicio de GKE.
  6. Genera y consulta un evento de Pub/Sub.

Antes de empezar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.

  3. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  4. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  5. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Verify that billing is enabled for your Google Cloud project.

  7. Install the Google Cloud CLI.

  8. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  9. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  10. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  11. Verify that billing is enabled for your Google Cloud project.

  12. Actualiza los componentes de Google Cloud CLI:
    gcloud components update
  13. Habilita las APIs Eventarc, Resource Manager y Google Kubernetes Engine:
    gcloud services enable eventarc.googleapis.com \
       cloudresourcemanager.googleapis.com \
       container.googleapis.com
  14. Define las variables de configuración que se usan en esta guía de inicio rápido:
    PROJECT_ID=$(gcloud config get-value project)
    CLUSTER_NAME=events-cluster
    SERVICE_NAME=hello-gke
    LOCATION=us-central1
  15. Si has creado el proyecto, se te asignará el rol básico Propietario (roles/owner). De forma predeterminada, este rol de gestión de identidades y accesos (IAM) incluye los permisos necesarios para acceder por completo a la mayoría de los recursos Google Cloud, por lo que puedes saltarte este paso.

    Si no eres el creador del proyecto, debes conceder los permisos necesarios al principal correspondiente. Por ejemplo, una entidad principal puede ser una cuenta de Google (para usuarios finales) o una cuenta de servicio (para aplicaciones y cargas de trabajo de computación). Para obtener más información, consulta la página Roles y permisos de tu destino de evento.

    Permisos obligatorios

    Para obtener los permisos que necesitas para completar esta guía de inicio rápido, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en tu proyecto:

    Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

    También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.

  16. Anota la cuenta de servicio predeterminada de Compute Engine, ya que la asociarás a un activador de Eventarc para representar la identidad del activador con fines de prueba. Esta cuenta de servicio se crea automáticamente después de habilitar o usar un servicio que utiliza Compute Engine y tiene el siguiente formato de correo electrónico: Google Cloud

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Sustituye PROJECT_NUMBER por el número de tu proyecto. Google Cloud Puedes encontrar el número de tu proyecto en la página Bienvenido de la consola Google Cloud o ejecutando el siguiente comando:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'

    En los entornos de producción, te recomendamos que crees una cuenta de servicio y le asignes uno o varios roles de IAM que contengan los permisos mínimos necesarios y que sigas el principio de privilegio mínimo.

  17. Concede el rol Suscriptor de Pub/Sub (roles/pubsub.subscriber) en el proyecto a la cuenta de servicio predeterminada de Compute Engine para que el activador de Eventarc pueda extraer eventos de Pub/Sub.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/pubsub.subscriber
  18. Si habilitaste el agente de servicio de Cloud Pub/Sub el 8 de abril del 2021 o antes para admitir solicitudes push de Pub/Sub autenticadas, asigna el rol Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator) al agente de servicio. De lo contrario, este rol se asigna de forma predeterminada:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
  19. Crear un clúster de GKE

    Un clúster de GKE consta de al menos una máquina de plano de control de clúster y varias máquinas de trabajador llamadas nodos. Los nodos son instancias de máquinas virtuales (VMs) de Compute Engine que ejecutan los procesos de Kubernetes necesarios para que formen parte del clúster. Despliega aplicaciones en clústeres y las aplicaciones se ejecutan en los nodos.

    Crea un clúster de Autopilot llamado events-cluster:

    gcloud container clusters create-auto $CLUSTER_NAME \
        --region $LOCATION

    La creación del clúster puede tardar varios minutos. Una vez creado el clúster, la salida debería ser similar a la siguiente:

    Creating cluster events-cluster...done.
    Created [https://container.googleapis.com/v1/projects/MY_PROJECT/zones/us-central1/clusters/events-cluster].
    [...]
    STATUS: RUNNING
    

    De esta forma, se crea un clúster de GKE llamado events-cluster en un proyecto con el ID Google Cloud MY_PROJECT.

    Habilitar destinos de GKE

    Por cada activador que tenga como destino un servicio de GKE, Eventarc crea un componente de reenvío de eventos que extrae eventos de Pub/Sub y los reenvía al destino. Para crear el componente y gestionar los recursos del clúster de GKE, concede permisos al agente de servicio de Eventarc:

    1. Habilita los destinos de GKE para Eventarc:

      gcloud eventarc gke-destinations init
    2. Cuando se te pida que enlaces los roles necesarios, introduce y.

      Los siguientes roles están vinculados a la cuenta de servicio:

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

    Crear un destino de servicio de GKE

    Despliega un servicio de GKE que recibirá y registrará eventos mediante una imagen prediseñada, us-docker.pkg.dev/cloudrun/container/hello:

    1. Kubernetes usa un archivo YAML llamado kubeconfig para almacenar la información de autenticación del clúster de kubectl. Actualiza el archivo kubeconfig con las credenciales y la información del endpoint para que kubectl apunte al clúster de GKE:

      gcloud container clusters get-credentials $CLUSTER_NAME \
          --region $LOCATION
      
    2. Crea un despliegue de Kubernetes:

      kubectl create deployment $SERVICE_NAME \
          --image=us-docker.pkg.dev/cloudrun/container/hello
      
    3. Expónlo como un servicio de Kubernetes:

      kubectl expose deployment $SERVICE_NAME \
          --type ClusterIP \
          --port 80 \
          --target-port 8080
      

    Crear un activador de Eventarc

    Cuando se publica un mensaje en el tema de Pub/Sub, el activador de Eventarc envía mensajes al servicio de GKE hello-gke.

    1. Crea un activador de GKE para detectar mensajes de Pub/Sub:

      Nuevo tema de Pub/Sub

      gcloud eventarc triggers create gke-trigger-pubsub \
          --location="$LOCATION" \
          --destination-gke-cluster=$CLUSTER_NAME \
          --destination-gke-location=$LOCATION \
          --destination-gke-namespace=default \
          --destination-gke-service=$SERVICE_NAME \
          --destination-gke-path=/ \
          --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
          --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com"
      

      De esta forma, se crea un tema de Pub/Sub y un activador para él llamado gke-trigger-pubsub.

      Tema de Pub/Sub

      gcloud eventarc triggers create gke-trigger-pubsub \
          --location="$LOCATION" \
          --destination-gke-cluster=$CLUSTER_NAME \
          --destination-gke-location=$LOCATION \
          --destination-gke-namespace=default \
          --destination-gke-service=$SERVICE_NAME \
          --destination-gke-path=/ \
          --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
          --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
          --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID
      

      Haz los cambios siguientes:

      • PROJECT_ID: tu Google Cloud ID de proyecto
      • TOPIC_ID: ID del tema de Pub/Sub. De esta forma, se crea un activador llamado gke-trigger-pubsub para el tema de Pub/Sub.
    2. Confirma que el activador se ha creado correctamente. El activador puede tardar hasta dos minutos en funcionar correctamente.

       gcloud eventarc triggers list
      

      La salida debería ser similar a la siguiente:

      NAME: gke-trigger-pubsub
      TYPE: google.cloud.pubsub.topic.v1.messagePublished
      DESTINATION: GKE: hello-gke
      ACTIVE: Yes
      LOCATION: us-central1
      

    Generar y ver un evento

    Puedes generar un evento para activar el servicio de GKE publicando un mensaje en el tema de Pub/Sub. Después, puedes ver el mensaje en los registros del pod.

    1. Busca y define el tema de Pub/Sub como variable de entorno:

      TOPIC=$(gcloud eventarc triggers describe gke-trigger-pubsub \
          --location=us-central1 \
          --format='value(transport.pubsub.topic)')
    2. Envía un mensaje al tema de Pub/Sub para generar un evento:

      gcloud pubsub topics publish $TOPIC --message="Hello World"

      El servicio de GKE registra el mensaje del evento.

    3. Para ver el mensaje del evento, sigue estos pasos:

      1. Para encontrar el ID del pod, sigue estos pasos:

        kubectl get pods

        La salida debería ser similar a la siguiente:

        NAME                                         READY   STATUS             RESTARTS   AGE
        hello-gke-645964f578-2mjjt                   1/1     Running            0          35s

        Copia el NAME del pod para usarlo en el siguiente paso.

      2. Consulta los registros del pod:

        kubectl logs NAME

        Sustituye NAME por el nombre del pod que has copiado.

      3. Busca una entrada de registro similar a la siguiente:

        2022/02/24 22:23:49 Hello from Cloud Run! The container started successfully and is listening for HTTP requests on $PORT
        {"severity":"INFO","eventType":"google.cloud.pubsub.topic.v1.messagePublished","message":"Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: Hello World"[...]}
        

    Limpieza

    Cuando termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que has creado.

    Puedes hacer lo siguiente:

    1. Elimina el activador de Eventarc.

      También se elimina el tema de Pub/Sub asociado.

    2. Elimina el clúster de GKE.

    También puedes eliminar tu Google Cloud proyecto para evitar que se te apliquen cargos. Al eliminar tu Google Cloud proyecto, se detendrá la facturación de todos los recursos utilizados en él.

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

    Si tienes previsto consultar varios tutoriales y guías de inicio rápido, reutilizar los proyectos puede ayudarte a no superar los límites de cuota de proyectos.

    Siguientes pasos

    Recibir eventos con registros de auditoría de Cloud (Google Cloud CLI)