Recibe eventos directos desde Cloud Storage (CLI de gcloud)

En esta guía de inicio rápido, se muestra cómo recibir eventos directos de Cloud Storage (sin usar los registros de auditoría de Cloud) en un servicio de Cloud Run no autenticado mediante Eventarc.

Puedes configurar la activación de notificaciones en respuesta a varios eventos dentro de un bucket de Cloud Storage, como la creación, la eliminación, el archivado y las actualizaciones de metadatos de objetos. Si deseas obtener más información, consulta Crea un activador para enrutar los eventos de Cloud Storage a Cloud Run.

En esta guía de inicio rápido, podrás hacer lo siguiente:

  1. Crear un bucket de Cloud Storage para que sea la fuente del evento

  2. Implementar un servicio de receptor de eventos en Cloud Run

  3. Crear un activador de Eventarc.

  4. Generar un evento mediante la carga de un archivo al bucket de Cloud Storage y visualizarlo en los registros de Cloud Run.

Antes de comenzar

Es posible que las restricciones de seguridad que define tu organización no te permitan completar los siguientes pasos. Para obtener información sobre la solución de problemas, consulta Desarrollar aplicaciones en un entorno de Google Cloud restringido.

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. Instala Google Cloud CLI.
  3. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  4. Crea o selecciona un proyecto de Google Cloud.

    • Crea un proyecto de Google Cloud:

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el proyecto de Google Cloud que estás creando.

    • Selecciona el proyecto de Google Cloud que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre del proyecto de Google Cloud.

  5. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  6. Instala Google Cloud CLI.
  7. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  8. Crea o selecciona un proyecto de Google Cloud.

    • Crea un proyecto de Google Cloud:

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el proyecto de Google Cloud que estás creando.

    • Selecciona el proyecto de Google Cloud que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre del proyecto de Google Cloud.

  9. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  10. Habilita las API de Cloud Build, Cloud Run, Cloud Storage, Eventarc y Pub/Sub.

    gcloud services enable \
    cloudbuild.googleapis.com \
    eventarc.googleapis.com \
    pubsub.googleapis.com \
    run.googleapis.com \
    storage.googleapis.com
  11. Actualiza los componentes de gcloud:
    gcloud components update
  12. Accede con tu cuenta:
    gcloud auth login
  13. Establece las variables de configuración que se usan en esta guía de inicio rápido:
    gcloud config set run/region us-central1
    gcloud config set run/platform managed
    gcloud config set eventarc/location us-central1
  14. Si eres el creador del proyecto, se te otorga el rol de propietario básico (roles/owner). De forma predeterminada, este rol de Identity and Access Management (IAM) incluye los permisos necesarios para obtener acceso completo a la mayoría de los recursos de Google Cloud, pero puedes omitir este paso.

    Si no eres el creador del proyecto, se deben otorgar los permisos necesarios en el proyecto a la principal correspondiente. Por ejemplo, una principal puede ser una Cuenta de Google (para usuarios finales) o una cuenta de servicio (para aplicaciones y cargas de trabajo de procesamiento). Para obtener más información, consulta la página Roles y permisos para el destino del evento.

    Permisos necesarios

    Si quieres obtener los permisos que necesitas para completar este instructivo, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:

    Si quieres obtener más información para otorgar roles, consulta Administra el acceso.

    También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.

  15. La cuenta de servicio predeterminada de Compute Engine se crea automáticamente después de habilitar o usar un servicio de Google Cloud que use Compute Engine.

    Si deseas realizar pruebas, puedes conectar esta cuenta de servicio a un activador de Eventarc para representar la identidad del activador. Ten en cuenta el formato de correo electrónico que se usará cuando se cree un activador:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

    Reemplaza PROJECT_NUMBER por el número de proyecto de Google Cloud. Para encontrar el número del proyecto, ve a la página de bienvenida de la consola de Google Cloud o ejecuta el siguiente comando:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'

    La cuenta de servicio de Compute Engine recibe automáticamente la función de editor básica (roles/editor) en tu proyecto. Sin embargo, si se inhabilitaron las asignaciones de funciones automáticas, consulta las instrucciones de Funciones y permisos aplicables para crear una cuenta de servicio nueva y otorgarle las funciones necesarias.

  16. Otorga el rol de receptor de eventos de Eventarc (roles/eventarc.eventReceiver) en el proyecto a la cuenta de servicio predeterminada de Compute Engine para que el activador de Eventarc pueda recibir eventos de proveedores de eventos.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/eventarc.eventReceiver
  17. Antes de crear un activador para eventos directos desde Cloud Storage, otorga el rol de publicador de Pub/Sub (roles/pubsub.publisher) al agente de servicio de Cloud Storage, una Cuenta de servicio administrada:

    SERVICE_ACCOUNT="$(gsutil kms serviceaccount -p PROJECT_ID)"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:${SERVICE_ACCOUNT}" \
        --role='roles/pubsub.publisher'
    
  18. Si habilitaste el agente de servicio de Cloud Pub/Sub el 8 de abril de 2021 o antes de esa fecha, para admitir las solicitudes de envío de Pub/Sub autenticadas, otorga la función Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator) a la cuenta de servicio administrada por Google. De lo contrario, este rol se otorga de forma predeterminada:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
  19. Descarga e instala la herramienta de administración de código fuente de Git.

