En este tutorial se explica cómo desplegar una aplicación en contenedores mediante un servicio de Cloud Run autenticado que recibe eventos a través de Eventarc.
Si especificas filtros para un activador de Eventarc, puedes configurar el enrutamiento de eventos, incluida la fuente y el destino de los eventos. En este caso, una actualización de un segmento de Cloud Storage activa el evento y se envía una solicitud a tu servicio de Cloud Run en forma de solicitud HTTP.
Crear 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
Sustituye REPOSITORY
por un nombre único para el repositorio.
Crea un segmento de Cloud Storage
Crea un segmento de Cloud Storage que se usará como fuente de eventos:
gcloud storage buckets create gs://PROJECT_ID-bucket/ --location=us-central1
Una vez que se haya creado el origen del evento, puedes desplegar el servicio receptor de eventos en Cloud Run.
Desplegar un receptor de eventos en Cloud Run
Despliega un servicio de Cloud Run que recibe y registra eventos.
Clona el repositorio de GitHub:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
C#
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Cambia al directorio que contiene el código de ejemplo 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/
Crea el contenedor del 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
Despliega la imagen de contenedor en Cloud Run:
gcloud run deploy ${SERVICE_NAME} \ --image $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1
En la petición ¿Permitir acceso público a helloworld-events (s/N)?, responde
n
para indicar que no.
Cuando veas la URL del servicio de Cloud Run, el despliegue se habrá completado.
Crear un activador de Eventarc
El activador de Eventarc envía eventos del segmento de Cloud Storage al servicio de Cloud Run helloworld-events
. El servicio requiere autenticación y el evento debe activarlo una entidad que tenga una cuenta de servicio con los roles y permisos de gestión de identidades y accesos necesarios para usar el recurso.
Crea un activador que filtre 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
De esta forma, se crea un activador llamado
helloworld-events
.Ten en cuenta que, cuando crees un activador de Eventarc por primera vez en un proyecto de Google Cloud , puede haber un retraso en el aprovisionamiento del agente de servicio de Eventarc. Este problema suele resolverse intentando crear el activador de nuevo. Para obtener más información, consulta Errores de permiso denegado.
Confirma que el activador se ha creado correctamente. Ten en cuenta que, aunque el activador se crea inmediatamente, puede tardar hasta dos minutos en estar totalmente operativo.
gcloud eventarc triggers list --location=${REGION}
La salida debería ser similar a la siguiente:
NAME: helloworld-events TYPE: google.cloud.storage.object.v1.finalized DESTINATION: Cloud Run service: helloworld-events ACTIVE: Yes
Generar y ver un evento
Sube un archivo de texto al segmento 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 de servicio.
Para generar un evento, sigue estos pasos:
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 subida genera un evento y el servicio de Cloud Run registra el mensaje del evento.
Para ver la entrada del registro, sigue estos pasos:
Filtra las entradas de registro y devuelve 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 la siguiente:
"textPayload": "Detected change in Cloud Storage bucket: objects/random.txt"
Puede que los registros tarden unos instantes en aparecer. Si no los ves inmediatamente, vuelve a comprobarlo al cabo de un minuto.