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.
En este diagrama se muestra el flujo de trabajo de la solución que se compila en este tutorial:
- Los datos que se envían a un centro de eventos de Azure se capturan en una instancia de Azure Blob Storage.
- 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.
- La cuadrícula de eventos desvía estos datos de evento a una aplicación de función de Azure.
- 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.
- 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
Inicie sesión en Azure Portal.
Seleccione el botón Cloud Shell que se encuentra en la parte superior.
Verá Cloud Shell abierto en la parte inferior del explorador.
En Cloud Shell, si ve una opción para seleccionar entre Bash y PowerShell, seleccione Bash.
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.
Espere hasta que se inicialice Cloud Shell.
Para crear un grupo de recursos de Azure, ejecute el comando de la CLI siguiente:
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 rgDataMigrationPresione 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 }
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:
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>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.
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
En Azure Portal, seleccione Grupos de recursos en el menú de la izquierda.
Para filtrar la lista de grupos de recursos, escriba el nombre del grupo de recursos en el cuadro de búsqueda.
Seleccione el grupo de recursos en la lista.
Confirme que ve los recursos siguientes en el 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:
En la lista de recursos del grupo de recursos, seleccione el grupo de SQL dedicado.
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) .
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:
- Seleccione el vínculo: Establezca el firewall del servidor.
- 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.
- Seleccione Aceptar en el mensaje de operación correcta.
- 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.
- Escriba el nombre de usuario y la contraseña y, después, seleccione Aceptar.
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);
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
Abra otra pestaña en el explorador web y vaya a Azure Portal.
En Azure Portal, seleccione Grupos de recursos en el menú de la izquierda.
Seleccione el grupo de recursos en el que exista la aplicación de funciones.
Seleccione la aplicación de funciones en la lista de recursos del grupo de recursos.
Seleccione Configuración en Configuración en el menú de la izquierda.
Cambie a la pestaña Configuración del tiempo de ejecución de la función, en el panel derecho.
Actualice la versión del runtime a la versión ~3.
Seleccione Guardar en la barra de herramientas.
En el elemento emergente de confirmación Guardar cambios, seleccione Continuar.
Publicar la aplicación de Azure Functions
Inicie Visual Studio.
Abra la solución EventHubsCaptureEventGridDemo.sln que descargó de GitHub como parte de los requisitos previos. Se encuentra en la carpeta
/samples/e2e/EventHubsCaptureEventGridDemo.En el Explorador de soluciones, haga clic con el botón derecho en el proyecto FunctionEGDWDumper y seleccione Publicar.
Si ve la pantalla siguiente, seleccione Iniciar.
En el cuadro de diálogo Publicar, seleccione Azure en Destino y seleccione Siguiente.
Seleccione Azure Function App (Windows) y seleccione Siguiente.
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.
En la página Publicar, en la sección Dependencias de servicio, seleccione Configurar para Almacenamiento.
En la página Configure dependency (Configurar dependencia), siga estos pasos:
Seleccione la cuenta de almacenamiento que creó anteriormente y, a continuación, Siguiente.
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.
Desactive el archivo de código de C# y la opción Secrets store (Almacén de secretos) y, después, seleccione Finalizar.
Cuando Visual Studio haya configurado el perfil, seleccione Publicar.
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.
Después de publicar la función, estará listo para suscribirse al evento.
Nos suscribiremos al evento.
En una pestaña o ventana nueva de un explorador web, vaya a Azure Portal.
En Azure Portal, seleccione Grupos de recursos en el menú de la izquierda.
Para filtrar la lista de grupos de recursos, escriba el nombre del grupo de recursos en el cuadro de búsqueda.
Seleccione el grupo de recursos en la lista.
Seleccione el espacio de nombres de Event Hubs en la lista de recursos.
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.
En la página Crear suscripción de eventos, siga estos pasos:
Escriba un nombre para la suscripción a eventos.
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.
En Tipo de punto de conexión, seleccione Función de Azure.
En Punto de conexión, seleccione el vínculo.
En la página Seleccionar la función de Azure, siga estos pasos si no se rellenan automáticamente.
- Seleccione la suscripción de Azure que tenga la función de Azure.
- Seleccione el grupo de recursos para la función.
- Seleccione la aplicación de funciones.
- Seleccione la ranura de implementación.
- Seleccione la función EventGridTriggerMigrateData.
En la página Seleccionar la función de Azure, seleccione Confirmar selección.
De nuevo, en la página Crear suscripción de eventos, seleccione Crear.
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.
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.
En Azure Portal, vaya al grupo de recursos como lo hizo anteriormente.
Seleccione el espacio de nombres de Event Hubs.
En la página Espacio de nombres de Event Hubs, seleccione Directivas de acceso compartido en el menú de la izquierda.
Seleccione RootManageSharedAccessKey en la lista de directivas.
Seleccione el botón Copiar que está junto al cuadro de texto Cadena de conexión: clave principal.
Vuelva a la solución de Visual Studio.
Haga clic con el botón derecho en el proyecto WindTurbineDataGenerator y seleccione Establecer como proyecto de inicio.
En el proyecto WindTurbineDataGenerator, abra program.cs.
Reemplace
<EVENT HUBS NAMESPACE CONNECTION STRING>por la cadena de conexión que copió en el portal.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";Compile la solución. Ejecute la aplicación WindTurbineGenerator.exe.
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]
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
Desplácese hasta el grupo de recursos y seleccione la cuenta de almacenamiento usada para capturar datos de eventos.
En la página Cuenta de almacenamiento, seleccione Explorador de Storage (versión preliminar) en el menú de la izquierda.
Expanda CONTENEDORES DE BLOBS y seleccione windturbinecapture.
Abra la carpeta con el mismo nombre que el espacio de nombres de Event Hubs en el panel derecho.
Abra la carpeta con el mismo nombre que el centro de eventos (hubdatamigration).
Profundice en las carpetas hasta que vea los archivos AVRO. Este es un ejemplo:
Comprobación de que el desencadenador de Event Grid invocó la función
Desplácese al grupo de recursos y seleccione la aplicación de funciones.
Seleccione Funciones en el menú de la izquierda.
Seleccione la función EventGridTriggerMigrateData de la lista.
En la página Función, seleccione Supervisión en el menú de la izquierda.
Seleccione Configurar para configurar Application Insights para que capture registros de invocación.
Cree un nuevo recurso de Application Insights o use uno existente.
Vuelva a la página Supervisión de la función.
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.
Espere unos minutos (5 minutos o más) y seleccione el botón Actualizar para ver las invocaciones de función.
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
fileUrldel objetodataapunta 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.

Pasos siguientes
- Para información sobre las diferencias en los servicios de mensajería de Azure, consulte Elija entre los servicios de Azure de entrega de mensajes.
- Para obtener una introducción a Event Grid, vea Acerca de Event Grid.
- Para obtener una introducción a la función de captura de Event Hubs, vea Habilitación de la funcionalidad de captura de Event Hubs mediante Azure Portal.
- Para más información sobre cómo configurar y ejecutar el ejemplo, vea el ejemplo de la función de captura de Event Hubs y Event Grid.