En este instructivo, se muestra cómo escribir, implementar y activar una función de Cloud Run controlada por eventos con un activador de Registros de auditoría de Cloud.
Las funciones de Cloud Run permiten que las entradas de los Registros de auditoría de Cloud activen las funciones. Muchos productos de Google Cloud escriben en los Registros de auditoría de Cloud cuando ocurren acciones importantes en el producto. Estas entradas de registro pueden activar la ejecución de funciones de Cloud Run en tiempo real, lo que permite a los usuarios procesarlas o actuar en consecuencia de forma automática.
Muchos eventos en Google Cloud generan estos registros y abarcan la mayoría de los productos de Google Cloud. Por lo tanto, los activadores de los registros de auditoría de Cloud te permiten crear funciones que reaccionan a la mayoría de los cambios de estado en Google Cloud.
En este instructivo, se muestra cómo usar los activadores de registros de auditoría de Cloud para etiquetar instancias de Compute Engine recién creadas con el nombre de la entidad (persona o cuenta de servicio) que las creó.
Si eres nuevo en los registros de auditoría de Cloud y deseas obtener más información, consulta la documentación de los registros de auditoría de Cloud.
Objetivos
- Escribe una función de Cloud Run controlada por eventos que reciba un evento de Registros de auditoría de Cloud cuando se crea una instancia de VM de Compute Engine.
- Activa la función mediante la creación de una instancia de VM de Compute Engine. En este punto, la instancia se etiquetará con el nombre de la entidad (persona o cuenta de servicio) que la creó.
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
- Cloud Run functions
- Cloud Build
- Pub/Sub
- Artifact Registry
- Eventarc
- Cloud Logging
- Compute Engine
For details, see Cloud Run functions pricing.
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
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.
-
Enable the Cloud Functions, Cloud Run, Cloud Build, Artifact Registry, Eventarc, Logging, Compute Engine, and Pub/Sub APIs.
-
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 Functions, Cloud Run, Cloud Build, Artifact Registry, Eventarc, Logging, Compute Engine, and Pub/Sub APIs.
- Instala e inicializa el SDK de Cloud.
- Actualiza los componentes de
gcloud
: - Prepara tu entorno de desarrollo.
gcloud components update
¿Necesitas un símbolo del sistema? Puedes usar Google Cloud Shell. Se trata de un entorno de línea de comandos que ya incluye el SDK de Google Cloud, por lo que no es necesario que lo instales. El SDK de Google Cloud también viene preinstalado en las máquinas virtuales de Google Compute Engine.
Requisitos previos
Abre la página IAM y administración > Registros de auditoría en la consola de Google Cloud:
Ir a la página IAM y administración > Registros de auditoría
Habilita los tipos de registro de lectura de administrador, lectura de datos y escritura de datos de Registros de auditoría de Cloud para la API de Compute Engine:
Verifica si la cuenta de servicio de Compute Engine tiene la función
Editor
. Esta cuenta de servicio se usará como la identidad del servicio para funciones de Cloud Run:Ir a la página IAM y administración > IAM
Busca la entrada
PROJECT_NUMBER-compute@developer.gserviceaccount.com
en la tabla y observa la columnaRoles
. Si la columna contieneEditor
, puedes omitir los siguientes pasos. De lo contrario, ve a los siguientes pasos y asigna las funciones necesarias a la cuenta de servicio.Otorga el rol
eventarc.eventReceiver
a la cuenta de servicio de Compute Engine del proyecto.PROJECT_ID=$(gcloud config get-value project) PROJECT_NUMBER=$(gcloud projects list --filter="project_id:$PROJECT_ID" --format='value(project_number)') # Allow service account token creation gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role roles/eventarc.eventReceiver
Otorga el rol
run.invoker
a la cuenta de servicio de Compute Engine del proyecto para que el activador de Pub/Sub pueda ejecutar la función:PROJECT_ID=$(gcloud config get-value project) PROJECT_NUMBER=$(gcloud projects list --filter="project_id:$PROJECT_ID" --format='value(project_number)') # Allow service account token creation gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role roles/run.invoker
Otorga el rol
compute.instanceAdmin
a la cuenta de servicio de Compute Engine del proyecto a fin de que el código de función tenga los permisos necesarios para obtener instancias de VM y establecer etiquetas en ellas:PROJECT_ID=$(gcloud config get-value project) PROJECT_NUMBER=$(gcloud projects list --filter="project_id:$PROJECT_ID" --format='value(project_number)') # Allow service account token creation gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role roles/compute.instanceAdmin
Prepara la aplicación
Clona el repositorio de la app de muestra en tu máquina local:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo zip y extraerla.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo zip y extraerla.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
De manera opcional, puedes descargar la muestra como un archivo ZIP y extraerla.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo zip y extraerla.
Cambia al directorio que contiene el código de muestra de las funciones de Cloud Run para acceder a los Registros de auditoría de Cloud:
Node.js
cd nodejs-docs-samples/functions/v2/autoLabelInstance/
Python
cd python-docs-samples/functions/v2/label_gce_instance/
Go
cd golang-samples/functions/functionsv2/label_gce_instance/
Java
cd java-docs-samples/functions/v2/label-compute-instance/
Ve el código de muestra:
Node.js
Python
Go
Java
Implementa la función
Para implementar la función con un activador de Registros de auditoría de Cloud, ejecuta el siguiente comando en el directorio que contiene el código de muestra (o en el caso de Java, el archivo pom.xml
):
Node.js
gcloud functions deploy nodejs-cal-function \ --gen2 \ --runtime=nodejs20 \ --region=REGION
\ --source=. \ --entry-point=autoLabelInstance \
--trigger-location=REGION
\
--trigger-event-filters="type=google.cloud.audit.log.v1.written" \
--trigger-event-filters="serviceName=compute.googleapis.com" \
--trigger-event-filters="methodName=v1.compute.instances.insert"
Usa la marca --runtime
para especificar el ID del entorno de ejecución de una versión compatible de Node.js para ejecutar la función.
Python
gcloud functions deploy python-cal-function \ --gen2 \ --runtime=python312 \ --region=REGION
\ --source=. \ --entry-point=label_gce_instance \
--trigger-location=REGION
\
--trigger-event-filters="type=google.cloud.audit.log.v1.written" \
--trigger-event-filters="serviceName=compute.googleapis.com" \
--trigger-event-filters="methodName=v1.compute.instances.insert"
Usa la marca --runtime
para especificar el ID de entorno de ejecución de una versión de Python compatible para ejecutar la función.
Go
gcloud functions deploy go-cal-function \ --gen2 \ --runtime=go121 \ --region=REGION
\ --source=. \ --entry-point=label-gce-instance \
--trigger-location=REGION
\
--trigger-event-filters="type=google.cloud.audit.log.v1.written" \
--trigger-event-filters="serviceName=compute.googleapis.com" \
--trigger-event-filters="methodName=v1.compute.instances.insert"
Usa la marca --runtime
para especificar el ID de entorno de ejecución de una versión de Go compatible para ejecutar tu función.
Java
gcloud functions deploy java-cal-function \ --gen2 \ --runtime=java17 \ --region=REGION
\ --source=. \ --entry-point=functions.AutoLabelInstance \ --memory=512MB \
--trigger-location=REGION
\
--trigger-event-filters="type=google.cloud.audit.log.v1.written" \
--trigger-event-filters="serviceName=compute.googleapis.com" \
--trigger-event-filters="methodName=v1.compute.instances.insert"
Usa la marca --runtime
para especificar el ID del entorno de ejecución de una versión de Java compatible con el fin de ejecutar tu función.
El comando de implementación anterior especifica los siguientes parámetros de filtro de eventos que corresponden a la creación de VM:
type
: El tipo de evento de Registros de auditoría de Cloud (google.cloud.audit.log.v1.written
).serviceName
: El nombre del servicio de Google Cloud que generó la entrada de registro, en este casocompute.googleapis.com
.methodName
: El nombre del método de API que generó la entrada de registro, en este casov1.compute.instances.insert
.
Activa la función
Una vez que se implementa la función, puedes confirmar que funciona:
Crea una instancia de VM de Compute Engine:
gcloud compute instances create
YOUR_INSTANCE_NAME
--zoneYOUR_ZONE
Como alternativa, ve a la consola de Google Cloud y haz clic en Crear una VM.
Ejecuta el siguiente comando para verificar que la instancia se haya etiquetado de forma correcta:
gcloud compute instances describe
YOUR_INSTANCE_NAME
\ --zoneYOUR_ZONE \ --format 'value(labels)'
Deberías ver una etiqueta con el formato
creator=YOURNAMEYOUR_DOMAIN
.
Realiza una limpieza
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Borra el proyecto
La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.
Para borrar el proyecto, sigue estos pasos:
- 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.
Borra la función
Borrar las funciones de Cloud Run no quita ningún recurso almacenado en Cloud Storage.
Para borrar la función de Cloud Run que creaste en este instructivo, ejecuta el siguiente comando:
Node.js
gcloud functions delete nodejs-cal-function --gen2 --region REGION
Python
gcloud functions delete python-cal-function --gen2 --region REGION
Go
gcloud functions delete go-cal-function --gen2 --region REGION
Java
gcloud functions delete java-cal-function --gen2 --region REGION
También puedes borrar funciones de Cloud Run en la consola de Google Cloud.
Borra la instancia de VM de Compute Engine
Para borrar la instancia de VM de Compute Engine que creaste en este instructivo, ejecuta el siguiente comando:
gcloud compute instances deleteYOUR_INSTANCE_NAME
--zoneYOUR_ZONE