Tutorial: Migrar datos capturados de Event Hubs desde Azure Storage a Azure Synapse Analytics usando Azure Event Grid y Azure Functions

En este tutorial, migrará los datos capturados de Event Hubs de Azure Blob Storage a Azure Synapse Analytics, específicamente un grupo de SQL dedicado, usando Azure Event Grid y Azure Functions.

Información general de la aplicación

En este diagrama se muestra el flujo de trabajo de la solución que se compila en este tutorial:

  1. Los datos que se envían a un centro de eventos de Azure se capturan en una instancia de Azure Blob Storage.
  2. Una vez que se completa la captura de los datos, se genera un evento y se envía a Azure Event Grid.
  3. Azure Event Grid reenvía estos datos del evento a una aplicación de funciones de Azure.
  4. La aplicación de función usa la dirección URL del blob de los datos del evento para recuperar el blob desde el almacenamiento.
  5. La aplicación de funciones migra los datos del blob a una instancia de Azure Synapse Analytics.

En este artículo, podrá llevar a cabo estos pasos:

  • Implementación de la infraestructura necesaria para el tutorial
  • Publicar código en una aplicación de Functions
  • Creación de una suscripción de Event Grid
  • Transmisión de datos de ejemplo a una instancia de Event Hubs
  • Comprobación de los datos capturados en Azure Synapse Analytics

Requisitos previos

Para realizar este tutorial, necesitará lo siguiente:

  • En este artículo se da por supuesto que está familiarizado con Event Grid y Event Hubs (especialmente con la característica Captura). Si no está familiarizado con Azure Event Grid, consulte Introducción a Azure Event Grid. Para obtener información sobre la característica Captura de Event Hubs, consulte Capturar eventos a través de Azure Event Hubs en Azure Blob Storage o Azure Data Lake Storage.
  • Suscripción a Azure. Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
  • Visual Studio con cargas de trabajo para: desarrollo de escritorio de .NET, desarrollo de Azure, desarrollo web y de ASP.NET, desarrollo de Node.js y desarrollo de Python.
  • Descargue el proyecto de ejemplo EventHubsCaptureEventGridDemo en su equipo.
    • WindTurbineDataGenerator: un publicador simple que envía datos de turbina eólica de ejemplo a un centro de eventos con la característica Capture habilitada.
    • FunctionDWDumper: una función de Azure que recibe una notificación de Azure Event Grid cuando se captura un archivo Avro en el blob de Azure Storage. Recibe la ruta de acceso del identificador URI del blob, lee su contenido y envía estos datos a Azure Synapse Analytics (grupo de SQL dedicado).

Implementar la infraestructura

En este paso, implementará la infraestructura requerida con una plantilla de Resource Manager. Cuando implemente la plantilla, se crearán estos recursos:

  • Un centro de eventos con la característica Captura habilitada.
  • Una cuenta de almacenamiento para los archivos capturados.
  • Un plan de App Service para hospedar la aplicación de función
  • Una aplicación de función para procesar el evento
  • Un servidor SQL Server para hospedar el almacenamiento de datos
  • Azure Synapse Analytics (grupo de SQL dedicado) para el almacenamiento de los datos migrados

