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 puede usar para administrar fácilmente eventos en muchos servicios y aplicaciones de Azure diferentes. El servicio simplifica la forma en que se crean aplicaciones basadas en eventos y sin servidor. En este tutorial se muestra cómo desencadenar el trabajo de un punto de conexión por lotes para procesar archivos tan pronto como se creen en una cuenta de almacenamiento. La arquitectura usa un flujo de trabajo de aplicación lógica para suscribirse a esos eventos y desencadenar el punto de conexión.
En el diagrama siguiente se muestra la arquitectura de esta solución:
En los pasos siguientes se describen los pasos generales de esta solución:
Cuando se crea un nuevo blob en una cuenta de almacenamiento específica, se desencadena un archivo creado evento.
El evento se envía a Event Grid para procesarse en todos los suscriptores.
El flujo de trabajo de la aplicación lógica se suscribe y escucha esos eventos.
La cuenta de almacenamiento puede contener varios recursos de datos, por lo que el filtrado de eventos se aplica para reaccionar solo a los eventos que se producen en una carpeta específica de la cuenta de almacenamiento. Se puede realizar un filtrado adicional si es necesario, por ejemplo, en función de las extensiones de archivo.
El flujo de trabajo de la aplicación lógica desencadena y realiza las siguientes acciones:
Obtiene un token de autorización para invocar puntos de conexión por lotes mediante las credenciales de una entidad de servicio.
Desencadena 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 devuelve el nombre del trabajo que se creó para procesar el archivo.
Importante
Cuando se usa un flujo de trabajo de aplicación lógica que se conecta con Event Grid para invocar el punto de conexión por lotes, se genera un trabajo por cada archivo de blob creado en la cuenta de almacenamiento. Tenga en cuenta que los puntos de conexión por lotes distribuyen el trabajo en el nivel de archivo, por lo que no se produce ninguna paralelización. En su lugar, se usa la capacidad de los puntos de conexión por lotes para ejecutar varios trabajos en el mismo clúster de proceso. Si necesita ejecutar trabajos en carpetas completas de forma automática, se recomienda cambiar a invocar puntos de conexión por lotes desde Azure Data Factory.
Requisitos previos
Tiene un modelo implementado correctamente como punto de conexión por lotes. Puede ampliar esta arquitectura para trabajar con implementaciones de componentes de canalización si es necesario.
La implementación por lotes se ejecuta en un clúster de proceso denominado
batch-cluster
.La aplicación lógica que se crea se comunica con los puntos de conexión por lotes de Azure Machine Learning mediante REST.
Para obtener más información acerca de cómo usar la API de REST para puntos de conexión por lotes, consulte Creación de 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 acción 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.
En este tutorial se usa 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 Registrar una aplicación con el Microsoft Entra ID y crear una entidad de servicio.
Cree un secreto para usarlo para la autenticación siguiendo Opción 3: Crear un nuevo secreto de cliente.
Asegúrese de guardar el secreto de cliente generado Valor, que solo aparece una vez.
Asegúrese de guardar el
client ID
y eltenant id
en el panel Información generalde la aplicación.Conceda a la entidad de servicio acceso al área de trabajo siguiendo Conceder acceso. En este ejemplo, la entidad de servicio requiere lo siguiente:
- 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
Para indicar los datos de entrada que desea enviar al trabajo de implementación, en este tutorial se usan los URI de nube proporcionados por Event Grid. Los puntos de conexión de Batch usan la identidad del proceso para montar los datos, a la vez que mantienen la identidad del trabajo para leer los datos montados. Por lo tanto, debe asignar una identidad administrada asignada por el usuario al clúster de proceso y asegurarse de que el clúster tiene acceso para montar los datos subyacentes. Para garantizar el acceso a los datos, siga estos pasos:
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
que 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
En el Azure Portal, asegúrese de que la identidad administrada tiene los permisos correctos 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.
Creación de una aplicación lógica
En Azure Portal, 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 realizando 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 consumo, que se ejecuta en Azure Logic Apps multiinquilino.
Importante
En el caso de las áreas de trabajo habilitadas para vínculo privado, debe usar el plan Estándar para Azure Logic Apps con la opción permitir la configuración de red privada.
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 predeterminada y se ejecuta en Azure Logic Apps de un solo inquilino y usa elModelo de precios estándar. Consumo Este tipo de aplicación lógica se ejecuta en Azure Logic Apps global y multiinquilino y usa elModelo de precios de consumo de . 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. 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 diseñador de flujos de trabajo para la aplicación lógica.
Configuración de los parámetros de flujo de trabajo
Este flujo de trabajo de aplicación lógica usa parámetros para almacenar partes específicas de información que necesita para ejecutar la implementación por lotes.
En la barra de herramientas del diseñador de flujos de trabajo, seleccione Parámetros.
En el panel Parámetros, seleccione Crear parámetroy proporcione la siguiente información sobre cada parámetro que se va a crear:
Sugerencia
Use los valores configurados en Autenticación en puntos de conexión por lotes.
Nombre de parámetro Descripción Valor de ejemplo tenant_id
Identificador de inquilino donde se implementa el punto de conexión. 00000000-0000-0000-00000000
client_id
Identificador 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.
Importante: este URI es para el punto de conexión que desea ejecutar. El punto de conexión debe tener configurada una implementación predeterminada.https://<endpoint_name>.<region>.inference.ml.azure.com/jobs
En el ejemplo siguiente se muestra un parámetro de ejemplo:
Para más información, consulte Creación de parámetros entre entornos para entradas de flujo de trabajo en Azure Logic Apps.
Incorporación del desencadenador
Queremos desencadenar el flujo de trabajo de la aplicación lógica cada vez que se crea un nuevo archivo en una carpeta específica (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 al proceso.
En el diseñador de flujos de trabajo, siga estos pasos generales para agregar un desencadenador de Event Grid denominado Cuando se produce un evento de recurso.
En el cuadro de información de conexión, seleccione el tipo de autenticación que se va a usar y, a continuación, seleccione Iniciar sesión.
En el cuadro desencadenador, proporcione la siguiente información:
Propiedad Valor Descripción Tipo de recurso Microsoft.Storage.StorageAccounts
Tipo de recurso que emite los eventos. Suscripción Nombre de la suscripción La suscripción de la cuenta de almacenamiento. Nombre de recurso El nombre de la cuenta de almacenamiento Nombre de la cuenta de almacenamiento donde se generan los archivos. Elemento de tipo de evento Microsoft.Storage.BlobCreated
El tipo de evento. En la lista Parámetros avanzados, seleccione filtro de prefijoy proporcione el siguiente valor:
/blobServices/default/containers/<container-name>/blobs/<path-to-data-folder>
Importante
La propiedadFiltro 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, se supone que algunos archivos se crean mediante algún proceso externo en la carpeta especificada por <ruta de acceso a la carpeta de datos> dentro del contenedor <nombre de contenedor>, que se encuentra 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 desencadena para cualquier archivo creado en cualquier ubicación de la cuenta de almacenamiento. Para obtener más información, consulte Filtrado de eventos para Event Grid.
En el ejemplo siguiente se muestra cómo aparece el desencadenador:
Configuración de las acciones
En el Cuando se produce un evento de recurso desencadenador, siga estos pasos generales para agregar la acciónHTTP. Cambie el nombre de la acción a Autorizar.
En la acción Autorizar , proporcione la siguiente información:
Propiedad Valor Notas Método POST
El método HTTP URI concat('https://login.microsoftonline.com/', parameters('tenant_id'), '/oauth2/token')
Para escribir esta expresión, seleccione dentro del cuadro URI. En las opciones que aparecen, seleccione el editor de expresiones (icono de fórmula). 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')
Para escribir esta expresión, seleccione dentro del cuadro Cuerpo. En las opciones que aparecen, seleccione el editor de expresiones (icono de fórmula). En el ejemplo siguiente se muestra un ejemplo de acción Autorizar:
En la acción Autorizar , agregue otra acción de HTTP y cambie el nombre del título a Invocar.
En la acción Invocar , proporcione la siguiente información:
Propiedad Valor Notas Método POST
El método HTTP URI endpoint_uri
Seleccione dentro del cuadroURI y, después, en Parámetros, seleccione endpoint_uri. Encabezados Content-Type
con el valorapplication/json
Encabezados Authorization
con el valorconcat('Bearer ', body('Authorize')['access_token'])
Para escribir esta expresión, seleccione dentro del cuadro Encabezados. En las opciones que aparecen, seleccione el editor de expresiones (icono de fórmula). Seleccione dentro del cuadro Cuerpo y, en las opciones que aparecen, seleccione el editor de expresiones (icono de fórmula) para escribir la expresión siguiente:
replace('{ "properties": { "InputData": { "mnistinput": { "JobInputType" : "UriFile", "Uri" : "<JOB_INPUT_URI>" } } } }', '<JOB_INPUT_URI>', triggerBody()?[0]['data']['url'])
Sugerencia
La carga anterior corresponde a un implementación del modelo. Si está trabajando con una Implementación de componentes de canalización, adapte el formato según las expectativas de las entradas de la canalización. Para obtener más información sobre cómo estructurar la entrada en las llamadas REST, consulte Creación de trabajos y datos de entrada para puntos de conexión por lotes (REST).
En el ejemplo siguiente se muestra un ejemplo de acción Invocar :
Nota:
La invocar acción desencadena el trabajo por lotes, pero la acción no esperará a su finalización. De manera predeterminada, Azure Logic Apps no está configurado 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.
Cuando haya terminado, guarde el flujo de trabajo.
El flujo de trabajo de la aplicación lógica está listo para ejecutarse y desencadenarse automáticamente cada vez que se crea un nuevo archivo en la ruta de acceso indicada.
Para confirmar que la aplicación recibió correctamente un evento, compruebe el historial de Ejecuciones de la aplicación: