En este instructivo, se explica cómo solucionar errores del entorno de ejecución que se encuentran cuando implementas eventos de Cloud Storage mediante registros de auditoría de Cloud en un servicio de Cloud Run no autenticado.
Objetivos
- Crear un bucket de Cloud Storage para que sea la fuente del evento
- Compilar, subir y, luego, implementar una imagen de contenedor en Cloud Run.
- Crear activadores de Eventarc.
- Subir un archivo al bucket de Cloud Storage.
- Solucionar problemas y corregir errores de entorno de ejecución.
Costos
En este instructivo, se usan los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Cuando finalices este instructivo, podrás borrar los recursos creados para evitar que se te siga facturando. Para obtener más información, consulta Cómo realizar una limpieza.
Antes de comenzar
Sigue los requisitos previos en Recibe un evento de Registros de auditoría de Cloud.
Cree un bucket de Cloud Storage
Crea dos buckets de almacenamiento en dos regiones como fuente de eventos para el servicio de Cloud Run:
us-east1
export BUCKET1="troubleshoot-bucket1-PROJECT_ID" gsutil mb -l us-east1 gs://${BUCKET1}
us-west1
export BUCKET2="troubleshoot-bucket2-$PROJECT_ID" gsutil mb -l us-west1 gs://${BUCKET2}
Después de crear la fuente del evento, implementa el servicio del receptor de eventos en Cloud Run.
Recupera la muestra de código
Clone el repositorio:
Comienza a usarlo
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
cd golang-samples/eventarc/audit_storage
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
cd java-docs-samples/eventarc/audit-storage
.NET
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
cd dotnet-docs-samples/eventarc/audit-storage
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
cd nodejs-docs-samples/eventarc/audit-storage
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
cd python-docs-samples/eventarc/audit-storage
Revisa el código
El código de este instructivo consta de los siguientes elementos:
Un servidor que controla los mensajes entrantes unidos en un CloudEvent dentro de la solicitud HTTP POST:
Comienza a usarlo
Java
.NET
Node.js
Python
Un Dockerfile que define el entorno operativo del servicio. El contenido del Dockerfile varía según el lenguaje
Comienza a usarlo
Java
.NET
Node.js
Python
Envía el código
Para enviar el código, haz lo siguiente:
Compila tu imagen de contenedor con Cloud Build y súbela a Container Registry:
Comienza a usarlo
gcloud builds submit --tag gcr.io/PROJECT_ID/audit-storage
Reemplaza PROJECT_ID por el ID del proyecto de Google Cloud.
Si la operación se realiza con éxito, se muestra un mensaje de éxito con el ID, la hora de creación y el nombre de la imagen. La imagen se almacena en Container Registry y puede volver a usarse si así se desea.
Java
- Usa el auxiliar de credenciales de gcloud para autorizar a Docker a que envíe el contenedor a Container Registry.
gcloud auth configure-docker
Usa el complemento de Maven para Jib a fin de compilar y enviar el contenedor a Container Registry.
mvn compile jib:build -Dimage=gcr.io/PROJECT_ID/audit-storage
Reemplaza PROJECT_ID por el ID del proyecto de Google Cloud.
audit-storage
es el nombre del contenedor. Si la operación se realiza de forma correcta, se muestra un mensaje de ÉXITO. La imagen se almacena en Container Registry y puede volver a usarse si así se desea.
.NET
gcloud builds submit --tag gcr.io/PROJECT_ID/audit-storage
Reemplaza PROJECT_ID por el ID del proyecto de Google Cloud.
Si la operación se realiza con éxito, se muestra un mensaje de éxito con el ID, la hora de creación y el nombre de la imagen. La imagen se almacena en Container Registry y puede volver a usarse si así se desea.
Node.js
gcloud builds submit --tag gcr.io/PROJECT_ID/audit-storage
Reemplaza PROJECT_ID por el ID del proyecto de Google Cloud.
Si la operación se realiza con éxito, se muestra un mensaje de éxito con el ID, la hora de creación y el nombre de la imagen. La imagen se almacena en Container Registry y puede volver a usarse si así se desea.
Python
gcloud builds submit --tag gcr.io/PROJECT_ID/audit-storage
Reemplaza PROJECT_ID por el ID del proyecto de Google Cloud.
Si la operación se realiza con éxito, se muestra un mensaje de éxito con el ID, la hora de creación y el nombre de la imagen. La imagen se almacena en Container Registry y puede volver a usarse si así se desea.
- Usa el auxiliar de credenciales de gcloud para autorizar a Docker a que envíe el contenedor a Container Registry.
Implementa la imagen del contenedor en Cloud Run:
gcloud run deploy troubleshoot-service --image gcr.io/PROJECT_ID/audit-storage \ --allow-unauthenticated
Reemplaza PROJECT_ID por el ID del proyecto de GCP.
audit-storage
es el nombre del contenedor ytroubleshoot-service
es el nombre del servicio de Cloud Run.Ten en cuenta que la imagen de contenedor se implementa en el servicio y en la región que configuraste antes en Configura gcloud.
Cuando implementes en Cloud Run, responde
y
, “Sí”, a la opción Permitir sin autenticación. Para obtener más detalles sobre la autenticación basada en IAM, consulta Funciones y permisos de Eventarc.Cuando la implementación se realiza correctamente, la línea de comandos muestra la URL del servicio.
Crear un activador
Ahora que implementaste un servicio de Cloud Run, configura un activador para escuchar eventos de Cloud Storage a través de registros de auditoría.
Crea un activador de registro de auditoría para detectar los eventos de Cloud Storage:
gcloud eventarc triggers create troubleshoot-trigger \ --destination-run-service=troubleshoot-service \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Esto crea un activador llamado
troubleshoot-trigger
.Para confirmar que se creó
troubleshoot-trigger
, ejecuta el siguiente comando:gcloud eventarc triggers list
Se muestra
troubleshoot-trigger
con un objetivo detroubleshoot-service
.
Genera y visualiza un evento
Para confirmar que implementaste correctamente el servicio y puedes recibir eventos de Cloud Storage, sigue estos pasos:
Crea y sube un archivo al primer bucket de almacenamiento:
echo "Hello World" > random.txt gsutil cp random.txt gs://${BUCKET1}/random.txt
Supervisa los registros para verificar si el servicio recibió un evento. Los registros de servicio muestran que el servicio escucha eventos, lo que indica un problema en la configuración:
Now listening on: http://0.0.0.0:8080
Investiga el problema
Ahora, puedes revisar el proceso de investigar por qué el servicio no recibe eventos.
Registros de auditoría
En este instructivo, los eventos de Cloud Storage se emiten a través de registros de auditoría y se envían a Cloud Run. Verifica si los registros de auditoría están habilitados para Cloud Storage.
- Ve a IAM y administración > Registros de auditoría y selecciona la casilla de verificación Google Cloud Storage. Ir a la consola de registros de auditoría de Cloud
- Asegúrate de que los tipos de registros Lectura de administración, Lectura de datos y Escritura de datos de los Registros de auditoría de Cloud estén seleccionados.
Una vez que hayas habilitado los Registros de auditoría de Cloud, vuelve a subir el archivo y verifica los registros. El servicio aún no recibe eventos y esto podría estar relacionado con la ubicación del activador.
Ubicación del activador
Puede haber varios recursos en diferentes ubicaciones y debes filtrar los eventos de fuentes que se encuentran en la misma región que el destino de Cloud Run. Para obtener más información, consulta las ubicaciones compatibles con Eventarc.
En este instructivo, implementaste el servicio de Cloud Run en us-central1
.
También creaste un activador en la misma ubicación porque estableciste eventarc/location
en us-central1
.
Para enumerar la ubicación del activador, describe su activador:
gcloud eventarc triggers describe troubleshoot-trigger
Sin embargo, creaste dos buckets en las ubicaciones us-east1
y us-west1
. Para recibir eventos de esas ubicaciones, debes crear activadores en esas ubicaciones.
Crea un activador en us-east1
.
Borra el activador existente en la ubicación
us-central1
:gcloud eventarc triggers delete troubleshoot-trigger
Establece la ubicación y la región en
us-east1
:gcloud config set eventarc/location us-east1 gcloud config set run/region us-east1
Envía el código de nuevo.
Crea un activador nuevo en la ubicación
us-east1
:gcloud eventarc triggers create troubleshoot-trigger \ --destination-run-service=troubleshoot-service \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Verifica que se haya creado el activador:
gcloud eventarc triggers list
La inicialización de un activador puede tomar hasta 10 minutos antes de comenzar a entregar eventos.
Hora de inicialización
Una vez que se crean los activadores, tarda hasta 10 minutos de tiempo de inicialización antes de que los eventos comiencen a fluir. Ejecuta el siguiente comando para confirmar que los activadores estén activos:
gcloud eventarc triggers list
Se muestra un resultado similar que indica el estado del activador:
NAME TYPE DESTINATION_RUN_SERVICE DESTINATION_RUN_PATH ACTIVE
troubleshoot-trigger3 google.cloud.audit.log.v1.written troubleshoot-service2 By 14:16:56
troubleshoot-trigger google.cloud.audit.log.v1.written troubleshoot-service Yes
Después de 10 minutos, vuelve a subir un archivo a cada bucket. Los eventos para cada archivo se escriben en los registros del servicio de Cloud Run. Si el servicio no recibe eventos, podría estar relacionado con el tamaño de los eventos.
Tamaño del evento
Los eventos que envíe no deben exceder los límites de tamaño del evento (512 KB).
Dejó de funcionar un activador que ya se publicó antes
Verifica que la fuente genere eventos. Verifica los Registros de auditoría de Cloud y asegúrate de que el servicio supervisado emita registros. Si se registran registros, pero los eventos no se entregan, comunícate con el equipo de asistencia.
Verifica que exista un tema de Pub/Sub con el mismo nombre de activador.
- Para enumerar los activadores, consulta la lista de activadores de eventarc para gcloud.
Para enumerar los temas de Pub/Sub, ejecuta el siguiente comando:
gcloud pubsub topics list
Verifica que el nombre del tema de Pub/Sub incluya el nombre del activador creado. Si falta el tema de Pub/Sub, crea un tema cuando crees el activador.
Verifica el estado del tema de Pub/Sub:
Asegúrate de que haya una marca de verificación check_circle en la pestaña Activadores: en Cloud Console, ve a Cloud Run, selecciona el servicio que creaste y navega a la pestaña Activadores.
Ve a Pub/Sub > Temas y haz clic en el tema de Pub/Sub.
Supervisa si se publican mensajes en el tema con la métrica:
topic/send_message_operation_count
. Si no se publican mensajes en el tema, revisa los registros de auditoría de Cloud y asegúrate de que el servicio supervisado emite registros. Si se registran registros, pero los eventos no se entregan, comunícate con el equipo de asistencia.Supervisa si los mensajes se enviaron de forma correcta a Cloud Run con la métrica:
subscription/push_request_count
porresponse_code
.En Cloud Console, ve a Cloud Monitoring.
Agrega tu proyecto a un nuevo lugar de trabajo.
Haz clic en Paneles y selecciona el panel de Cloud Pub/Sub.
En el panel de Cloud Pub/Sub, haz clic en el tema de Pub/Sub que creaste.
En la sección Incidentes, haz clic en Crear política.
En la página Crear política de alertas, haz clic en Agregar condición.
En la pestaña Métrica, proporciona las siguientes condiciones:
- Suscripción de Cloud Pub/Sub como el Tipo de recurso.
- Solicitudes de envío como la métrica.
- response_code como Agrupar por.
- 0 como el Umbral de configuración.
Si deseas obtener más información sobre las métricas de uso de Pub/Sub, consulta la supervisión de suscripciones de envío.
Haz clic en Agregar para ir a la página Crear política de alertas:
En la sección ¿Cuáles son los pasos para arreglar el problema?, ingresa un nombre de alerta, por ejemplo,
samplealert
, y haz clic en Guardar.Para ver la alerta, ve a Monitoring > Panel > Cloud Pub/Sub. Haz clic en el tema Pub/Sub y, luego, en la pestaña Suscripción.
Si se informan errores de envío, verifica los registros del servicio de Cloud Run. Si el extremo receptor muestra un código de estado incorrecto, eso indica que el código de Cloud Run no funciona como se espera y debes comunicarte con el equipo de asistencia.
Limpia
Si creaste un proyecto nuevo para este instructivo, bórralo. Si usaste un proyecto existente y deseas conservarlo sin los cambios que se agregaron en este instructivo, borra los recursos creados para el instructivo.
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, haz lo siguiente:
- En la consola de Google Cloud, 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.
Elimina recursos de instructivos
Usa este comando para borrar el servicio de Cloud Run que implementaste en este instructivo:
gcloud run services delete SERVICE_NAME
En el ejemplo anterior,
SERVICE_NAME
es el nombre del servicio que elegiste.También puedes borrar los servicios de Cloud Run desde la consola de Google Cloud.
Quita todas las opciones de configuración predeterminadas de la CLI de gcloud que agregaste durante la configuración del instructivo.
Por ejemplo:
gcloud config unset run/region
o
gcloud config unset project
Borra otros recursos de Google Cloud que creaste en este instructivo:
- Borrar el activador de Eventarc:
gcloud eventarc triggers delete TRIGGER_NAME
ReemplazaTRIGGER_NAME
por el nombre de tu activador.
- Borra la imagen del contenedor llamada
gcr.io/PROJECT_ID/audit-storage
de Container Registry. Reemplaza PROJECT_ID por el ID del proyecto de Google Cloud.
- Borrar el activador de Eventarc:
¿Qué sigue?
- Para resolver problemas que podrías encontrar cuando uses Eventarc, consulta Soluciona de problemas.