Ejecución de puntos de conexión por lotes desde eventos de Event Grid en el almacenamiento
SE APLICA A:Extensión ML de la CLI de Azure v2 (actual)SDK de Python azure-ai-ml v2 (actual)
Event Grid es un servicio totalmente administrado que le permite administrar fácilmente eventos en muchos servicios y aplicaciones de Azure diferentes. Simplifica la creación de aplicaciones controladas por eventos y sin servidor. En este tutorial, aprenderá a desencadenar el trabajo de un punto de conexión por lotes para procesar archivos tan pronto como se creen en una cuenta de almacenamiento. En esta arquitectura, se usa una aplicación lógica para suscribirse a aquellos eventos y desencadenar el punto de conexión.
El flujo de trabajo tiene el siguiente aspecto:
Un evento de creación de archivo se desencadenará cuando se cree un nuevo blob en una cuenta de almacenamiento específica.
El evento se envía a Event Grid para procesarse en todos los suscriptores.
Una aplicación lógica se suscribe para escuchar esos eventos. Puesto que la cuenta de almacenamiento puede contener varios recursos de datos, el filtrado de eventos se aplicará solo para reaccionar a los eventos que se producen en una carpeta específica dentro de ella. Se puede realizar un filtrado adicional si fuera necesario (por ejemplo, en función de las extensiones de archivo).
La aplicación lógica se desencadenará, lo que a su vez hará lo siguiente:
Obtendrá un token de autorización para invocar puntos de conexión por lotes mediante las credenciales de una entidad de servicio
Desencadenará el punto de conexión por lotes (implementación predeterminada) con el archivo recién creado como entrada.
El punto de conexión por lotes devolverá el nombre del trabajo que se creó para procesar el archivo.
Importante
Cuando se use la aplicación lógica conectada con Event Grid para invocar el punto de conexión por lotes, se generará un trabajo por cada archivo de blob creado en la cuenta de almacenamiento. Tenga en cuenta que, puesto que los puntos de conexión por lotes distribuyen el trabajo en el nivel de archivo, no se producirá ninguna paralelización. En su lugar, aprovechará la funcionalidad de los puntos de conexión por lotes de la ejecución de varios trabajos en el mismo clúster de proceso. Si necesita ejecutar trabajos en carpetas enteras de manera automática, se recomienda cambiar a Invocar puntos de conexión por lotes desde Azure Data Factory.
Requisitos previos
- En este ejemplo se supone que usted tiene un modelo implementado correctamente como punto de conexión por lotes. Esta arquitectura se puede ampliar perfectamente para trabajar con Implementaciones de componentes de canalización si fuera necesario.
- En este ejemplo se supone que la implementación por lotes se ejecuta en un clúster de proceso denominado
batch-cluster
. - La aplicación lógica que estamos creando se comunicará con los puntos de conexión por lotes de Azure Machine Learning mediante REST. Para obtener más información sobre cómo usar la API de REST de puntos de conexión por lotes, lea Crear trabajos y datos de entrada para puntos de conexión por lotes.
Autenticación en puntos de conexión por lotes
Azure Logic Apps puede invocar las API REST de los puntos de conexión por lotes mediante la actividad HTTP. Los puntos de conexión por lotes admiten Microsoft Entra ID para la autorización y, por ello, la solicitud realizada a las API requiere un control de autenticación adecuado.
Se recomienda usar una entidad de servicio para la autenticación y la interacción con los puntos de conexión por lotes en este escenario.
Cree una entidad de servicio siguiendo los pasos descritos en Registro de una aplicación con Microsoft Entra ID y creación de una entidad de servicio.
Cree un secreto para usarlo en la autenticación, tal como se explica en Opción 3: Crear un nuevo secreto de cliente.
Tome nota del Valor de secreto de cliente que se genera. Esto se muestra solo una vez.
Tome nota del
client ID
y eltenant id
en el panel Información general de la aplicación.Conceda acceso a la entidad de servicio que creó en el área de trabajo, como se explica en Conceder acceso. En este ejemplo, la entidad de servicio requerirá:
- Permiso en el área de trabajo para leer las implementaciones por lotes y realizar acciones sobre ellas.
- Permisos para leer y escribir en almacenes de datos.
Habilitación del acceso a datos
Usaremos los URI de nube proporcionados por Event Grid para indicar los datos de entrada que se van a enviar al trabajo de implementación. Los puntos de conexión por lotes usan la identidad del proceso para montar los datos mientras mantienen la identidad del trabajo para realizar la lectura una vez que se monte. Por lo tanto, tendrá que asignar una identidad administrada asignada por el usuario al clúster de proceso para asegurarse de tener acceso para montar los datos subyacentes. Siga estos pasos para garantizar el acceso a los datos:
Cree un recurso de identidad administrada:
IDENTITY=$(az identity create -n azureml-cpu-cluster-idn --query id -o tsv)
Actualice el clúster de proceso para usar la identidad administrada que hemos creado:
Nota
En este ejemplo se supone que tiene un clúster de proceso creado denominado
cpu-cluster
y se usa para la implementación predeterminada en el punto de conexión.az ml compute update --name cpu-cluster --identity-type user_assigned --user-assigned-identities $IDENTITY
Vaya a Azure Portal y asegúrese de que la identidad administrada tenga los permisos adecuados para leer los datos. Para poder acceder a los servicios de almacenamiento, debe tener como mínimo acceso de Lector de datos de Storage Blob a la cuenta de almacenamiento. Solo los propietarios de la cuenta de almacenamiento pueden cambiar el nivel de acceso mediante Azure Portal.
Crear una aplicación lógica
Inicie sesión en Azure Portal con su cuenta de Azure.
En la página principal de Azure, seleccione Crear un recurso.
En el menú de Azure Marketplace, seleccione Integración>Logic App.
En el panel Crear aplicación lógica, en la pestaña Aspectos básicos, proporcione la siguiente información sobre el recurso de su aplicación lógica:
Propiedad Necesario Valor Descripción Suscripción Sí <Azure-subscription-name> El nombre de la suscripción de Azure. En este ejemplo se usa pago por uso. Grupo de recursos Sí LA-TravelTime-RG El grupo de recursos de Azure en el que se crea el recurso de la aplicación lógica y los recursos relacionados. Este nombre debe ser único entre las regiones y solo puede contener letras, números, guiones ( -
), caracteres de subrayado (_
), paréntesis ((
,)
) y puntos (.
).Nombre Sí LA TravelTime El nombre del recurso de la aplicación lógica, que debe ser exclusivo entre las regiones y solo puede contener letras, números, guiones ( -
), caracteres de subrayado (_
), paréntesis ((
,)
) y puntos (.
).Antes de continuar haciendo las selecciones, vaya a la sección Plan. En Tipo de plan, seleccione Consumo para mostrar solo la configuración de un flujo de trabajo de aplicación lógica de consumo, que se ejecuta en Azure Logic Apps multiinquilino.
La propiedad Tipo de plan también especifica el modelo de facturación que se usará.
Tipo de plan Descripción Estándar Este tipo de aplicación lógica es la selección por defecto y se ejecuta en Azure Logic Apps de un solo inquilino y utiliza el modelo de facturación Estándar. Consumo Este tipo de aplicación lógica se ejecuta en Azure Logic Apps global y multi-inquilino y utiliza el modelo de facturación por consumo. Importante
En el caso de las áreas de trabajo habilitadas para vínculos privados, es necesario usar el plan Estándar para Logic Apps con la opción permitir la configuración de red privada.
Ahora, continúe realizando las siguientes selecciones:
Propiedad Necesario Valor Descripción Región Sí Oeste de EE. UU. La región del centro de datos de Azure donde se almacenará la información de la aplicación. En este ejemplo se implementa la aplicación lógica de ejemplo en la región Oeste de EE. UU. en Azure.
Nota: Si la suscripción está asociada con un entorno de servicio de integración, esta lista incluye esos entornos.Habilitación de análisis de registros Sí No Esta opción aparece y solo se aplica cuando se selecciona el tipo de aplicación lógica de consumo. Cambie esta opción solo cuando desee habilitar el registro de diagnóstico. En este tutorial, conserve la selección predeterminada. Seleccione Revisar y crear cuando haya terminado. Una vez que Azure valide la información sobre el recurso de su aplicación lógica, seleccione Crear.
Una vez que Azure implemente la aplicación, seleccione Ir al recurso.
Azure abre el panel de selección de plantillas de flujo de trabajo, que muestra un vídeo de introducción, los desencadenadores usados frecuentemente y los patrones de plantillas de flujos de trabajo.
Desplácese hacia abajo más allá del vídeo y de los desencadenadores frecuentes hasta la sección Plantillasy seleccione Aplicación lógica en blanco.
Configuración de los parámetros de flujo de trabajo
Esta aplicación lógica usa parámetros para almacenar fragmentos de información específicos que necesitará para ejecutar la implementación por lotes.
En el diseñador de flujo de trabajo, en la barra de herramientas, seleccione la opción Parámetros y configúrelos de la siguiente manera:
Para crear un parámetro, use la opción Agregar parámetro:
Cree los parámetros siguientes.
Parámetro Descripción Valor de ejemplo tenant_id
Id. del inquilino en el que se implementa el punto de conexión. 00000000-0000-0000-00000000
client_id
Id. de cliente de la entidad de servicio que se usa para invocar el punto de conexión. 00000000-0000-0000-00000000
client_secret
El secreto de cliente de la entidad de servicio que se usa para invocar el punto de conexión. ABCDEFGhijkLMNOPQRstUVwz
endpoint_uri
El identificador uniforme de recursos de puntuación del punto de conexión. https://<endpoint_name>.<region>.inference.ml.azure.com/jobs
Importante
endpoint_uri
es el URI del punto de conexión que está intentando ejecutar. El punto de conexión debe tener configurada una implementación predeterminada.Sugerencia
Use los valores configurados en Autenticación en puntos de conexión por lotes.
Incorporación del desencadenador
Queremos desencadenar la aplicación lógica cada vez que se crea un nuevo archivo en una carpeta determinada (recurso de datos) de una cuenta de almacenamiento. La aplicación lógica usa la información del evento para invocar el punto de conexión por lotes y pasar el archivo específico que se procesará.
En el diseñador del flujo de trabajo, debajo del cuadro de búsqueda, seleccione Integrado.
En el cuadro de búsqueda, escriba Event Grid y seleccione el desencadenador denominado Cuando se produce un evento de recurso.
Configure el desencadenador de la manera siguiente:
Propiedad Valor Descripción Suscripción Nombre de la suscripción La suscripción donde se coloca la cuenta de Azure Storage. Tipo de recurso Microsoft.Storage.StorageAccounts
Tipo de recurso que emite los eventos. Nombre de recurso El nombre de la cuenta de almacenamiento Nombre de la cuenta de almacenamiento donde se generarán los archivos. Elemento de tipo de evento Microsoft.Storage.BlobCreated
El tipo de evento. Haga clic en Agregar nuevo parámetro y seleccione Filtro de prefijo. Agregue el valor
/blobServices/default/containers/<container_name>/blobs/<path_to_data_folder>
.Importante
El filtro de prefijo permite a Event Grid notificar solo el flujo de trabajo cuando se crea un blob en la ruta de acceso específica indicada. En este caso, estamos asumiendo que algún proceso externo creará los archivos en la carpeta
<path_to_data_folder>
dentro del contenedor<container_name>
en la cuenta de almacenamiento seleccionada. Configure este parámetro para que coincida con la ubicación de los datos. De lo contrario, el evento se activará para cualquier archivo creado en cualquier ubicación de la cuenta de almacenamiento. Para más información, consulte Filtrado de eventos para Event Grid.El desencadenador tendrá el siguiente aspecto:
Configuración de las acciones
Haga clic en + Nuevo paso.
En el diseñador del flujo de trabajo, debajo del cuadro de búsqueda, seleccione Integrado y haga clic en HTTP:
Configure la acción de la siguiente manera:
Propiedad Valor Notas Método POST
El método HTTP URI concat('https://login.microsoftonline.com/', parameters('tenant_id'), '/oauth2/token')
Haga clic en Agregar contexto dinámico y en Expresión para escribir esta expresión. Encabezados Content-Type
con el valorapplication/x-www-form-urlencoded
Cuerpo concat('grant_type=client_credentials&client_id=', parameters('client_id'), '&client_secret=', parameters('client_secret'), '&resource=https://ml.azure.com')
Haga clic en Agregar contexto dinámico y en Expresión para escribir esta expresión. La acción tendrá el siguiente aspecto:
Haga clic en + Nuevo paso.
En el diseñador del flujo de trabajo, debajo del cuadro de búsqueda, seleccione Integrado y haga clic en HTTP:
Configure la acción de la siguiente manera:
Propiedad Valor Notas Método POST
El método HTTP URI endpoint_uri
Haga clic en Agregar contexto dinámico y selecciónelo en parameters
.Encabezados Content-Type
con el valorapplication/json
Encabezados Authorization
con el valorconcat('Bearer ', body('Authorize')['access_token'])
Haga clic en Agregar contexto dinámico y en Expresión para escribir esta expresión. En el parámetro Cuerpo, haga clic en Agregar contexto dinámico y en Expresión, para escribir la siguiente expresión:
replace('{ "properties": { "InputData": { "mnistinput": { "JobInputType" : "UriFile", "Uri" : "<JOB_INPUT_URI>" } } } }', '<JOB_INPUT_URI>', triggerBody()?[0]['data']['url'])
Sugerencia
La carga anterior corresponde a una implementación de modelo. Si trabaja con una implementación de componentes de canalización, adapte el formato según las expectativas de las entradas de la canalización. Obtenga más información sobre cómo estructurar la entrada en llamadas de REST en Creación de trabajos y datos de entrada para puntos de conexión por lotes (REST).
La acción tendrá el siguiente aspecto:
Nota:
Tenga en cuenta que esta última acción desencadenará el trabajo por lotes, pero no esperará a su finalización. Azure Logic Apps no está diseñado para aplicaciones de ejecución prolongada. Si necesita esperar a que se complete el trabajo, se recomienda cambiar a Ejecutar puntos de conexión por lotes desde Azure Data Factory.
Haga clic en Guardar.
La aplicación lógica está lista para ejecutarse y se desencadenará automáticamente cada vez que se cree un nuevo archivo en la ruta de acceso indicada. Observará que la aplicación ha recibido correctamente el evento comprobando el historial de ejecución :