En este instructivo, aprenderás a solucionar errores del entorno de ejecución que se encuentran cuando usas Eventarc para enrutar eventos de Cloud Storage a un servicio de Cloud Run sin autenticar mediante Registros de auditoría de Cloud.
Crea un repositorio estándar de Artifact Registry
Crea un repositorio estándar de Artifact Registry para almacenar tu imagen de contenedor:
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=$REGION
Reemplaza REPOSITORY
por un nombre único para el repositorio.
Crea un bucket de Cloud Storage
Crea un bucket de Cloud Storage en cada una de las dos regiones como fuente de eventos para el servicio de Cloud Run:
Crea un bucket en
us-east1
:export BUCKET1="troubleshoot-bucket1-PROJECT_ID" gcloud storage buckets create gs://${BUCKET1} --location=us-east1
Crea un bucket en
us-west1
:export BUCKET2="troubleshoot-bucket2-PROJECT_ID" gcloud storage buckets create gs://${BUCKET2} --location=us-west1
Después de crear la fuente del evento, implementa el servicio del receptor de eventos en Cloud Run.
Implementa el receptor de eventos
Implementa un servicio de Cloud Run que reciba y registre eventos.
Clona el repositorio de GitHub para recuperar la muestra de código:
Go
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 de este instructivo, que consta de los siguientes elementos:
Un controlador de eventos que recibe el evento entrante como un CloudEvent dentro de la solicitud HTTP
POST
:Go
Java
.NET
Node.js
Python
Un servidor que usa el controlador de eventos:
Go
Java
.NET
Node.js
Python
Un Dockerfile que define el entorno operativo del servicio. El contenido del Dockerfile varía según el lenguaje
Go
Java
.NET
Node.js
Python
Compila tu imagen de contenedor con Cloud Build y sube la imagen a Artifact Registry:
export PROJECT_ID=$(gcloud config get-value project) export SERVICE_NAME=troubleshoot-service gcloud builds submit --tag $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1
Implementa la imagen del contenedor en Cloud Run:
gcloud run deploy ${SERVICE_NAME} \ --image $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1 \ --allow-unauthenticated
Cuando la implementación se realiza correctamente, la línea de comandos muestra la URL del servicio.
Crear un activador
Después de implementar 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 Eventarc para detectar los eventos de Cloud Storage que se enrutan mediante los Registros de auditoría de Cloud:
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
El resultado debería ser similar al siguiente ejemplo:
NAME: troubleshoot-trigger TYPE: google.cloud.audit.log.v1.written DESTINATION: Cloud Run service: troubleshoot-service ACTIVE: By 20:03:37 LOCATION: us-central1
Genera y visualiza un evento
Confirma que implementaste correctamente el servicio y que puedes recibir eventos de Cloud Storage.
Crea y sube un archivo al bucket de almacenamiento
BUCKET1
:echo "Hello World" > random.txt gcloud storage cp random.txt gs://${BUCKET1}/random.txt
Supervisa los registros para verificar si el servicio recibió un evento. Para ver la entrada de registro, completa los siguientes pasos:
Filtra las entradas de registro y muestra el resultado en formato JSON:
gcloud logging read "resource.labels.service_name=troubleshoot-service \ AND textPayload:random.txt" \ --format=json
Busca una entrada de registro similar a lo siguiente:
"textPayload": "Detected change in Cloud Storage bucket: ..."
Ten en cuenta que, en un principio, no se muestra ninguna entrada de registro. Esto indica que hay un problema en la configuración que debes investigar.
Investiga el problema
Revisa el proceso de investigar por qué el servicio no recibe eventos.
Hora de inicialización
Aunque tu activador se crea de inmediato, puede tardar hasta dos minutos en propagarse y filtrar los eventos. Ejecuta el siguiente comando para confirmar que un activador esté activo:
gcloud eventarc triggers list
El resultado indica el estado del activador. En el siguiente ejemplo, troubleshoot-trigger
estará activo a las 14:16:56:
NAME TYPE DESTINATION_RUN_SERVICE ACTIVE
troubleshoot-trigger google.cloud.audit.log.v1.written troubleshoot-service By 14:16:56
Una vez que el activador esté activo, vuelve a subir un archivo al bucket de almacenamiento. Los eventos 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.
Registros de auditoría
En este instructivo, los eventos de Cloud Storage se enrutan mediante Registros de auditoría de Cloud y se envían a Cloud Run. Confirma que los registros de auditoría estén habilitados para Cloud Storage.
En la consola de Google Cloud , ve a la página Registros de auditoría.
- Selecciona la casilla de verificación Google Cloud Storage.
- Asegúrate de que los tipos de registro Lectura de administrador, Lectura de datos y Escritura de datos estén seleccionados.
Una vez que hayas habilitado los Registros de auditoría de Cloud, vuelve a subir el archivo al bucket de almacenamiento y verifica los registros. Si el servicio aún no recibe eventos, 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 e Información sobre las ubicaciones de Eventarc.
En este instructivo, implementaste el servicio de Cloud Run en us-central1
. Debido a que configuraste eventarc/location
como us-central1
, también creaste un activador en la misma ubicación.
Sin embargo, creaste dos buckets de Cloud Storage en ubicaciones us-east1
y us-west1
. Para recibir eventos de esas ubicaciones, debes crear activadores de Eventarc en esas ubicaciones.
Crea un activador de Eventarc ubicado en us-east1
:
Confirma la ubicación del activador existente:
gcloud eventarc triggers describe 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
Implementa el receptor de eventos de nuevo mediante la compilación y la implementación de la imagen de contenedor en Cloud Run.
Crea un activador nuevo ubicado en
us-east1
:gcloud eventarc triggers create troubleshoot-trigger-new \ --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 dos minutos antes de comenzar a enrutar eventos.
Para confirmar que el activador ahora se implementó de forma correcta, genera y visualiza un evento.
Otros problemas que puedes tener
Es posible que tengas otros problemas cuando uses Eventarc.
Tamaño del evento
Los eventos que envíe no deben exceder los límites de tamaño del evento.
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. Eventarc usa Pub/Sub como su capa de transporte y usará un tema de Pub/Sub existente o creará un tema y lo administrará automáticamente.
- Para enumerar los activadores, consulta
gcloud eventarc triggers list
. 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. Por ejemplo:
name: projects/PROJECT_ID/topics/eventarc-us-east1-troubleshoot-trigger-new-123
Si falta el tema de Pub/Sub, vuelve a crear el activador para un proveedor, un tipo de evento y un destino de Cloud Run específicos.
- Para enumerar los activadores, consulta
Verifica que el activador se haya configurado para el servicio.
En la consola de Google Cloud , ve a la página Servicios.
Haz clic en el nombre del servicio para abrir la página Detalles del servicio.
Hacer clic en la pestaña Activadores
Se debería mostrar el activador de Eventarc asociado con el servicio.
Verifica el estado del tema y la suscripción de Pub/Sub mediante los tipos de métricas de Pub/Sub.
Puedes supervisar los mensajes reenviados que no se pueden entregar mediante la métrica
subscription/dead_letter_message_count
. Esta métrica muestra la cantidad de mensajes que no se pueden entregar que Pub/Sub reenvía desde una suscripción.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.
Puedes supervisar las suscripciones de envío con la métrica
subscription/push_request_count
y agrupando la métrica porresponse_code
ysubcription_id
.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.
Para obtener más información, consulta Crea políticas de alertas de límite de métrica.