En este documento, se describe cómo usar Terraform y el recurso
google_eventarc_trigger
para crear activadores de Eventarc para los siguientes destinos de Google Cloud:
Para obtener más información sobre el uso de Terraform, consulta la documentación de Terraform en Google Cloud.
Las muestras de código de esta guía enrutan eventos directos desde Cloud Storage, pero se pueden adaptar a cualquier proveedor de eventos. Por ejemplo, para aprender a enrutar eventos directos de Pub/Sub a Cloud Run, consulta la Guía de inicio rápido de Terraform.
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 Cloud 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.
Terraform está integrado en el entorno de Cloud Shell y puedes usar Cloud Shell para implementar tus recursos de Terraform sin tener que instalarlo.
Prepárate para implementar Terraform
Antes de implementar cualquier recurso de Terraform, debes crear un archivo de configuración de Terraform. Un archivo de configuración de Terraform te permite definir el estado final preferido de tu infraestructura con la sintaxis de Terraform.
Prepara Cloud Shell
En Cloud Shell, establece el proyecto predeterminado de Google Cloud 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
Reemplaza PROJECT_ID
por el ID de tu proyecto de Google Cloud .
Ten en cuenta que 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:
mkdir DIRECTORY && cd DIRECTORY && touch main.tf
El nombre del archivo debe tener la extensión .tf
. Por ejemplo, en este documento, el archivo se denomina main.tf
.
Define tu configuración de Terraform
Copia las muestras de código de Terraform aplicables en el archivo main.tf
que creaste recientemente. De manera opcional, puedes copiar el código de GitHub. Esto se recomienda cuando el fragmento de Terraform es parte de una solución de extremo a extremo.
Por lo general, aplicas toda la configuración de una sola vez. Sin embargo, también puedes segmentar tus anuncios para un recurso específico. Por ejemplo:
terraform apply -target="google_eventarc_trigger.default"
Ten en cuenta que las muestras de código de Terraform usan interpolación para sustituciones como variables de referencia, atributos de recursos y funciones de llamada.
Habilita las APIs
Por lo general, las muestras de Terraform suponen que las APIs necesarias están habilitadas en tu proyecto deGoogle Cloud . Usa el siguiente código para habilitar las APIs:
Cloud Run
GKE
Workflows
Crea una cuenta de servicio y configura su acceso
Cada activador de Eventarc se asocia a una cuenta de servicio de IAM en el momento en que se crea el activador. Usa el siguiente código para crear una cuenta de servicio dedicada y otorgarle a la cuenta de servicio administrada por el usuario roles de administración de identidades y accesos específicos para administrar eventos:
Cloud Run
El agente de servicio de Pub/Sub se crea automáticamente cuando se habilita la API de Pub/Sub. Si el agente de servicio de Pub/Sub se creó el 8 de abril de 2021 o antes, y la cuenta de servicio no tiene el rol de agente de servicio de Cloud Pub/Sub (roles/pubsub.serviceAgent
), otorga el rol de creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator
) al agente de servicio. Para obtener más información, consulta Crea y otorga roles a los agentes 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" }
GKE
Antes de crear la cuenta de servicio, habilita Eventarc para que administre clústeres de GKE:
Cree la cuenta de servicio:
Workflows
El agente de servicio de Pub/Sub se crea automáticamente cuando se habilita la API de Pub/Sub. Si el agente de servicio de Pub/Sub se creó el 8 de abril de 2021 o antes, y la cuenta de servicio no tiene el rol de agente de servicio de Cloud Pub/Sub (roles/pubsub.serviceAgent
), otorga el rol de creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator
) al agente de servicio. Para obtener más información, consulta Crea y otorga roles a los agentes 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" }
Crear un bucket de Cloud Storage como fuente del evento
Usa el siguiente código para crear un bucket de Cloud Storage y otorga el
rol de publicador de
Pub/Sub (roles/pubsub.publisher
) al
agente de servicio de Cloud Storage.
Cloud Run
GKE
Workflows
Crea un receptor de eventos para que sea el objetivo del evento
Crea un receptor de eventos con uno de los siguientes recursos de Terraform:
Cloud Run
Crea un servicio de Cloud Run como destino del evento para el activador de Eventarc:
GKE
Para simplificar esta guía, crea un servicio de Google Kubernetes Engine como destino de eventos fuera de Terraform, entre la aplicación de las configuraciones de Terraform.
Si no creaste un activador en este proyecto de Google Cloud antes, ejecuta el siguiente comando para crear el agente de servicio de Eventarc:
gcloud beta services identity create --service eventarc.googleapis.com
Crea un clúster de 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 RESTARTS AGE hello-gke-5b6574b4db-rzzcr 1/1 Running 0 2m45s
Si
STATUS
esPending
oContainerCreating
, se está implementando el pod. 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.230.123 <none> 80/TCP 4m46s kubernetes ClusterIP 34.118.224.1 <none> 443/TCP 14m
Workflows
Implementa un flujo de trabajo que se ejecute cuando se actualice un objeto en el bucket de Cloud Storage:
Define un activador de Eventarc
Un activador de Eventarc enruta eventos de un proveedor de eventos a un destino de eventos. Usa el recurso google_eventarc_trigger
para especificar los atributos de CloudEvents en matching_criteria
y filtrar los eventos. 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.
Cloud Run
Crea un activador de Eventarc que enrute los eventos de Cloud Storage al servicio de Cloud Run de hello-event
.
GKE
Crear un activador de Eventarc que enrute los eventos de Cloud Storage al servicio de GKE hello-gke
Workflows
Crea un activador de Eventarc que enrute los eventos de Cloud Storage al flujo de trabajo llamado storage-workflow-tf
.
Aplica Terraform
Usa la CLI de Terraform para aprovisionar la infraestructura según el archivo de configuración.
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
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
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!”.
Verifica la creación de recursos
Cloud Run
Confirma que se haya creado el servicio:
gcloud run services list --region us-central1
Confirma que se haya creado el activador:
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
Confirma que se haya creado el servicio:
kubectl get service hello-gke
Confirma que se haya creado el activador:
gcloud eventarc triggers list --location us-central1
El resultado debería ser similar al siguiente ejemplo:
NAME: trigger-storage-gke-tf TYPE: google.cloud.storage.object.v1.finalized DESTINATION: GKE: hello-gke ACTIVE: Yes LOCATION: us-central1
Workflows
Confirma que se haya creado el flujo de trabajo:
gcloud workflows list --location us-central1
Confirma que se haya creado el activador de Eventarc:
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.
Recupera el nombre del bucket de Cloud Storage que creaste anteriormente:
gcloud storage ls
Sube un archivo de texto al bucket de Cloud Storage:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://BUCKET_NAME/random.txt
Reemplaza
BUCKET_NAME
por el nombre del bucket de Cloud Storage que recuperaste en el paso anterior. Por ejemplo:gcloud storage cp random.txt gs://BUCKET_NAME/random.txt
La carga genera un evento, y el servicio de receptor de eventos registra el mensaje del evento.
Verifica que se reciba un evento:
Cloud Run
Filtra las entradas de registro que creó tu servicio:
gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.storage.object.v1.finalized."'
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-BUCKET_NAME/random.txt", ...}
GKE
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.storage.object.v1.finalized","message": "Received event of type google.cloud.storage.object.v1.finalized. Event data: ...}
Workflows
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
,STATE
,START_TIME
yEND_TIME
.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
Confirma que el resultado sea similar al siguiente:
... result: '"Received event google.cloud.storage.object.v1.finalized - BUCKET_NAME, random.txt"' startTime: '2024-12-13T17:23:50.451316533Z' state: SUCCEEDED ...
Limpia
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 tu proyecto de Google Cloud para evitar que se generen cargos. Si borras tu proyecto de Google Cloud , se detendrá la facturación de todos los recursos que se usen 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.