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 de 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
- 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.
-
In the Google Cloud console, on the project selector page, select or create 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 role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify 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.
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 role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Habilita las APIs de Cloud Resource Manager y de Identity and Access Management (IAM).
Roles necesarios para habilitar las APIs
Para habilitar las APIs, necesitas el rol de IAM de administrador de Service Usage (
roles/serviceusage.serviceUsageAdmin), que contiene el permisoserviceusage.services.enable. Obtén más información para otorgar roles.-
En la consola de Google Cloud , activa Cloud Shell.
En la parte inferior de la consola de Google Cloud , se inicia una sesión de Cloud Shell que muestra una ventana emergente con una línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.
Terraform está integrado en el entorno de Cloud Shell, y puedes usar Cloud Shell para implementar tus recursos de Terraform sin tener que instalar Terraform.
Preparación 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 que prefieras para tu infraestructura con la sintaxis de Terraform.
Prepara Cloud Shell
En Cloud Shell, establece el proyecto 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
Reemplaza PROJECT_ID por el ID de tu Google Cloud proyecto.
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, se hace referencia al archivo como main.tf.
Define tu configuración de Terraform
Copia las muestras de código de Terraform aplicables en el archivo main.tf que acabas de crear. 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, aplicarás toda la configuración de una sola vez. Sin embargo, también puedes segmentar tus anuncios para que se muestren en un recurso específico. Por ejemplo:
terraform apply -target="google_eventarc_trigger.default"
Ten en cuenta que los ejemplos de código de Terraform usan la 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 otorgar a la cuenta de servicio administrada por el usuario roles específicos de administración de identidades y accesos 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 de esa fecha, 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 administrar clústeres de GKE:
Crea 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 de esa fecha, 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 otorgar 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 destino 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-central1Crea una implementación llamada
hello-gke:kubectl create deployment hello-gke \ --image=us-docker.pkg.dev/cloudrun/container/helloExpón la implementación como un servicio de Kubernetes:
kubectl expose deployment hello-gke \ --type ClusterIP --port 80 --target-port 8080Asegúrate de que el pod se esté ejecutando:
kubectl get podsEl resultado debería ser similar al siguiente ejemplo:
NAME READY STATUS RESTARTS AGE hello-gke-5b6574b4db-rzzcr 1/1 Running 0 2m45sSi
STATUSesPendingoContainerCreating, el Pod se está implementando. Espera un minuto para que se complete la implementación y vuelve a verificar el estado.Asegúrate de que el servicio se esté ejecutando:
kubectl get svcEl 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 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 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
-upgradepara 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
yescuando 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-central1Confirma que se haya creado el activador:
gcloud eventarc triggers list --location us-central1El 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-gkeConfirma que se haya creado el activador:
gcloud eventarc triggers list --location us-central1El 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-central1Confirma que se haya creado el activador de Eventarc:
gcloud eventarc triggers list --location us-central1El 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 lsSube un archivo de texto al bucket de Cloud Storage:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://BUCKET_NAME/random.txtReemplaza
BUCKET_NAMEpor el nombre del bucket de Cloud Storage que recuperaste en el paso anterior. Por ejemplo:gcloud storage cp random.txt gs://BUCKET_NAME/random.txtLa carga genera un evento y el servicio de receptor de eventos registra el mensaje del evento.
Verifica que se haya recibido un evento:
Cloud Run
Filtra las entradas de registro creadas por 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_NAMEBusca 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=5El resultado debe incluir una lista de ejecuciones con
NAME,STATE,START_TIMEyEND_TIME.Para obtener los resultados de la ejecución más reciente, haz lo siguiente:
EXECUTION_NAME=$(gcloud workflows executions list storage-workflow-tf --limit=1 --format "value(name)") gcloud workflows executions describe $EXECUTION_NAMEConfirma 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 ...
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 tu proyecto Google Cloud para evitar que se apliquen cargos. Si borras tu proyecto de Google Cloud , se detendrá la facturación de todos los recursos que se usaron en él.
- En la Google Cloud consola, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.