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 objetos nuevos y actualizados desde tu contenedor de Azure a Cloud Storage. No se detectan las eliminaciones de objetos; si borras un objeto en la fuente, no se borrará el objeto asociado en el bucket de destino.

Las transferencias basadas en 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 tu 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 reciba notificaciones de Azure Event Grid.

  1. En Azure Portal, 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 + Cola para crear una cola nueva.
  4. Proporciona un nombre para tu cola (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 la cola de Azure

Configura Azure Event Grid para enviar notificaciones de eventos de almacenamiento de BLOB a la cola de Azure que creaste.

  1. En Azure Portal, navega a la cuenta de almacenamiento que contiene el contenedor de almacenamiento de BLOB que deseas supervisar.
  2. En el menú de navegación de la izquierda, en Servicio de BLOB, selecciona Eventos.
  3. Haz clic en + Suscripción de eventos.
  4. Configura la suscripción de eventos:

    • Detalles de la suscripción de eventos:
      • Proporciona un Nombre de la suscripción de eventos (p.ej., 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:
        • Fecha de creación
        • Creación del directorio
        • Cambio de nombre del BLOB
        • Cambio de nombre del directorio
        • Cambio de nivel de BLOB
    • Detalles del extremo:
      • Tipo de extremo: Selecciona Cola de almacenamiento.
      • Haz clic en Seleccionar un extremo y, luego, selecciona la cola de Azure que creaste antes.
    • Filtros:

      • Haz clic en Habilitar el filtrado de asunto.
      • Agrega lo siguiente como el 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 almacenamiento de BLOB.

      • (Opcional) Para filtrar eventos de BLOB 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 cola
  • Permisos permitidos: Leer, enumerar y procesar

Identidad federada

Sigue las instrucciones para autenticarte con una 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 la función 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 una transmisión de eventos

Una vez que se configuren tu cola de Azure y las notificaciones de eventos, 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. En la página de detalles del trabajo, se muestra una operación por hora y se incluyen detalles sobre los datos transferidos para cada trabajo.

Google Cloud Consola de

  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 Basado en eventos.

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

  6. Completa los pasos restantes como de costumbre para crear un trabajo de transferencia, incluidos los detalles de la fuente y el 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 se detenga de forma manual.

Google Cloud CLI

Para crear un trabajo de transferencia basado en eventos con la gcloud CLI, 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: El nombre de tu cuenta de Azure Blob Storage y el nombre del contenedor.
  • DESTINATION_BUCKET: Tu bucket de destino de Cloud Storage.
  • SOURCE_CREDS_FILE: 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: El nombre de tu cola de Azure (p.ej., my-queue).
  • EVENT_STREAM_STARTS: Cuándo comenzar a escuchar 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: Cuándo dejar de escuchar eventos. Si no se configura, el trabajo continúa hasta que se detiene de forma manual.

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

API de REST

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

{
  "description": "Event-driven Azure to Cloud Storage transfer",
  "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: La hora desde la que se comienza a escuchar eventos en el formato YYYY-MM-DDTHH:MM:SSZ. Si no se especifica, el objeto de escucha comienza de inmediato.
  • event_stream_expiration_time: La 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.