Share via


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.

Application overview

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.

    Screenshot of Azure portal showing the selection of Cloud Shell button.

  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.

        Screenshot showing the creation of storage for Cloud Shell.

      3. Espere hasta que se inicialice Cloud Shell.

        Screenshot showing the Cloud Shell initialized.

  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.

    Screenshot showing the selection of your resource group.

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

    Screenshot showing resources in the resource group.

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

    Screenshot showing the selection of Query Editor on a Dedicated SQL pool page in the 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);
    

    Screenshot showing the query editor.

  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.

    Screenshot showing the selection of the function app in the list of resources for a resource group.

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

    Screenshot showing the selection of the **Get Publish Profile** button on the command bar of the function app page.

  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.

    Screenshot showing the selection **Import Profile** on the **Publish** dialog box.

  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.

    Screenshot showing the confirmation of function creation.

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.

    Screenshot of the Events page for an Event Hubs namespace with Add event subscription link selected.

  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.

      Screenshot of the Create an event subscription page.

  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.

    Screenshot showing the Event Subscriptions tab on the Events page.

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.

    Screenshot showing the Shared access policies page for an Event Hubs namespace.

  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]
    

    Screenshot showing the query results.

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:

    Screenshot showing the captured file in the storage.

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.

    Screenshot showing the Function invocations.

  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.

Screenshot showing the final query results.

Pasos siguientes