Transferencias basadas en eventos desde Azure Blob Storage o Data Lake Storage Gen2

En este documento, se describe cómo configurar transferencias de datos basadas en eventos desde Azure Blob Storage o Data Lake Storage Gen2 a Cloud Storage con el Servicio de transferencia de almacenamiento. Las transferencias basadas en eventos transfieren automáticamente los objetos nuevos y actualizados desde tu contenedor de Azure a Cloud Storage. No se detectan las eliminaciones de objetos; si se borra un objeto en el origen, no se borra el objeto asociado en el bucket de destino.

Las transferencias controladas por eventos usan Azure Event Grid y Azure Storage Queues para notificar al Servicio de transferencia de almacenamiento sobre los cambios en tu contenedor de Azure. Cuando se produce un evento, como la creación de un blob nuevo en el contenedor de origen, Azure Event Grid envía una notificación a una cola de Azure Storage configurada. El Servicio de transferencia de almacenamiento supervisa continuamente esta cola y, luego, inicia una transferencia según los eventos recibidos.

Antes de comenzar

Sigue las instrucciones para otorgar los permisos necesarios en tu bucket de destino de Cloud Storage:

Crea una cola de Azure Storage

Crea una cola de Azure Storage que recibirá notificaciones de Azure Event Grid.

  1. En el portal de Azure, navega a tu cuenta de Azure Storage.
  2. En el menú de navegación de la izquierda, en Almacenamiento de datos, selecciona Colas.
  3. Haz clic en + Queue para crear una cola nueva.
  4. Proporciona un nombre para tu fila (p.ej., transfer-notifications) y haz clic en Aceptar.
  5. Una vez creada, recupera la dirección de la cola de Azure. Por lo general, la dirección tendrá el siguiente formato: AZURE_STORAGE_ACCOUNT_NAME.queue.core.windows.net/AZURE_QUEUE_NAME.

Habilita las notificaciones de eventos de Azure Blob Storage para Azure Queue

Configura Azure Event Grid para enviar notificaciones de eventos de Blob Storage a la cola de Azure que creaste.

  1. En el portal de Azure, navega a la cuenta de almacenamiento que contiene el contenedor de Blob Storage que quieres supervisar.
  2. En el menú de navegación de la izquierda, en Blob service, selecciona Events.
  3. Haz clic en + Suscripción a eventos.
  4. Configura la suscripción al evento:

    • Detalles de la suscripción a eventos:
      • Proporciona un Nombre de suscripción al evento (por ejemplo, blob-transfer-events).
      • Proporciona un Nombre del tema del sistema (p.ej., my-blob-events-topic).
    • Tipos de eventos:
      • Selecciona los siguientes tipos de eventos:
        • Se creó el BLOB
        • Se creó el directorio
        • Se cambió el nombre del BLOB
        • Se cambió el nombre del directorio
        • Se cambió el nivel de BLOB
    • Detalles del extremo:
      • Tipo de extremo: Selecciona Storage Queue.
      • Haz clic en Seleccionar un extremo y, luego, selecciona la cola de Azure que creaste anteriormente.
    • Filtros:

      • Haz clic en Habilitar el filtrado de asuntos.
      • Agrega lo siguiente como filtro El asunto comienza con para limitar las notificaciones a un contenedor específico:

        /blobServices/default/containers/AZURE_CONTAINER_NAME/

        Reemplaza AZURE_CONTAINER_NAME por el nombre de tu contenedor de Blob Storage.

      • (Opcional) Para filtrar eventos de blobs con un prefijo específico dentro del contenedor, usa lo siguiente:

        /blobServices/default/containers/AZURE_CONTAINER_NAME/blobs/BLOB_PREFIX

  5. Haz clic en Crear.

Configura el acceso a la cola de Azure

El Servicio de transferencia de almacenamiento necesita permiso para acceder a la cola de Azure y leer sus mensajes. Puedes autenticarte con un token de firma de acceso compartido (SAS) o una identidad federada.

Token de SAS

Sigue las instrucciones para autenticarte con un token de SAS y, luego, incluye los siguientes elementos:

  • Servicios permitidos: Blob y Queue
  • Permisos permitidos: Leer, Lista y Proceso

Identidad federada

Sigue las instrucciones para autenticarte con la identidad federada. Además de otorgar acceso a la aplicación a tu contenedor de Azure Storage, también debes otorgarle acceso a la cola de Azure. Para ello, agrega el rol de Procesador de mensajes de datos de la cola de almacenamiento a la aplicación para la cola de Azure.

Crea un trabajo de transferencia con un flujo de eventos

Una vez que configures las notificaciones de eventos y la cola de Azure, crea tu trabajo del Servicio de transferencia de almacenamiento con una transmisión de eventos.