Uso de la CLI de Azure para implementar la infraestructura

  1. Inicie sesión en Azure Portal.

  2. Seleccione el botón Cloud Shell que se encuentra en la parte superior.

    Captura de pantalla de Azure Portal en la que se muestra la selección del botón Cloud Shell.

  3. Verá Cloud Shell abierto en la parte inferior del explorador.

    1. Si usa Cloud Shell por primera vez:
      1. Si ve una opción para elegir entre Bash y PowerShell, seleccione Bash.

      2. Cree una cuenta de almacenamiento seleccionando Crear almacenamiento. Azure Cloud Shell requiere una cuenta de Azure Storage donde almacenar algunos archivos.

        Captura de pantalla que muestra la creación de almacenamiento para Cloud Shell.

      3. Espere hasta que se inicialice Cloud Shell.

        Captura de pantalla que muestra Cloud Shell inicializado.

  4. En Cloud Shell, seleccione Bash si aún no está seleccionado, como se muestra en la imagen anterior.

  5. Para crear un grupo de recursos de Azure, ejecute el comando de la CLI siguiente:

    1. Copie y pegue este comando en la ventana Cloud Shell. Cambie el nombre del grupo de recursos y su ubicación si lo desea.

      az group create -l eastus -n rgDataMigration
      
    2. Presione ENTRAR.

      Este es un ejemplo:

      user@Azure:~$ az group create -l eastus -n rgDataMigration
      {
        "id": "/subscriptions/00000000-0000-0000-0000-0000000000000/resourceGroups/rgDataMigration",
        "location": "eastus",
        "managedBy": null,
        "name": "rgDataMigration",
        "properties": {
          "provisioningState": "Succeeded"
        },
        "tags": null
      }
      
  6. Para implementar todos los recursos mencionados en la sección anterior (centro de eventos, cuenta de almacenamiento, aplicación de funciones, instancia de Azure Synapse Analytics), ejecute el siguiente comando de la CLI:

    1. Copie y pegue el comando en la ventana Cloud Shell. También puede copiar y pegar en el editor que prefiera, establecer valores y luego copiar el comando en Cloud Shell. Si ve un error debido a un nombre de recurso de Azure, elimine el grupo de recursos, corrija el nombre y vuelva a intentar el comando.

      Importante

      Especifique valores para las entidades siguientes antes de ejecutar el comando:

      • Nombre del grupo de recursos que creó anteriormente.
      • Nombre del espacio de nombres del centro de eventos.
      • Nombre del centro de eventos. Puede dejar el valor sin modificaciones (hubdatamigration).
      • Nombre del servidor SQL Server.
      • Nombre del usuario y la contraseña de SQL.
      • Nombre de la base de datos.
      • Nombre de la cuenta de almacenamiento.
      • Nombre de la aplicación de función.
      az deployment group create \
          --resource-group rgDataMigration \
          --template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/event-grid/EventHubsDataMigration.json \
          --parameters eventHubNamespaceName=<event-hub-namespace> eventHubName=hubdatamigration sqlServerName=<sql-server-name> sqlServerUserName=<user-name> sqlServerPassword=<password> sqlServerDatabaseName=<database-name> storageName=<unique-storage-name> functionAppName=<app-name>
      
    2. Presione ENTRAR en la ventana Cloud Shell para ejecutar el comando. Este proceso puede tardar un poco debido a que se están creando varios recursos. En el resultado del comando, asegúrese de que no se produjo ningún error.

  7. Para cerrar Cloud Shell, seleccione el botón Cloud Shell en el portal (o) el botón X que se encuentra en la esquina superior derecha de la ventana de Cloud Shell.

Comprobación de la creación de los recursos

  1. En Azure Portal, seleccione Grupos de recursos en el menú de la izquierda.

  2. Para filtrar la lista de grupos de recursos, escriba el nombre del grupo de recursos en el cuadro de búsqueda.

  3. Seleccione el grupo de recursos en la lista.

    Captura de pantalla que muestra la selección del grupo de recursos.

  4. Confirme que ve los recursos siguientes en el grupo de recursos:

    Captura de pantalla que muestra los recursos del grupo de recursos.

Creación de una tabla en Azure Synapse Analytics

