Activa Cloud Run con eventos de Eventarc

1. Introducción

894762ebb681671c.png

Cloud Run te permite ejecutar contenedores sin estado en un entorno completamente administrado. Está compilado a partir de Knative de código abierto, lo que te permite ejecutar tus contenedores completamente administrados con Cloud Run o en el clúster de Google Kubernetes Engine con Cloud Run for Anthos.

cb762f29e9183a3f.png

Eventarc facilita la conexión de varios servicios (Cloud Run, Cloud Functions, Workfklows) con eventos de una variedad de fuentes. Te permite crear arquitecturas controladas por eventos en las que los microservicios están vinculados y distribuidos de manera flexible. También se encarga de la transferencia de eventos, la entrega, la seguridad, la autorización y el manejo de errores por ti, lo que mejora la agilidad del desarrollador y la resiliencia de las aplicaciones.

En este codelab, aprenderás sobre Eventarc. De manera más específica, escucharás eventos de Pub/Sub, Cloud Storage y registros de auditoría de Cloud con Eventarc y los pasarás a un servicio de Cloud Run.

Qué aprenderás

  • Visión de Eventarc
  • Descubre eventos en Eventarc
  • Crea un receptor de Cloud Run
  • Crea un activador para Pub/Sub
  • Crea un activador para Cloud Storage
  • Crea un activador para los Registros de auditoría de Cloud
  • Explora la IU de Eventarc

2. Visión de Eventarc

El objetivo de Eventarc es entregar eventos de varias fuentes de eventos de Google, Google Cloud y de terceros a destinos de eventos de Google Cloud.

59b147dc030b2b0b.png

Fuentes de Google Cloud

Fuentes de eventos que son productos propiedad de Google Cloud

Fuentes de Google

Fuentes de eventos que son productos de Google, como Gmail, Hangouts, Administración de Android y muchos más

Fuentes personalizadas

Fuentes de eventos que no son productos de Google y que crean los usuarios finales

Fuentes de terceros

Fuentes de eventos que no son propiedad de Google ni producidas por los clientes. Esto incluye fuentes de eventos populares, como Check Point CloudGuard, Datadog, ForgeRock, Lacework, etc., que son propiedad y están mantenidos por proveedores y socios externos.

Los eventos se normalizan en el formato CloudEvents v1.0 para la interoperabilidad entre servicios. CloudEvents es una especificación abierta neutral para proveedores que describe los datos de eventos en formatos comunes, lo que permite la interoperabilidad entre servicios, plataformas y sistemas.

3. Configuración y requisitos

Configuración del entorno de autoaprendizaje

  1. Accede a Google Cloud Console y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una string de caracteres que no se utiliza en las API de Google y se puede actualizar en cualquier momento.
  • El ID del proyecto debe ser único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). Cloud Console genera automáticamente una string única, que, por lo general, no importa cuál sea. En la mayoría de los codelabs, debes hacer referencia al ID del proyecto (suele ser PROJECT_ID). Por lo tanto, si no te gusta, genera otro aleatorio o prueba con uno propio y comprueba si está disponible. Después de crear el proyecto, este ID se “congela” y no se puede cambiar.
  • Además, hay un tercer valor, el Número de proyecto, que usan algunas API. Obtén más información sobre estos tres valores en la documentación.
  1. A continuación, deberás habilitar la facturación en Cloud Console para usar las API o los recursos de Cloud. Ejecutar este codelab no debería costar mucho, tal vez nada. Si quieres cerrar los recursos para no se te facture más allá de este instructivo, sigue las instrucciones de “limpieza” que se encuentran al final del codelab. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de USD 300.

Inicia Cloud Shell

Si bien Google Cloud y Spanner se pueden operar de manera remota desde tu laptop, en este codelab usarás Google Cloud Shell, un entorno de línea de comandos que se ejecuta en la nube.

En GCP Console, haga clic en el ícono de Cloud Shell en la barra de herramientas superior derecha:

55efc1aaa7a4d3ad.png

El aprovisionamiento y la conexión al entorno deberían tomar solo unos minutos. Cuando termine el proceso, debería ver algo como lo siguiente:

7ffe5cbb04455448.png

Esta máquina virtual está cargada con todas las herramientas de desarrollo que necesitarás. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que permite mejorar considerablemente el rendimiento de la red y la autenticación. Puedes realizar todo tu trabajo en este lab usando simplemente un navegador.

Antes de comenzar

En Cloud Shell, asegúrate de que tu ID del proyecto esté configurado:

PROJECT_ID=your-project-id
gcloud config set project $PROJECT_ID

4. Implementa un servicio de Cloud Run

Implementar un servicio de Cloud Run para recibir eventos Implementarás el contenedor Hello de Cloud Run, que registra el contenido de CloudEvents.

Primero, habilita los servicios necesarios para Cloud Run:

gcloud services enable run.googleapis.com

Implementa el contenedor hello en Cloud Run:

REGION=us-central1
SERVICE_NAME=hello

