En este documento, se describe cómo usar los recursos de Google Cloud en Terraform para crear activadores de Eventarc con los recursos de google_eventarc_trigger
para los siguientes destinos:
- Cloud Run: Usa el recurso
google_cloud_run_v2_service
de Terraform. - Google Kubernetes Engine: Usa el recurso
google_container_cluster
de Terraform. - Workflows: Usa el recurso
google_workflows_workflow
de Terraform.
En los ejemplos de este instructivo, se usan eventos directos de Cloud Storage, pero se pueden adaptar para cualquier proveedor de eventos. Para los fines de este instructivo, se crean recursos nuevos para que sean la fuente de los eventos.
Para obtener recursos y orientación sobre el uso de Terraform, consulta la documentación de Terraform en Google Cloud.
Antes de comenzar
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Resource Manager and Identity and Access Management (IAM) APIs.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Cloud Shell es un entorno de shell con Terraform ya integrado.
Crea activadores de Eventarc.
Puedes crear activadores de Eventarc con Terraform para distintos destinos.
En este ejemplo, se usa el tipo de interpolación para sustituciones como variables de referencia, atributos de recursos y funciones de llamada.
Cloud Run
Con Cloud Shell, implementa tus recursos con Terraform para crear activadores de Eventarc.
1. Habilita las APIs
Usa el siguiente código para habilitar las APIs requeridas:
2. Crea una cuenta de servicio y configura IAM
Usa el siguiente código para crear una cuenta de servicio dedicada y roles de IAM:
Si habilitaste el agente de servicio de Cloud Pub/Sub el 8 de abril de 2021 o antes de esa fecha,
otórgale el rol iam.serviceAccountTokenCreator
al agente
de servicio:
resource "google_project_iam_member" "tokencreator" {
project = data.google_project.project.id
role = "roles/iam.serviceAccountTokenCreator"
member = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com"
}
3. Crear un bucket de Cloud Storage como fuente del evento
Usa el siguiente código para crear un bucket de Cloud Storage con permisos relacionados con Eventarc:
4. Define un servicio de Cloud Run como un destino de evento
Crea un servicio de Cloud Run como destino del evento para el activador. Usa el recurso google_cloud_run_v2_service
para definir un servicio de Cloud Run:
5. Define un activador de Eventarc
Un activador de Eventarc conecta el proveedor de eventos a un destino de
evento. Usa el recurso google_eventarc_trigger
para
definir el proveedor de eventos directos de Cloud Storage y enviarlo a un
destino de Cloud Run.
Puedes definir varios matching_criteria
con atributos de CloudEvents
compatibles con Eventarc que actúan como el
event-filters
que especificas cuando creas un activador. Si deseas obtener más información, sigue las instrucciones cuando crees un activador para un proveedor, un tipo de evento y un destino específicos.
Solo
los eventos que coinciden con todos los filtros se envían al destino.
6. Aplica los cambios
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
Para aplicar tu configuración de Terraform en un proyecto de Google Cloud, completa los pasos de las siguientes secciones.
Prepara Cloud Shell
- Inicia Cloud Shell
-
Establece el proyecto de Google Cloud predeterminado en el que deseas aplicar tus configuraciones de Terraform.
Solo necesitas ejecutar este comando una vez por proyecto y puedes ejecutarlo en cualquier directorio.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Las variables de entorno se anulan si configuras valores explícitos en el archivo de configuración de Terraform.
Prepara el directorio
Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).
-
En Cloud Shell, crea un directorio y un archivo nuevo dentro de ese directorio. El nombre del archivo debe tener la extensión
.tf
, por ejemplo,main.tf
. En este instructivo, el archivo se denominamain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si sigues un instructivo, puedes copiar el código de muestra en cada sección o paso.
Copia el código de muestra en el
main.tf
recién creado.De manera opcional, copia el código de GitHub. Esto se recomienda cuando el fragmento de Terraform es parte de una solución de extremo a extremo.
- Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
- Guarda los cambios.
-
Inicializa Terraform. Solo debes hacerlo una vez por directorio.
terraform init
De manera opcional, incluye la opción
-upgrade
para usar la última versión del proveedor de Google:terraform init -upgrade
Aplica los cambios
-
Revisa la configuración y verifica que los recursos que creará o actualizará Terraform coincidan con tus expectativas:
terraform plan
Corrige la configuración según sea necesario.
-
Para aplicar la configuración de Terraform, ejecuta el siguiente comando y, luego, escribe
yes
cuando se te solicite:terraform apply
Espera hasta que Terraform muestre el mensaje “¡Aplicación completa!”.
- Abre tu proyecto de Google Cloud para ver los resultados. En la consola de Google Cloud, navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.
7. Verifica la creación de recursos
Para confirmar que se creó el servicio, haz lo siguiente:
gcloud run services list --region us-central1
Para confirmar que se creó el activador, haz lo siguiente:
gcloud eventarc triggers list --location us-central1
El resultado debería ser similar al siguiente ejemplo:
NAME: trigger-storage-cloudrun-tf
TYPE: google.cloud.storage.object.v1.finalized
DESTINATION: Cloud Run service: hello-events
ACTIVE: Yes
LOCATION: us-central1
GKE
Con Cloud Shell, implementa tus recursos con Terraform para crear activadores de Eventarc.
El activador de Eventarc requiere un servicio de Google Kubernetes Engine. Para simplificar este instructivo, configurarás este servicio fuera de Terraform, entre la aplicación de las configuraciones de Terraform.
1. Crea un clúster de GKE
Usa el siguiente código para habilitar las APIs requeridas:
Usa el siguiente código para crear un clúster de GKE:
2. Aplica los cambios
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
Para aplicar tu configuración de Terraform en un proyecto de Google Cloud, completa los pasos de las siguientes secciones.
Prepara Cloud Shell
- Inicia Cloud Shell
-
Establece el proyecto de Google Cloud predeterminado en el que deseas aplicar tus configuraciones de Terraform.
Solo necesitas ejecutar este comando una vez por proyecto y puedes ejecutarlo en cualquier directorio.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Las variables de entorno se anulan si configuras valores explícitos en el archivo de configuración de Terraform.
Prepara el directorio
Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).
-
En Cloud Shell, crea un directorio y un archivo nuevo dentro de ese directorio. El nombre del archivo debe tener la extensión
.tf
, por ejemplo,main.tf
. En este instructivo, el archivo se denominamain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si sigues un instructivo, puedes copiar el código de muestra en cada sección o paso.
Copia el código de muestra en el
main.tf
recién creado.De manera opcional, copia el código de GitHub. Esto se recomienda cuando el fragmento de Terraform es parte de una solución de extremo a extremo.
- Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
- Guarda los cambios.
-
Inicializa Terraform. Solo debes hacerlo una vez por directorio.
terraform init
De manera opcional, incluye la opción
-upgrade
para usar la última versión del proveedor de Google:terraform init -upgrade
Aplica los cambios
-
Revisa la configuración y verifica que los recursos que creará o actualizará Terraform coincidan con tus expectativas:
terraform plan
Corrige la configuración según sea necesario.
-
Para aplicar la configuración de Terraform, ejecuta el siguiente comando y, luego, escribe
yes
cuando se te solicite:terraform apply
Espera hasta que Terraform muestre el mensaje “¡Aplicación completa!”.
- Abre tu proyecto de Google Cloud para ver los resultados. En la consola de Google Cloud, navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.
3. Configura GKE
Implementa un servicio de Kubernetes en GKE que recibirá solicitudes HTTP y eventos de registro mediante una imagen compilada previamente de Cloud Run, us-docker.pkg.dev/cloudrun/container/hello
:
Obtén credenciales de autenticación para interactuar con el clúster:
gcloud container clusters get-credentials eventarc-cluster \ --region=us-central1
Crea una implementación llamada
hello-gke
:kubectl create deployment hello-gke \ --image=us-docker.pkg.dev/cloudrun/container/hello
Expón la implementación como un servicio de Kubernetes:
kubectl expose deployment hello-gke \ --type ClusterIP --port 80 --target-port 8080
Asegúrate de que el pod se esté ejecutando:
kubectl get pods
El resultado debería ser similar al siguiente ejemplo:
NAME READY STATUS hello-gke-df6469d4b-5vv22 1/1 Running
Si
STATUS
esPending
, el pod se está implementando. Espera un minuto a que se complete la implementación y vuelve a verificar el estado.Asegúrate de que el servicio esté en ejecución:
kubectl get svc
El resultado debería ser similar al siguiente ejemplo:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-gke ClusterIP 34.118.226.144 <none> 80/TCP kubernetes ClusterIP 34.118.224.1 <none> 443/TCP
4. Crea y configura Eventarc
Usa la siguiente configuración a fin de configurar una cuenta de servicio y otorgarle roles específicos a fin de que Eventarc administre eventos para GKE.
Usa el siguiente código para crear un bucket de Cloud Storage con permisos relacionados con Eventarc:
Usa la siguiente configuración para habilitar las APIs necesarias e inicializar los servicios de destino de GKE de Eventarc:
Crear un activador de Eventarc que enrute los eventos de Pub/Sub al servicio de GKE hello-gke
.
Puedes definir varios matching_criteria
con atributos de CloudEvents
compatibles con Eventarc que actúan como el
event-filters
que especificas cuando creas un activador. Si deseas obtener más información, sigue las instrucciones cuando crees un activador para un proveedor, un tipo de evento y un destino específicos.
Solo
los eventos que coinciden con todos los filtros se envían al destino.
5. Aplica los cambios adicionales
Para aplicar la configuración adicional de Terraform en un proyecto de Google Cloud, completa los siguientes pasos:
Crea la cuenta de identidad de Eventarc:
gcloud beta services identity create --service eventarc.googleapis.com
Agrega el nuevo código de Terraform del paso anterior a tu archivo
main.tf
existente.Aplica las configuraciones de Terraform actualizadas:
terraform plan terraform apply
Espera hasta que Terraform muestre el mensaje “¡Aplicación completa!”.
Abre tu proyecto de Google Cloud para ver los resultados. En la consola de Google Cloud, navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.
Workflows
Con Cloud Shell, implementa tus recursos con Terraform para crear un Workflow y un activador de Eventarc.
1. Habilita las APIs
Usa el siguiente código para habilitar las APIs requeridas:
2. Crea una cuenta de servicio y configura IAM
Usa el siguiente código para crear una cuenta de servicio dedicada y agregar roles de IAM:
Si habilitaste el agente de servicio de Cloud Pub/Sub el 8 de abril de 2021 o antes de esa fecha,
otórgale el rol iam.serviceAccountTokenCreator
al agente
de servicio:
resource "google_project_iam_member" "tokencreator" {
project = data.google_project.project.id
role = "roles/iam.serviceAccountTokenCreator"
member = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com"
}
3. Crear un bucket de Cloud Storage como fuente del evento
Usa el siguiente código para crear un bucket de Cloud Storage con permisos relacionados con Eventarc:
4. Crea e implementa un Workflow
Define e implementa un workflow que se ejecute cuando se actualice un objeto en el bucket creado:
5. Crea un activador de Eventarc
Crea un activador de Eventarc que enrute los eventos directos del bucket
creado a Workflows. Usa el recurso google_eventarc_trigger
para definir el recurso del activador de Eventarc.
Puedes definir varios matching_criteria
con atributos de CloudEvents
compatibles con Eventarc que actúan como el
event-filters
que especificas cuando creas un activador. Si deseas obtener más información, sigue las instrucciones cuando crees un activador para un proveedor, un tipo de evento y un destino específicos.
Solo los eventos que coinciden con todos los filtros se envían al destino.
6. Aplica los cambios
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
Para aplicar tu configuración de Terraform en un proyecto de Google Cloud, completa los pasos de las siguientes secciones.
Prepara Cloud Shell
- Inicia Cloud Shell
-
Establece el proyecto de Google Cloud predeterminado en el que deseas aplicar tus configuraciones de Terraform.
Solo necesitas ejecutar este comando una vez por proyecto y puedes ejecutarlo en cualquier directorio.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Las variables de entorno se anulan si configuras valores explícitos en el archivo de configuración de Terraform.
Prepara el directorio
Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).
-
En Cloud Shell, crea un directorio y un archivo nuevo dentro de ese directorio. El nombre del archivo debe tener la extensión
.tf
, por ejemplo,main.tf
. En este instructivo, el archivo se denominamain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si sigues un instructivo, puedes copiar el código de muestra en cada sección o paso.
Copia el código de muestra en el
main.tf
recién creado.De manera opcional, copia el código de GitHub. Esto se recomienda cuando el fragmento de Terraform es parte de una solución de extremo a extremo.
- Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
- Guarda los cambios.
-
Inicializa Terraform. Solo debes hacerlo una vez por directorio.
terraform init
De manera opcional, incluye la opción
-upgrade
para usar la última versión del proveedor de Google:terraform init -upgrade
Aplica los cambios
-
Revisa la configuración y verifica que los recursos que creará o actualizará Terraform coincidan con tus expectativas:
terraform plan
Corrige la configuración según sea necesario.
-
Para aplicar la configuración de Terraform, ejecuta el siguiente comando y, luego, escribe
yes
cuando se te solicite:terraform apply
Espera hasta que Terraform muestre el mensaje “¡Aplicación completa!”.
- Abre tu proyecto de Google Cloud para ver los resultados. En la consola de Google Cloud, navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.
7. Verifica la creación del Workflow
Para verificar que se haya creado el Workflow, ejecuta el siguiente comando:
gcloud workflows list --location us-central1
8. Verifica la creación del activador de Eventarc
Para verificar que se creó el activador de Eventarc, ejecuta el siguiente comando:
gcloud eventarc triggers list --location us-central1
El resultado debería ser similar al siguiente ejemplo:
NAME: trigger-storage-workflows-tf
TYPE: google.cloud.storage.object.v1.finalized
DESTINATION: Workflows: storage-workflow-tf
ACTIVE: Yes
LOCATION: us-central1
Genera y visualiza un evento
Puedes generar un evento y confirmar que el activador de Eventarc funcione según lo esperado.
Cloud Run
Para generar un evento, haz lo siguiente:
Sube un archivo de texto a Cloud Storage:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://trigger-cloudrun-PROJECT_ID/random.txt
La carga genera un evento y el servicio de Cloud Run registra el mensaje del evento.
Para verificar que se recibe un evento, haz lo siguiente:
- Ve las entradas de registro relacionadas con eventos creadas por tu servicio:
gcloud logging read "resource.type=cloud_run_revision \ AND resource.labels.service_name=hello-events"
Como alternativa, abre la consola de Google Cloud, navigate al recurso de Cloud Run y consulta los registros.
- Busca una entrada de registro similar a la que se muestra a continuación:
Received event of type google.cloud.storage.object.v1.finalized. Event data: { "kind": "storage#object", "id": "trigger-cloudrun-PROJECT_ID/random.txt", ...}
GKE
Para generar un evento, haz lo siguiente:
Sube un archivo de texto a Cloud Storage:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://trigger-gke-PROJECT_ID/random.txt
La carga genera un evento y el servicio de Cloud Run registra el mensaje del evento.
Para verificar que se recibe un evento, haz lo siguiente:
Busca el ID del Pod:
POD_NAME=$(kubectl get pods -o custom-columns=":metadata.name" --no-headers)
Este comando usa el resultado con formato de
kubectl
.Verifica los registros del Pod:
kubectl logs $POD_NAME
Busca una entrada de registro similar a la que se muestra a continuación:
{"severity":"INFO","eventType":"google.cloud.pubsub.topic.v1.messagePublished", "message":"Received event of type google.cloud.pubsub.topic.v1.messagePublished.", [...]}
Workflows
Para generar un evento, haz lo siguiente:
Sube un archivo de texto a Cloud Storage:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://trigger-workflows-PROJECT_ID/random.txt
La carga genera un evento y el servicio de Cloud Run registra el mensaje del evento.
Para verificar que se recibe un evento, haz lo siguiente:
Para verificar que una ejecución de Workflow se active, enumera las últimas cinco ejecuciones:
gcloud workflows executions list storage-workflow-tf --limit=5
El resultado debe incluir una lista de ejecuciones con
NAME
,START_TIME
,END_TIME
ySTATUS
.Obtén los resultados de la ejecución más reciente:
EXECUTION_NAME=$(gcloud workflows executions list storage-workflow-tf --limit=1 --format "value(name)") gcloud workflows executions describe $EXECUTION_NAME
El resultado debe ser similar al siguiente:
... result: '"Received event google.cloud.storage.object.v1.finalized - trigger-workflows-PROJECT_ID, random.txt"' state: SUCCEEDED ...
Busca
state: SUCCEEDED
yresult: "Received event"
en el resultado de los Workflows
Realiza una limpieza
Quita los recursos que se aplicaron antes con tu configuración de Terraform a través de la ejecución del siguiente comando y, luego, ingresa yes
cuando se te solicite:
terraform destroy
También puedes borrar el proyecto de Google Cloud para evitar que se generen cargos. Si borras tu proyecto de Google Cloud, se dejan de facturar todos los recursos que usaste en ese proyecto.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
¿Qué sigue?
- Para activar un Workflow con eventos mediante la CLI de gcloud o la consola, consulta Activa un flujo de trabajo con eventos o mensajes de Pub/Sub.