Cree un bucket de Cloud Storage

Crea un bucket de Cloud Storage para usar como fuente del evento:
gsutil mb -l us-central1 gs://PROJECT_ID-bucket/

Después de crear la fuente del evento, puedes implementar el servicio del receptor de eventos en Cloud Run.

Implementa el servicio del receptor de eventos en Cloud Run

Implementa un servicio de Cloud Run que reciba y registre eventos.

  1. Clona el repositorio y, luego, cambia al directorio que contiene el código de muestra de Cloud Run:

    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
    
  2. Compila el contenedor y súbelo a Cloud Build:

     gcloud builds submit --tag gcr.io/PROJECT_ID/helloworld-events
    
  3. Implementa la imagen del contenedor en Cloud Run:

     gcloud run deploy helloworld-events \
         --image gcr.io/PROJECT_ID/helloworld-events \
         --allow-unauthenticated
    

    Cuando la implementación se realiza de manera correcta, la línea de comandos muestra la URL del servicio.

    Ahora que implementaste el servicio del receptor de eventos llamado helloworld-events en Cloud Run, ya puedes configurar tu activador.

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.

  1. Crea un activador que filtre los eventos de Cloud Storage y que use la cuenta de servicio predeterminada de Compute Engine:

     gcloud eventarc triggers create storage-events-trigger \
         --destination-run-service=helloworld-events \
         --destination-run-region=us-central1 \
         --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 storage-events-trigger.

    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 permiso denegado.

  2. Para confirmar que storage-events-trigger se creó de forma correcta, ejecuta el siguiente comando:

     gcloud eventarc triggers list --location=us-central1
    

    El resultado es similar a este:

     NAME                    TYPE                                      DESTINATION_RUN_SERVICE  DESTINATION_RUN_PATH  ACTIVE
     storage-events-trigger  google.cloud.storage.object.v1.finalized  helloworld-events                              Yes
    

Genera y visualiza un evento

  1. Para generar un evento, sube un archivo de texto a Cloud Storage:

     echo "Hello World" > random.txt
     gsutil 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.

  2. Para ver la entrada de registro, filtra las entradas de registro y muestra el resultado en formato JSON:

    gcloud logging read 'textPayload: "Detected change in Cloud Storage bucket"'
    
  3. Busca una entrada de registro similar a la que se muestra a continuación:

    "textPayload": "2021/08/09 19:04:25 Detected change in Cloud Storage bucket: objects/random.txt"
    

¡Felicitaciones! Implementaste un servicio de receptor de eventos en Cloud Run de forma correcta, creaste un activador de Eventarc, generaste un evento desde Cloud Storage y lo viste en los registros de Cloud Run.

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que se usaron en esta página, borra el proyecto de Cloud que tiene los recursos.

Si bien Cloud Run no cobra cuando el servicio no se usa, es posible que se te cobre por almacenar la imagen del contenedor en Container Registry, almacenar archivos en el bucket de Cloud Storage y los recursos de Eventarc

Puede hacer lo siguiente:

  1. Borrar tu imagen.

  2. Borrar tu bucket de almacenamiento.

  3. Borrar el activador de Eventarc.

Como alternativa, puedes borrar el proyecto de Cloud para evitar que se generen cargos. Si borras tu proyecto de Google Cloud, se dejan de facturar todos los recursos que usaste en ese proyecto.

Borra un proyecto de Google Cloud:

gcloud projects delete PROJECT_ID

¿Qué sigue?