En esta sección va a crear una tabla en el grupo de SQL dedicado que creó anteriormente.

  1. En la lista de recursos del grupo de recursos, seleccione el grupo de SQL dedicado.

  2. En la página Dedicated SQL pool (Grupo de SQL dedicado), en la sección Tareas comunes del menú de la izquierda, seleccione Editor de consultas (versión preliminar) .

    Captura de pantalla que muestra la selección de Query Editor en una página de grupo de SQL dedicado en Azure Portal.

  3. Escriba el nombre de usuario y la contraseña del servidor SQL Server y seleccione Aceptar. Si ve un mensaje sobre cómo permitir que el cliente acceda a SQL Server, seleccione IP de la lista de permitidos <su dirección IP> en el servidor <su servidor SQL Server> y, a continuación, seleccione Aceptar.

  4. En la ventana de consulta, copie y ejecute el script SQL siguiente:

    CREATE TABLE [dbo].[Fact_WindTurbineMetrics] (
        [DeviceId] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [MeasureTime] datetime NULL,
        [GeneratedPower] float NULL,
        [WindSpeed] float NULL,
        [TurbineSpeed] float NULL
    )
    WITH (CLUSTERED COLUMNSTORE INDEX, DISTRIBUTION = ROUND_ROBIN);
    

    Captura de pantalla que muestra el editor de consultas.

  5. Mantenga abierta esta pestaña o ventana para poder comprobar que los datos se crean al final del tutorial.

Publicar la aplicación de Azure Functions

En primer lugar, obtenga el perfil de publicación de la aplicación de Functions desde Azure Portal. Después, use el perfil de publicación para publicar el proyecto o la aplicación de Azure Functions desde Visual Studio.

Obtención del perfil de publicación

  1. En la página Grupo de recursos, seleccione la aplicación de Azure Functions en la lista de recursos.

    Captura de pantalla que muestra las selección de la aplicación de funciones en la lista de recursos de un grupo de recursos.

  2. En la página Aplicación de Functions de la aplicación, seleccione Obtener perfil de publicación en la barra de comandos.

    Captura de pantalla que muestra las selección del botón **Obtener perfil de publicación** en la barra de comandos de la página de aplicaciones de funciones.

  3. Descargue y guarde el archivo en la subcarpeta FunctionEGDDumper de la carpeta EventHubsCaptureEventGridDemo.

Uso del perfil de publicación para publicar la aplicación de Functions

  1. Inicie Visual Studio.

  2. Abra la solución EventHubsCaptureEventGridDemo.sln que descargó de GitHub como parte de los requisitos previos. Se encuentra en la carpeta /samples/e2e/EventHubsCaptureEventGridDemo.

  3. En el Explorador de soluciones, haga clic con el botón derecho en el proyecto FunctionEGDWDumper y seleccione Publicar.

  4. En la pantalla siguiente, seleccione Iniciar o Agregar un perfil de publicación.

  5. En el cuadro de diálogo Publicar, seleccione Importar perfil en Destino y después Siguiente.

    Captura de pantalla que muestra la selección **Importar perfil** en el cuadro de diálogo **Publicar**.

  6. En la pestaña Importar perfil, seleccione el archivo de configuración de publicación que ha guardado anteriormente en la carpeta FunctionEGDWDumper y después seleccione Finalizar.

  7. Cuando Visual Studio haya configurado el perfil, seleccione Publicar. Confirme que la publicación se ha realizado correctamente.

  8. En el explorador web que tiene la página Función de Azure abierta, seleccione Funciones en el panel central. Confirme que la función EventGridTriggerMigrateData aparece en la lista. Si no la ve, intente publicar de nuevo desde Visual Studio y, a continuación, actualice la página en el portal.

    Captura de pantalla que muestra la confirmación de la creación de la función.

Después de publicar la función, estará listo para suscribirse al evento.