Una vez creado, el trabajo de transferencia comienza a ejecutarse y un objeto de escucha de eventos espera notificaciones en la cola de Azure. La página de detalles del trabajo muestra una operación por hora y, además, incluye detalles sobre los datos transferidos para cada trabajo.

Consola de Google Cloud

  1. Ve a la página Crear trabajo de transferencia en la Google Cloud consola.

    Ir a Crear trabajo de transferencia

  2. En Tipo de fuente, selecciona Azure Blob Storage o Data Lake Storage Gen2.

  3. En Tipo de destino, selecciona Google Cloud Storage.

  4. En Modo de programación, selecciona Controlado por eventos.

  5. En el campo Nombre del flujo de eventos, ingresa la dirección de tu cola de Azure.

  6. Completa los pasos restantes como lo harías normalmente para crear un trabajo de transferencia, incluidos los detalles de origen y destino, y la autenticación.

    De manera opcional, ingresa una hora de inicio y finalización para la transferencia. Si no especificas una hora, la transferencia comenzará de inmediato y se ejecutará hasta que la detengas manualmente.

Google Cloud CLI

Para crear un trabajo de transferencia basado en eventos con la CLI de gcloud, usa el comando gcloud transfer jobs create con la marca --event-stream-name:

gcloud transfer jobs create \
  https://AZURE_STORAGE_ACCOUNT_NAME.blob.core.windows.net/AZURE_CONTAINER_NAME \
  gs://DESTINATION_BUCKET \
  --source-creds-file=SOURCE_CREDS_FILE \
  --event-stream-name=AZURE_STORAGE_ACCOUNT_NAME.queue.core.windows.net/AZURE_QUEUE_NAME \
  --event-stream-starts=EVENT_STREAM_STARTS \
  --event-stream-expires=EVENT_STREAM_EXPIRES

Reemplaza los marcadores de posición por tus valores reales:

  • AZURE_STORAGE_ACCOUNT_NAME y AZURE_CONTAINER_NAME: Tu nombre de cuenta y nombre de contenedor de Azure Blob Storage.
  • DESTINATION_BUCKET: Tu bucket de destino de Cloud Storage.
  • SOURCE_CREDS_FILE: Es la ruta de acceso relativa a un archivo local en tu máquina que contiene tu token de SAS o la configuración de identidad federada.
  • AZURE_QUEUE_NAME: Es el nombre de tu cola de Azure.
  • EVENT_STREAM_STARTS: Fecha y hora en que se comienza a escuchar los eventos, con el formato de fecha y hora %Y-%m-%dT%H:%M:%S%z (p.ej., 2020-04-12T06:42:12+04:00). Si no se configura, el trabajo comienza a ejecutarse y a escuchar eventos cuando se envía correctamente el comando de creación del trabajo.
  • EVENT_STREAM_EXPIRES: Indica cuándo dejar de escuchar eventos. Si no se configura, el trabajo continúa hasta que se detiene manualmente.

Para obtener una lista completa de los campos admitidos, consulta la referencia de gcloud transfer jobs create.

API de REST

Define un trabajo de transferencia basado en eventos con el proto de TransferJob:

{
  "description": "Test Azure to GCS transfer via event stream.",
  "project_id": "PROJECT_ID",
  "transfer_spec": {
    "azure_blob_storage_data_source": {
      "storage_account": "AZURE_STORAGE_ACCOUNT_NAME",
      "container": "AZURE_CONTAINER_NAME",
      "federated_identity_config": {
        "client_id": "CLIENT_ID",
        "tenant_id": "TENANT_ID"
      }
    },
    "gcs_data_sink": {
      "bucket_name": "DESTINATION_BUCKET"
    },
    "object_conditions": {
      // optional object conditions (include_prefixes, etc)
    },
    "transfer_options": {}
  },
  "event_stream": {
    "name": "AZURE_STORAGE_ACCOUNT_NAME.queue.core.windows.net/AZURE_QUEUE_NAME",
    "event_stream_start_time": EVENT_STREAM_START_TIME,
    "event_stream_expiration_time": EVENT_STREAM_EXPIRATION_TIME
  },
  "status": "ENABLED"
}

Los campos de hora de inicio y vencimiento son opcionales:

  • event_stream_start_time: Es la fecha y hora a partir de las cuales se comenzará a escuchar los eventos en el formato YYYY-MM-DDTHH:MM:SSZ. Si no se especifica, el objeto de escucha comienza de inmediato.
  • event_stream_expiration_time: Es la fecha y hora en la que vence el objeto de escucha de la transmisión de eventos en el formato YYYY-MM-DDTHH:MM:SSZ. Si no se especifica, el objeto de escucha continúa hasta que se inhabilita o borra el trabajo de transferencia.