gcloud run deploy $SERVICE_NAME \
  --allow-unauthenticated \
  --image=gcr.io/cloudrun/hello \
  --region=$REGION

Si la operación se completa de forma correcta, la línea de comandos mostrará la URL de servicio. Puedes abrir la URL del servicio en cualquier ventana del navegador para comprobar que el servicio esté implementado.

5. Descubrimiento de eventos

Antes de crear activadores en Eventarc, puedes descubrir cuáles son las fuentes de eventos, los tipos de eventos que pueden emitir y cómo configurar los activadores para consumirlos.

Para ver la lista de diferentes tipos de eventos, sigue estos pasos:

gcloud beta eventarc attributes types list

NAME                                           DESCRIPTION
google.cloud.audit.log.v1.written              Cloud Audit Log written
google.cloud.pubsub.topic.v1.messagePublished  Cloud Pub/Sub message published
google.cloud.storage.object.v1.archived         Cloud Storage: Sent when a live version of an (object versioned) object is archived or deleted.
google.cloud.storage.object.v1.deleted          Cloud Storage: Sent when an object has been permanently deleted.
google.cloud.storage.object.v1.finalized        Cloud Storage: Sent when a new object (or a new generation of an existing object).
google.cloud.storage.object.v1.metadataUpdated  Cloud Storage: Sent when the metadata of an existing object changes.

Para obtener más información sobre cada tipo de evento, sigue estos pasos:

gcloud beta eventarc attributes types describe google.cloud.audit.log.v1.written

attributes: type,serviceName,methodName,resourceName
description: 'Cloud Audit Log: Sent when a log is written.'
name: google.cloud.audit.log.v1.written

Para ver la lista de servicios que emiten un tipo de evento determinado, sigue estos pasos:

gcloud beta eventarc attributes service-names list --type=google.cloud.audit.log.v1.written

SERVICE_NAME                                DISPLAY_NAME
accessapproval.googleapis.com               Access Approval
accesscontextmanager.googleapis.com         Access Context Manager
admin.googleapis.com                        Google Workspace Admin
aiplatform.googleapis.com                   AI Platform (under Vertex AI)
apigee.googleapis.com                       Apigee
apigeeconnect.googleapis.com                Apigee Connect
...
workflows.googleapis.com                    Workflows

Para ver la lista de nombres de métodos (subeventos) que cada servicio puede emitir, sigue estos pasos:

gcloud beta eventarc attributes method-names list --type=google.cloud.audit.log.v1.written --service-name=workflows.googleapis.com

METHOD_NAME
google.cloud.workflows.v1.Workflows.CreateWorkflow
google.cloud.workflows.v1.Workflows.DeleteWorkflow
google.cloud.workflows.v1.Workflows.GetWorkflow
google.cloud.workflows.v1.Workflows.ListWorkflows
google.cloud.workflows.v1.Workflows.UpdateWorkflow
google.cloud.workflows.v1beta.Workflows.CreateWorkflow
google.cloud.workflows.v1beta.Workflows.DeleteWorkflow
google.cloud.workflows.v1beta.Workflows.GetWorkflow
google.cloud.workflows.v1beta.Workflows.ListWorkflows
google.cloud.workflows.v1beta.Workflows.UpdateWorkflow

6. Crea un activador de Pub/Sub

Una forma de recibir eventos es a través de Cloud Pub/Sub. Cualquier aplicación puede publicar mensajes en Pub/Sub, y estos mensajes se pueden entregar a Cloud Run a través de Eventarc.

Configuración

Antes de crear un activador, habilita los servicios necesarios para Eventarc:

gcloud services enable eventarc.googleapis.com

También necesitas una cuenta de servicio para que la usen los activadores. Crear una cuenta de servicio:

SERVICE_ACCOUNT=eventarc-trigger-sa

gcloud iam service-accounts create $SERVICE_ACCOUNT

Crear

Crea un activador para filtrar los eventos publicados en el tema de Pub/Sub en nuestro servicio implementado de Cloud Run:

TRIGGER_NAME=trigger-pubsub

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Prueba

El activador de Pub/Sub crea un tema encubierto. Vamos a averiguarlo y asignarlo a una variable:

TOPIC_ID=$(gcloud eventarc triggers describe $TRIGGER_NAME --location $REGION --format='value(transport.pubsub.topic)')

Usa gcloud para publicar un mensaje en el tema:

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

El servicio de Cloud Run registra el cuerpo del mensaje entrante. Puedes ver esto en la sección Registros de la instancia de Cloud Run:

69e0177e04a0d1af.png

Crear con un tema de Pub/Sub existente

De forma predeterminada, cuando creas un activador de Pub/Sub, Eventarc crea un tema en profundidad para que lo uses como tema de transporte entre tu aplicación y un servicio de Cloud Run. Esto es útil para crear con facilidad y rapidez un activador respaldado por Pub/Sub, pero, a veces, es posible que desees usar un tema existente. Eventarc te permite especificar un tema de Pub/Sub existente en el mismo proyecto con la marca de gcloud --transport-topic.

