Compartir a través de


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. La fecha se migra a un grupo de SQL dedicado mediante 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

  • Conocimientos de Azure Event Grid y Azure Event Hubs, especialmente 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 el desarrollo de escritorio de .NET, desarrollo de Azure, ASP.NET y desarrollo web, desarrollo de Node.js y desarrollo de Python.

  • El proyecto de ejemplo EventHubsCaptureEventGridDemo. El ejemplo incluye:

    • WindTurbineDataGenerator. Publicador sencillo que envía datos de turbina eólica de ejemplo a un centro de eventos con la función de Captura activada.
    • 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 el URI del blob, lee su contenido e inserta estos datos en Azure Synapse Analytics.

Implementar la infraestructura

En esta sección, implemente la infraestructura necesaria con una plantilla de Resource Manager. Cuando implemente la plantilla, se crearán estos recursos:

  • Centro de eventos con la característica De captura habilitada
  • 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.

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

    Captura de pantalla que muestra la inicialización de Cloud Shell.

  3. Cloud Shell ofrece versiones de Bash y PowerShell. Cambie entre las opciones mediante el botón situado en la parte superior del área de terminal. Si Cloud Shell se abrió como PowerShell, seleccione Bash.

  4. 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 --name rgDataMigration --location eastus
      
    2. Presione ENTRAR.

      Este es un ejemplo:

      user@Azure:~$ az group create --name rgDataMigration --location eastus
      
      {
        "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/rgDataMigration",
        "location": "eastus",
        "managedBy": null,
        "name": "rgDataMigration",
        "properties": {
          "provisioningState": "Succeeded"
        },
        "tags": null,
        "type": "Microsoft.Resources/resourceGroups"
      }
      
  5. Implemente todos los recursos mencionados en la sección anterior mediante la ejecución del siguiente comando de la CLI. Los recursos incluyen un centro de eventos, una cuenta de almacenamiento, una aplicación de funciones y Azure Synapse Analytics.

    1. Copie y pegue el comando en la ventana Cloud Shell. Como alternativa, puede copiar en un editor de texto, establecer valores y, a continuación, 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 los valores de las siguientes entidades 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 de 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 haya errores.

  6. Cierre Cloud Shell seleccionando el botón Cloud Shell en el portal o el botón X de la esquina superior derecha de la ventana de Cloud Shell.

Comprobación de la creación de los recursos

  1. En Azure Portal, en el cuadro de búsqueda, escriba Grupos de recursos. En los resultados, seleccione Grupos de recursos.

  2. Si es necesario, en el cuadro de búsqueda, escriba el nombre del grupo de recursos para filtrar los grupos de recursos.

  3. Seleccione el grupo de recursos en la lista.

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

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

    Recorte 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 Grupo de SQL dedicado, en Tareas comunes, seleccione Editor de consultas (versión preliminar).

    Captura de pantalla que muestra la selección del Editor de consultas en una página del grupo de SQL dedicado en el portal de Azure.

  3. Escriba el nombre de usuario y la contraseña de 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 Azure Functions.

    Recorte 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 de Function App de su aplicación, seleccione Obtener perfil de publicación.

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

    Recorte 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 guardó anteriormente en la carpeta FunctionEGDWDumper . Después, seleccione Finalizar.

  7. Cuando Visual Studio configure 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, busque y seleccione Grupos de recursos.

  3. Si es necesario, en el cuadro de búsqueda, escriba el nombre del grupo de recursos para filtrar los grupos de recursos.

  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 y, a continuación, seleccione + Suscripción de eventos en la barra de herramientas.

    Captura de pantalla de la página de Eventos de un espacio de nombres de Event Hubs con el vínculo

  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 obtener más información, consulte 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.

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

    Recorte 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. Antes de ejecutar una aplicación que genere datos para el centro de eventos, configure algunos valores.

  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.

  4. Seleccione RootManageSharedAccessKey en la lista de directivas.

    Recorte 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 situado junto a Cadena de conexión 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 usó un nombre diferente para el centro de eventos que no sea 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 que muestra los resultados de la consulta.

Importante

En este ejemplo, el uso de la cadena de conexión para autenticarse en el espacio de nombres de Azure Event Hubs simplifica el tutorial. Recomendamos usar la autenticación de Microsoft Entra ID en entornos de producción. Al usar una aplicación, habilite la identidad administrada para la aplicación y asigne a la identidad un rol adecuado (propietario de Azure Event Hubs, remitente 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.

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

  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:

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

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

  10. Para ver los detalles, seleccione una invocación.

    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.