Recibe eventos mediante mensajes de Pub/Sub (CLI de gcloud)
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 un tema de Pub/Sub mediante Eventarc.
En esta guía de inicio rápido, podrás hacer lo siguiente:
- Crear un clúster de GKE.
- Configurar una cuenta de servicio para extraer eventos de Pub/Sub mediante un componente de reenvío de eventos que reenvíe eventos al destino
- Inicializar los destinos de GKE en Eventarc
- Implementar un servicio de GKE que reciba eventos.
- Crear un activador de Eventarc que conecte un tema de Pub/Sub al servicio de GKE.
- Generar y visualizar un evento de Pub/Sub
Antes de comenzar
- Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.
-
En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.
- Instala y, luego, inicializa Google Cloud CLI.
Si se te solicita configurar una región de procesamiento predeterminada, ingresa
n
. - Actualiza los componentes de gcloud:
gcloud components update
- Habilita las API de Google Cloud, Cloud Build, Resource Manager, Google Kubernetes Engine, Eventarc y Container Registry:
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
- Establece las variables de configuración que se usan en esta guía de inicio rápido:
gcloud config set project PROJECT_ID gcloud config set run/cluster events-cluster gcloud config set run/cluster_location us-central1 gcloud config set run/platform gke gcloud config set eventarc/location us-central1
ReemplazaPROJECT_ID
por el ID del proyecto de Google Cloud. - Opcional: Para verificar las opciones de configuración con gcloud_name, escribe lo siguiente:
gcloud config list
El resultado debería ser similar al ejemplo siguiente:[eventarc] location = us-central1 [run] cluster = events-cluster cluster_location = us-central1 platform = gke
Cree un clúster de GKE
Crea un clúster de GKE con el complemento HttpLoadBalancing
.
Habilita Workload Identity para acceder a los servicios de Google Cloud desde aplicaciones que se ejecutan dentro de GKE.
PROJECT_ID=$(gcloud config get-value project) gcloud beta container clusters create events-cluster \ --addons=HttpLoadBalancing \ --machine-type=n1-standard-4 \ --enable-autoscaling --min-nodes=2 --max-nodes=10 \ --no-issue-client-certificate --num-nodes=2 \ --logging=SYSTEM,WORKLOAD \ --monitoring=SYSTEM \ --scopes=cloud-platform,logging-write,monitoring-write,pubsub \ --zone us-central1 \ --release-channel=rapid \ --workload-pool=$PROJECT_ID.svc.id.goog
Espera a que termine de crearse el clúster. Puedes ignorar las advertencias durante el proceso de creación. Una vez que se crea el clúster, el resultado debe ser similar al siguiente:
Creating cluster events-cluster...done.
Created [https://container.googleapis.com/v1beta1/projects/my-project
/zones/us-central1/clusters/events-cluster].
En el ejemplo anterior, my-project
es el ID del proyecto de Google Cloud.
Esto crea un clúster de GKE llamado events-cluster
en my-project
.
Configura una cuenta de servicio de Google
Configura una cuenta de servicio proporcionada por el usuario y otórgale roles específicos para que el componente de reenvío de eventos pueda extraer eventos de Pub/Sub.
Crea una cuenta de servicio llamada
TRIGGER_GSA
que se use para crear activadores:TRIGGER_GSA=eventarc-gke-triggers gcloud iam service-accounts create $TRIGGER_GSA
Otorga las funciones
pubsub.subscriber
ymonitoring.metricWriter
a la cuenta de servicio: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"
Habilita los destinos de GKE
Para cada activador que se orienta a 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 administrar los recursos en el clúster de GKE, otorga permisos a una cuenta de servicio de Eventarc:
Habilita los destinos de GKE para Eventarc:
gcloud eventarc gke-destinations init
Cuando se te solicite vincular los roles necesarios, ingresa
y
.Los siguientes roles están vinculados a la cuenta de servicio:
compute.viewer
container.developer
iam.serviceAccountAdmin
Crea un destino de servicio de GKE
Mediante una imagen compilada con anterioridad, gcr.io/cloudrun/hello
, implementa un servicio de GKE que recibirá y registrará eventos:
Crea una Deployment de Kubernetes:
SERVICE_NAME=hello-gke kubectl create deployment $SERVICE_NAME \ --image=gcr.io/cloudrun/hello
Exponlo como un servicio de Kubernetes:
kubectl expose deployment $SERVICE_NAME \ --type LoadBalancer --port 80 --target-port 8080
Crea un activador de Pub/Sub
Cuando se publica un mensaje en el tema de Pub/Sub, el activador de Eventarc envía mensajes al servicio hello-gke
de GKE.
Crea un activador GKE para detectar los mensajes de Pub/Sub:
Nuevo tema Pub/Sub
gcloud eventarc triggers create gke-trigger-pubsub \ --destination-gke-cluster=events-cluster \ --destination-gke-location=us-central1 \ --destination-gke-namespace=default \ --destination-gke-service=hello-gke \ --destination-gke-path=/ \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com
Esto crea un nuevo tema de Pub/Sub y un activador llamado
gke-trigger-pubsub
para este.Tema de Pub/Sub existente
gcloud eventarc triggers create gke-trigger-pubsub \ --destination-gke-cluster=events-cluster \ --destination-gke-location=us-central1 \ --destination-gke-namespace=default \ --destination-gke-service=hello-gke \ --destination-gke-path=/ \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com \ --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID
Reemplaza lo siguiente:
PROJECT_ID
es tu ID del proyecto de Cloud.TOPIC_ID
es el ID del tema de Pub/Sub existente. Esto crea un activador llamadogke-trigger-pubsub
para el tema de Pub/Sub existente.
Confirma que el activador se haya creado correctamente:
gcloud eventarc triggers list
El resultado debería ser similar al ejemplo siguiente:
NAME: gke-trigger-pubsub TYPE: google.cloud.pubsub.topic.v1.messagePublished DESTINATION: GKE: hello-gke ACTIVE: Yes
Genera y visualiza un evento
Puedes generar un evento para activar el servicio de GKE si publicas un mensaje en el tema de Pub/Sub. Luego, puedes ver el mensaje en los registros del Pod.
Busca y establece el tema Pub/Sub como una variable de entorno:
TOPIC=$(gcloud eventarc triggers describe gke-trigger-pubsub --format='value(transport.pubsub.topic)')
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.
Para ver el mensaje del evento, sigue estos pasos:
- Busca el ID del Pod:
kubectl get pods
El resultado debería ser similar al ejemplo siguiente:NAME READY STATUS RESTARTS AGE hello-gke-645964f578-2mjjt 1/1 Running 0 35s
DondeNAME
es el nombre del Pod. Toma nota deNAME
para usarlo en el siguiente paso. - Verifica los registros del Pod:
kubectl logs NAME
ReemplazaNAME
por el nombre del Pod que copiaste. - Busca una entrada de registro similar a lo 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"[...]}
- Busca el ID del Pod:
Limpia
Si bien Cloud Run no cobra cuando el servicio no se usa, es posible que se te cobre poralmacenar la imagen del contenedor en Container Registry, recursos de Eventarc, mensajes de Pub/Sub y el clúster de GKE.
Puedes borrar tu imagen, borrar el tema de Pub/Sub, borrar la suscripción a Pub/Sub y borrar el clúster de GKE.
Para borrar el activador de Eventarc, ejecuta el siguiente comando:
gcloud eventarc triggers delete gke-trigger-pubsub
Como alternativa, puedes borrar el proyecto de Cloud Console para evitar que se generen cargos. Si borras el proyecto de Cloud, se dejan de facturar todos los recursos que usaste en ese proyecto.
gcloud projects delete PROJECT_ID_OR_NUMBER
Reemplaza PROJECT_ID_OR_NUMBER
por el ID o el número del proyecto.
¿Qué sigue?
Recibir eventos con los Registros de auditoría de Cloud (Google Cloud CLI)