Nos suscribiremos al evento.

  1. En una pestaña o ventana nueva de un explorador web, inicie sesión en Azure Portal.

  2. En Azure Portal, seleccione Grupos de recursos en el menú de la izquierda.

  3. Para filtrar la lista de grupos de recursos, escriba el nombre del grupo de recursos en el cuadro de búsqueda.

  4. Seleccione el grupo de recursos en la lista.

  5. Seleccione el espacio de nombres de Event Hubs en la lista de recursos.

  6. En la página Espacio de nombres de Event Hubs, seleccione Eventos en el menú de la izquierda y, a continuación, seleccione + Suscripción de eventos en la barra de herramientas.

    Captura de pantalla de la página Eventos de un espacio de nombres de Event Hubs con el vínculo Agregar suscripción de evento seleccionado.

  7. En la página Crear suscripción de eventos, siga estos pasos:

    1. Escriba un nombre para la suscripción a eventos.

    2. Escriba un nombre para el tema del sistema. Un tema del sistema proporciona un punto de conexión para que el remitente envíe eventos. Para más información, vea Temas del sistema.

    3. En Tipo de punto de conexión, seleccione Función de Azure.

    4. En Punto de conexión, seleccione el vínculo.

    5. En la página Seleccionar la función de Azure, siga estos pasos si no se rellenan automáticamente.

      1. Seleccione la suscripción de Azure que tenga la función de Azure.
      2. Seleccione el grupo de recursos para la función.
      3. Seleccione la aplicación de funciones.
      4. Seleccione la ranura de implementación.
      5. Seleccione la función EventGridTriggerMigrateData.
    6. En la página Seleccionar la función de Azure, seleccione Confirmar selección.

    7. De nuevo, en la página Crear suscripción de eventos, seleccione Crear.

      Captura de pantalla de la página Crear una suscripción de evento.

  8. Compruebe que se haya creado la suscripción a eventos. Cambie a la pestaña Suscripciones a eventos de la página Eventos del espacio de nombres de Event Hubs.

    Captura de pantalla que muestra la pestaña Suscripciones de eventos en la página Eventos.

Ejecutar la aplicación para generar datos

Ya ha terminado de configurar el centro de eventos, el grupo de SQL dedicado (anteriormente SQL Data Warehouse), la aplicación de funciones de Azure y la suscripción a eventos. Hay que configurar algunos valores antes de ejecutar una aplicación que genere los datos del centro de eventos.

  1. En Azure Portal, vaya al grupo de recursos como lo hizo anteriormente.

  2. Seleccione el espacio de nombres de Event Hubs.

  3. En la página Espacio de nombres de Event Hubs, seleccione Directivas de acceso compartido en el menú de la izquierda.

  4. Seleccione RootManageSharedAccessKey en la lista de directivas.

    Captura de pantalla que muestra la página de directivas de acceso compartido para un espacio de nombres de Event Hubs.

  5. Seleccione el botón Copiar que está junto al cuadro de texto Cadena de conexión: clave principal.

  6. Vuelva a la solución de Visual Studio.

  7. Haga clic con el botón derecho en el proyecto WindTurbineDataGenerator y seleccione Establecer como proyecto de inicio.

  8. En el proyecto WindTurbineDataGenerator, abra program.cs.

  9. Reemplace <EVENT HUBS NAMESPACE CONNECTION STRING> por la cadena de conexión que copió en el portal.

  10. Si ha usado un nombre para el centro de eventos distinto de hubdatamigration, reemplace <EVENT HUB NAME> por el nombre del centro de eventos.

    private const string EventHubConnectionString = "Endpoint=sb://demomigrationnamespace.servicebus.windows.net/...";
    private const string EventHubName = "hubdatamigration";
    
  11. Compile la solución. Ejecute la aplicación WindTurbineGenerator.exe.

  12. Después de un par de minutos, en la otra pestaña del explorador donde tiene abierta la ventana de consulta, consulte la tabla del almacenamiento de datos para obtener los datos migrados.

    select * from [dbo].[Fact_WindTurbineMetrics]
    

    Captura de pantalla con los resultados de la consulta.

Importante

Usamos la cadena de conexión para la autenticación en el espacio de nombres de Azure Event Hubs para simplificar el tutorial. Recomendamos usar la autenticación de Microsoft Entra ID en entornos de producción. Al usar una aplicación, puede habilitar la identidad administrada para la aplicación y asignar a la identidad un rol apropiado (propietario de Azure Event Hubs, emisor de datos de Azure Event Hubs o receptor de datos de Azure Event Hubs) en el espacio de nombres de Event Hubs. Para más información, vea Autorización del acceso a Event Hubs mediante Microsoft Entra ID.