Para ver cómo funciona, crea un tema de Pub/Sub para usarlo como tema de transporte:

TOPIC_ID=eventarc-topic

gcloud pubsub topics create $TOPIC_ID

Crea un activador:

TRIGGER_NAME=trigger-pubsub-existing

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --location=$REGION \
  --transport-topic=projects/$PROJECT_ID/topics/$TOPIC_ID \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Para probar el activador, envía un mensaje al tema:

gcloud pubsub topics publish $TOPIC_ID --message="Hello again"

7. Crea un activador de Cloud Storage

En este paso, crearás un activador para escuchar eventos de Cloud Storage.

Configuración

Primero, crea un bucket del cual recibir eventos:

BUCKET_NAME=eventarc-gcs-$PROJECT_ID

gsutil mb -l $REGION gs://$BUCKET_NAME

Otorga el rol eventarc.eventReceiver para que la cuenta de servicio pueda usarse en un activador de Cloud Storage:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --role roles/eventarc.eventReceiver \
  --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

También debes agregar el rol pubsub.publisher a la cuenta de servicio de Cloud Storage para los activadores de Cloud Storage:

SERVICE_ACCOUNT_STORAGE=$(gsutil kms serviceaccount -p $PROJECT_ID)

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:$SERVICE_ACCOUNT_STORAGE \
    --role roles/pubsub.publisher

Crear

Crea un activador para enrutar los eventos de creación de archivos nuevos del bucket a tu servicio:

TRIGGER_NAME=trigger-storage

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.storage.object.v1.finalized" \
  --event-filters="bucket=$BUCKET_NAME" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Prueba

Enumera todos los activadores para confirmar que se creó de forma correcta:

gcloud eventarc triggers list

Sube un archivo al bucket de Cloud Storage:

echo "Hello World" > random.txt
gsutil cp random.txt gs://$BUCKET_NAME/random.txt

Si revisas los registros del servicio de Cloud Run en la consola de Cloud, deberías ver el evento recibido:

904cfc93bb8e8df1.png

8. Crea un activador de registros de auditoría de Cloud

Aunque el activador de Cloud Storage es la mejor manera de detectar eventos de Cloud Storage, en este paso, crearás un activador de Registro de auditoría de Cloud para que haga lo mismo.

Configuración

Para recibir eventos de un servicio, debes habilitar los Registros de auditoría de Cloud. En la consola de Cloud, selecciona IAM & Admin y Audit Logs en el menú superior izquierdo. En la lista de servicios, marca Google Cloud Storage:

8c654597faed237c.png

En el lado derecho, asegúrate de que Admin, Read y Write estén seleccionados y haz clic en Save:

1deb3ad78f11dd5f.png

Crear

Crea un activador para enrutar los eventos de creación de archivos nuevos del bucket a tu servicio:

TRIGGER_NAME=trigger-auditlog-storage

gcloud eventarc triggers create $TRIGGER_NAME\
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.audit.log.v1.written" \
  --event-filters="serviceName=storage.googleapis.com" \
  --event-filters="methodName=storage.objects.create" \
  --event-filters-path-pattern="resourceName=/projects/_/buckets/$BUCKET_NAME/objects/*" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Prueba

Los activadores de registros de auditoría tardan un poco en inicializarse. Para verificar que el activador se cree, enumera todos los activadores:

gcloud eventarc triggers list

Deberías ver que el campo ACTIVE es Yes:

NAME                          TYPE                                       DESTINATION               ACTIVE
trigger-auditlog-storage  google.cloud.audit.log.v1.written              Cloud Run service: hello  Yes

Sube el mismo archivo al bucket de Cloud Storage como lo hiciste anteriormente:

gsutil cp random.txt gs://$BUCKET_NAME/random.txt

Si revisas los registros del servicio de Cloud Run en la consola de Cloud, deberías ver el evento recibido:

7be7859bcc8976f8.png

9. Explora la IU de Eventarc

En este paso, explorarás la IU de Eventarc en la consola de Google Cloud. En la IU de Eventarc, puedes obtener una descripción general de todos los activadores, editarlos y borrarlos, y crear activadores nuevos desde la consola de Google Cloud.

Ve a la sección de Eventarc de Google Cloud:

81e139f17e0d29bf.png

Verás la lista de activadores que creaste anteriormente:

3240c7c830398718.png

Si haces clic en un activador, puedes ver sus detalles, editarlo o borrarlo:

b4d8bbc6601a8b9e.png

También puedes crear un activador nuevo si seleccionas Create trigger y completas los detalles del activador:

3ee290ec72f130d5.png

10. ¡Felicitaciones!

Felicitaciones por completar el codelab.

Temas abordados

  • Visión de Eventarc
  • Descubre eventos en Eventarc
  • Crea un receptor de Cloud Run
  • Crea un activador para Pub/Sub
  • Crea un activador para Cloud Storage
  • Crea un activador para los Registros de auditoría de Cloud
  • Explora la IU de Eventarc