Tutorial: Transmitir macrodatos a un almacenamiento de datos

Azure Event Grid es un servicio inteligente de enrutamiento de eventos que permite responder a las notificaciones o eventos procedentes de aplicaciones y servicios. Por ejemplo, puede desencadenar una función de Azure para procesar datos de Event Hubs que se capturan en Blob Storage o Data Lake Storage. En este ejemplo, se muestra cómo usar Event Grid y Azure Functions para migrar datos capturados de Event Hubs desde Blob Storage a Azure Synapse Analytics, específicamente un grupo de SQL dedicado.

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 una cuadrícula de eventos de Azure.
  3. La cuadrícula de eventos desvía estos datos de evento a una aplicación de función 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:

  • Suscripción a Azure. Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
  • Visual Studio 2019 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 función Capture habilitada
    • FunctionDWDumper : una función de Azure que recibe una notificación de 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.

    Azure Portal

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

    Cloud Shell

  4. En Cloud Shell, si ve una opción para seleccionar entre Bash y PowerShell, seleccione Bash.

  5. Si usa Cloud Shell por primera vez, seleccione Crear almacenamiento para crear una cuenta de almacenamiento. Azure Cloud Shell requiere una cuenta de Azure Storage donde almacenar algunos archivos.

    Creación de almacenamiento para Cloud Shell

  6. Espere hasta que se inicialice Cloud Shell.

    Cloud Shell inicializado

  7. 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
      }
      
  8. 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 que quiera copiar y pegar en el editor que prefiera, establecer valores y luego copiar el comando en Cloud Shell.

      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.

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

    Seleccionar el grupo de recursos

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

    Recursos del grupo de recursos

Creación de una tabla en Azure Synapse Analytics

Para crear una tabla en el almacenamiento de datos, ejecute el script CreateDataWarehouseTable.sql. Para ejecutar el script, puede usar Visual Studio o el Editor de consultas en el portal. Estos pasos le muestran cómo usar el Editor de consultas:

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

    Página de Azure Synapse Analytics

  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, siga estos pasos:

    1. Seleccione el vínculo: Establezca el firewall del servidor.
    2. En la página Configuración de firewall, seleccione Agregar IP de cliente en la barra de herramientas y, a continuación, seleccione Guardar en la barra de herramientas.
    3. Seleccione Aceptar en el mensaje de operación correcta.
    4. Regrese a la página Dedicated SQL pool (Grupo de SQL dedicado) y seleccione Editor de consultas (versión preliminar) en el menú de la izquierda.
    5. Escriba el nombre de usuario y la contraseña y, después, 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);
    

    Ejecución de la consulta SQL

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

Actualización de la versión del runtime de la función

  1. Abra otra pestaña en el explorador web y vaya a Azure Portal.

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

  3. Seleccione el grupo de recursos en el que exista la aplicación de funciones.

  4. Seleccione la aplicación de funciones en la lista de recursos del grupo de recursos.

  5. Seleccione Configuración en Configuración en el menú de la izquierda.

  6. Cambie a la pestaña Configuración del tiempo de ejecución de la función, en el panel derecho.

  7. Actualice la versión del runtime a la versión ~3.

    Actualización de la versión del runtime de la función

  8. Seleccione Guardar en la barra de herramientas.

  9. En el elemento emergente de confirmación Guardar cambios, seleccione Continuar.

Publicar la aplicación de Azure 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. Si ve la pantalla siguiente, seleccione Iniciar.

    Botón Iniciar de la sección Publicar.

  5. En el cuadro de diálogo Publicar, seleccione Azure en Destino y seleccione Siguiente.

  6. Seleccione Azure Function App (Windows) y seleccione Siguiente.

  7. En la pestaña Functions instance (Instancia de Functions), seleccione su suscripción de Azure, expanda el grupo de recursos, seleccione su aplicación de funciones y, después, seleccione Finalizar. Si aún no lo ha hecho, es preciso que inicie sesión en su cuenta de Azure.

    Selección de la aplicación de función

  8. En la página Publicar, en la sección Dependencias de servicio, seleccione Configurar para Almacenamiento.

    Seleccionar el vínculo Configurar para la dependencia del servicio de almacenamiento

  9. En la página Configure dependency (Configurar dependencia), siga estos pasos:

    1. Seleccione la cuenta de almacenamiento que creó anteriormente y, a continuación, Siguiente.

      Seleccionar cuenta de almacenamiento

    2. Especifique un nombre para la cadena de conexión y seleccione Ninguno para la opción Save connection string (Guardar la cadena de conexión) y, a continuación, seleccione Siguiente.

      Especificar un nombre para la cadena de conexión

    3. Desactive el archivo de código de C# y la opción Secrets store (Almacén de secretos) y, después, seleccione Finalizar.

      Revisión del resumen de cambios

  10. Cuando Visual Studio haya configurado el perfil, seleccione Publicar.

    Select publish

  11. En la pestaña con la página Función de Azure abierta, seleccione Funciones en el menú de la izquierda. 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.

    Confirmar 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, vaya a 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.

    Agregar vínculo de suscripción de eventos en la página Eventos de un espacio de nombres de Event Hubs

  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.

      Crear una suscripción de eventos mediante la función

  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.

    Confirmar la suscripción a eventos

  9. Seleccione el plan de App Service (no la instancia de App Service) en la lista de recursos del grupo de recursos.

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.

    Página 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. 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]    
    

    Resultados de la consulta

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 Storage (versión preliminar) en el menú de la izquierda.

  3. Expanda CONTENEDORES DE BLOBS y 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:

    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 Funciones en el menú de la izquierda.

  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.

    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.

Resultados de la consulta

Pasos siguientes