Usar Eventarc para recibir eventos de Cloud Storage

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.

  1. 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.

  2. 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/
  3. 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
  4. Despliega la imagen de contenedor en Cloud Run:

    gcloud run deploy ${SERVICE_NAME} \
        --image $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1
  5. 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.

  1. 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[email protected]

    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.

  2. 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.

  1. 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.

  2. Para ver la entrada del registro, sigue estos pasos:

    1. 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
      
    2. 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.