Compartir a través de


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:

Diagram displaying the different components of the architecture.

  1. Un evento de creación de archivo se desencadenará cuando se cree un nuevo blob en una cuenta de almacenamiento específica.

  2. El evento se envía a Event Grid para procesarse en todos los suscriptores.

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

  4. La aplicación lógica se desencadenará, lo que a su vez hará lo siguiente:

    1. Obtendrá un token de autorización para invocar puntos de conexión por lotes mediante las credenciales de una entidad de servicio

    2. Desencadenará el punto de conexión por lotes (implementación predeterminada) con el archivo recién creado como entrada.

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

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

  2. Cree un secreto para usarlo en la autenticación, tal como se explica en Opción 3: Crear un nuevo secreto de cliente.

  3. Tome nota del Valor de secreto de cliente que se genera. Esto se muestra solo una vez.

  4. Tome nota del client ID y el tenant id en el panel Información general de la aplicación.

  5. 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á:

    1. Permiso en el área de trabajo para leer las implementaciones por lotes y realizar acciones sobre ellas.
    2. 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:

  1. Cree un recurso de identidad administrada:

    IDENTITY=$(az identity create  -n azureml-cpu-cluster-idn  --query id -o tsv)
    
  2. 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
    
  3. 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

  1. Inicie sesión en Azure Portal con su cuenta de Azure.

  2. En la página principal de Azure, seleccione Crear un recurso.

  3. En el menú de Azure Marketplace, seleccione Integración>Logic App.

    Screenshot that shows Azure Marketplace menu with

  4. 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:

    Screenshot showing Azure portal, logic app creation pane, and info for new logic app resource.

    Propiedad Necesario Valor Descripción
    Suscripción <Azure-subscription-name> El nombre de la suscripción de Azure. En este ejemplo se usa pago por uso.
    Grupo de recursos 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 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 (.).
  5. 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.

  6. Ahora, continúe realizando las siguientes selecciones:

    Propiedad Necesario Valor Descripción
    Región 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 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.
  7. 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.

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

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

    Screenshot that shows the workflow template selection pane with

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.

  1. 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:

    Screenshot of all the parameters required in the workflow.

  2. Para crear un parámetro, use la opción Agregar parámetro:

    Screenshot showing how to add one parameter in designer.

  3. 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á.

  1. En el diseñador del flujo de trabajo, debajo del cuadro de búsqueda, seleccione Integrado.

  2. En el cuadro de búsqueda, escriba Event Grid y seleccione el desencadenador denominado Cuando se produce un evento de recurso.

  3. 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.
  4. 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:

    Screenshot of the trigger activity of the Logic App.

Configuración de las acciones

  1. Haga clic en + Nuevo paso.

  2. En el diseñador del flujo de trabajo, debajo del cuadro de búsqueda, seleccione Integrado y haga clic en HTTP:

  3. 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 valor application/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:

    Screenshot of the authorize activity of the Logic App.

  4. Haga clic en + Nuevo paso.

  5. En el diseñador del flujo de trabajo, debajo del cuadro de búsqueda, seleccione Integrado y haga clic en HTTP:

  6. 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 valor application/json
    Encabezados Authorization con el valor concat('Bearer ', body('Authorize')['access_token']) Haga clic en Agregar contexto dinámico y en Expresión para escribir esta expresión.
  7. 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:

    Screenshot of the invoke activity of the Logic App.

    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.

  8. Haga clic en Guardar.

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

    Screenshot of the invoke history of the Logic App.

Pasos siguientes