En este instructivo, se muestra cómo implementar una aplicación alojada en contenedores a través de un servicio autenticado de Cloud Run que recibe eventos a través de Eventarc.
Si especificas filtros para un activador de Eventarc, puedes configurar el enrutamiento de los eventos, incluidos la fuente y el destino del evento. En este caso, una actualización de un bucket de Cloud Storage activa el evento y se envía una solicitud al servicio de Cloud Run en forma de una solicitud HTTP.
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 para usar como fuente del evento:
gcloud storage buckets create gs://PROJECT_ID-bucket/ --location=us-central1
Después de crear la fuente del evento, puedes implementar el servicio del receptor de eventos en Cloud Run.
Implementa un receptor de eventos en Cloud Run
Implementa un servicio de Cloud Run que reciba y registre eventos.
Clona el repositorio de GitHub:
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.
C#
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo ZIP y extraerla.
Ve al directorio que contiene el código de muestra de Cloud Run:
Node.js
cd nodejs-docs-samples/eventarc/audit-storage/
Python
cd python-docs-samples/eventarc/audit-storage/
Go
cd golang-samples/eventarc/audit_storage/
Java
cd java-docs-samples/eventarc/audit-storage/
C#
cd dotnet-docs-samples/eventarc/audit-storage/
Compila el contenedor para el servicio de Cloud Run:
export PROJECT_ID=$(gcloud config get-value project) export SERVICE_NAME=helloworld-events 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
En el mensaje ¿Permitir el acceso público a helloworld-events (y/N)?, responde
n
para “No”.
Cuando veas la URL del servicio de Cloud Run, la implementación estará completa.
Crea un activador de Eventarc
El activador de Eventarc envía eventos desde el bucket de Cloud Storage al servicio helloworld-events
de Cloud Run. El servicio requiere autenticación, y un emisor que tenga una cuenta de servicio con los roles y permisos de IAM necesarios para usar el recurso debe activar el evento.
Crea un activador que filtre los eventos de Cloud Storage:
gcloud eventarc triggers create ${SERVICE_NAME} \ --destination-run-service=${SERVICE_NAME} \ --destination-run-region=${REGION} \ --location=${REGION} \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=PROJECT_ID-bucket" \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Esto crea un activador llamado
helloworld-events
.Ten en cuenta que, cuando creas un activador de Eventarc por primera vez en un proyecto de Google Cloud , es posible que haya un retraso en el aprovisionamiento del agente de servicio de Eventarc. Por lo general, este problema se puede resolver si intentas crear el activador de nuevo. Para obtener más información, consulta Errores de permisos denegados.
Confirma que el activador se haya creado de forma correcta. Ten en cuenta que, si bien tu activador se crea de inmediato, puede tardar hasta dos minutos para que un activador sea por completo funcional.
gcloud eventarc triggers list --location=${REGION}
El resultado debería ser similar al siguiente ejemplo:
NAME: helloworld-events TYPE: google.cloud.storage.object.v1.finalized DESTINATION: Cloud Run service: helloworld-events ACTIVE: Yes
Genera y visualiza un evento
Sube un archivo de texto al bucket de Cloud Storage para generar un evento que se enrute al servicio de Cloud Run. El servicio de Cloud Run registra el evento en los registros del servicio.
Para generar un evento, haz lo siguiente:
Sube un archivo de texto a Cloud Storage:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://PROJECT_ID-bucket/random.txt
La carga genera un evento y el servicio de Cloud Run registra el mensaje del evento.
Sigue estos pasos para ver la entrada de registro:
Filtra las entradas de registro y muestra el resultado en formato JSON:
gcloud logging read "resource.labels.service_name=helloworld-events AND textPayload:random.txt" --format=json
Busca una entrada de registro similar a lo siguiente:
"textPayload": "Detected change in Cloud Storage bucket: objects/random.txt"
Los registros pueden tardar un poco en aparecer. Si no los ves de inmediato, vuelve a revisar en un minuto.