Supervisión de la solución

Esta sección le ayuda a supervisar o solucionar problemas de la solución.

Visualización de datos capturados en la cuenta de almacenamiento

  1. Desplácese hasta el grupo de recursos y seleccione la cuenta de almacenamiento usada para capturar datos de eventos.

  2. En la página Cuenta de almacenamiento, seleccione Explorador de almacenamiento en el menú de la izquierda.

  3. Expanda CONTENEDORES DE BLOBSy seleccione windturbinecapture.

  4. Abra la carpeta con el mismo nombre que el espacio de nombres de Event Hubs en el panel derecho.

  5. Abra la carpeta con el mismo nombre que el centro de eventos (hubdatamigration).

  6. Profundice en las carpetas hasta que vea los archivos AVRO. Este es un ejemplo:

    Captura de pantalla que muestra el archivo capturado en el almacenamiento.

Comprobación de que el desencadenador de Event Grid invocó la función

  1. Desplácese al grupo de recursos y seleccione la aplicación de funciones.

  2. Seleccione la pestaña Funciones en el panel central.

  3. Seleccione la función EventGridTriggerMigrateData de la lista.

  4. En la página Función, seleccione Supervisión en el menú de la izquierda.

  5. Seleccione Configurar para configurar Application Insights para que capture registros de invocación.

  6. Cree un nuevo recurso de Application Insights o use uno existente.

  7. Vuelva a la página Supervisión de la función.

  8. Confirme que la aplicación cliente (WindTurbineDataGenerator) que está enviando los eventos todavía se está ejecutando. Si no es así, ejecute la aplicación.

  9. Espere unos minutos (5 minutos o más) y seleccione el botón Actualizar para ver las invocaciones de función.

    Captura de pantalla que muestra las invocaciones de función.

  10. Seleccione una invocación para ver los detalles.

    Event Grid distribuye datos del evento a los suscriptores. En el ejemplo siguiente se muestran los datos de eventos que se generan cuando el flujo de datos a través de un centro de eventos se captura en un blob. En concreto, observe que la propiedad fileUrl del objeto data apunta al blob en el almacenamiento. La aplicación de función usa esta dirección URL para recuperar el archivo de blob con los datos capturados.

    {
      "topic": "/subscriptions/<AZURE SUBSCRIPTION ID>/resourcegroups/rgDataMigration/providers/Microsoft.EventHub/namespaces/spehubns1207",
      "subject": "hubdatamigration",
      "eventType": "Microsoft.EventHub.CaptureFileCreated",
      "id": "4538f1a5-02d8-4b40-9f20-36301ac976ba",
      "data": {
        "fileUrl": "https://spehubstorage1207.blob.core.windows.net/windturbinecapture/spehubns1207/hubdatamigration/0/2020/12/07/21/49/12.avro",
        "fileType": "AzureBlockBlob",
        "partitionId": "0",
        "sizeInBytes": 473444,
        "eventCount": 2800,
        "firstSequenceNumber": 55500,
        "lastSequenceNumber": 58299,
        "firstEnqueueTime": "2020-12-07T21:49:12.556Z",
        "lastEnqueueTime": "2020-12-07T21:50:11.534Z"
      },
      "dataVersion": "1",
      "metadataVersion": "1",
      "eventTime": "2020-12-07T21:50:12.7065524Z"
    }
    

Comprobación de que los datos están almacenados en el grupo de SQL dedicado

En la pestaña del explorador donde tiene abierta la ventana de consulta, consulte la tabla del grupo de SQL dedicado para obtener los datos migrados.

Captura de pantalla que muestra los resultados finales de la consulta.

Pasos siguientes