Partage via


Exécuter des points de terminaison de traitement par lots à partir d’événements Event Grid dans le stockage

S’APPLIQUE À :Extension Azure CLI v2 (actuelle)Kit de développement logiciel (SDK) Python azure-ai-ml v2 (version actuelle)

Event Grid est un service entièrement géré qui vous permet de facilement gérer des événements dans de nombreux services et applications Azure. Il simplifie la création d’applications pilotées par les événements et serverless. Dans ce tutoriel, nous apprenons à déclencher le travail d’un point de terminaison de lot pour traiter des fichiers dès qu’ils sont créés dans un compte de stockage. Dans cette architecture, nous utilisons une application logique pour nous abonner à ces événements et déclencher le point de terminaison.

Le workflow se présente comme suit :

Diagram displaying the different components of the architecture.

  1. Un événement fichier créé est déclenché lorsqu’un objet blob est créé dans un compte de stockage spécifique.

  2. L’événement est envoyé à Event Grid pour être traité à tous les abonnés.

  3. Une application logique est abonnée pour écouter ces événements. Étant donné que le compte de stockage peut contenir plusieurs ressources de données, le filtrage des événements est appliqué pour ne réagir qu’aux événements qui se produisent dans un dossier spécifique à l’intérieur de celui-ci. Un filtrage supplémentaire peut être effectué si nécessaire (pour instance, en fonction des extensions de fichier).

  4. L’application logique est déclenchée, ce qui à son tour :

    1. Il obtient un jeton d’autorisation pour appeler des points de terminaison de lot à l’aide des informations d’identification d’un principal de service

    2. Il déclenche le point de terminaison de lot (déploiement par défaut) à l’aide du fichier nouvellement créé en tant qu’entrée.

  5. Le point de terminaison de lot retourne le nom du travail qui a été créé pour traiter le fichier.

Important

Lorsque vous utilisez l’application logique connectée à Event Grid pour appeler le point de terminaison de lot, vous générez un travail pour chaque fichier blob créé dans le compte de stockage. Gardez à l’esprit que, étant donné que les points de terminaison de lot distribuent le travail au niveau du fichier, aucune parallélisation ne se produit. Au lieu de cela, vous tirerez parti de la capacité des points de terminaison par lots à exécuter plusieurs travaux sous le même cluster de calcul. Si vous avez besoin d’exécuter des travaux sur des dossiers entiers de façon automatique, nous vous recommandons de passer à Appel de points de terminaison par lots à partir d’Azure Data Factory.

Prérequis

  • Cet exemple suppose que vous disposez d’un modèle correctement déployé en tant que point de terminaison par lots. Cette architecture peut parfaitement être étendue pour fonctionner avec les déploiements de composants de pipeline si nécessaire.
  • Cet exemple suppose que votre déploiement par lots s’exécute dans un cluster de calcul appelé batch-cluster.
  • L’application logique que nous créons communique avec les points de terminaison de lot Azure Machine Learning à l’aide de REST. Si vous souhaitez obtenir plus d’information sur l’utilisation de l’API REST des points de terminaison de lot, consultez Créer des travaux et des données d’entrée pour des points de terminaison de lot.

Authentification sur des points de terminaison de lot

Azure Logic Apps peut appeler les API REST des points de terminaison par lots à l’aide de l’activité HTTP. Les points de terminaison par lots prennent en charge Microsoft Entra ID pour l’autorisation et, par conséquent, la requête adressée aux API nécessite une gestion d’authentification appropriée.

Nous vous recommandons d’utiliser un principal de service pour l’authentification et l’interaction avec les points de terminaison de lot dans ce scénario.

  1. Créez un principal de service en suivant les étapes décrites dans Inscrire une application avec Microsoft Entra ID et créer un principal de service.

  2. Créez un secret à utiliser pour l’authentification comme expliqué dans Option 3 : créer une clé secrète client.

  3. Notez la Valeur de clé secrète client générée. Celui-ci ne s’affiche qu’une seule fois.

  4. Notez le client ID et le tenant id dans le volet Vue d’ensemble de l’application.

  5. Accordez à votre espace de travail l’accès au principal de service que vous avez créé, comme expliqué dans Accorder l’accès. Dans cet exemple, le principal de service nécessite :

    1. Autorisation dans l’espace de travail pour lire les déploiements par lots et effectuer des actions dessus.
    2. Autorisations de lecture/écriture dans les magasins de données.

Activation de l’accès aux données

Nous allons utiliser les URI cloud fournis par Event Grid pour indiquer les données d’entrée à envoyer au travail de déploiement. Les points de terminaison de lot utilisent l’identité du calcul pour monter les données tout en conservant l’identité du travail pour la lire après montage. C’est pourquoi nous devons affecter une identité managée affectée par l’utilisateur au cluster de calcul afin de vous assurer qu’il dispose d’un accès pour monter les données sous-jacentes. Procédez comme suit pour garantir l’accès aux données :

  1. Créez une ressource d’identité managée :

    IDENTITY=$(az identity create  -n azureml-cpu-cluster-idn  --query id -o tsv)
    
  2. Mettez à jour le cluster de calcul pour utiliser l’identité managée que nous avons créée :

    Notes

    Cet exemple suppose que vous avez un cluster de calcul créé nommé cpu-cluster et qu’il est utilisé pour le déploiement par défaut dans le point de terminaison.

    az ml compute update --name cpu-cluster --identity-type user_assigned --user-assigned-identities $IDENTITY
    
  3. Accédez au Portail Azure et vérifiez que l’identité managée dispose des autorisations appropriées pour lire les données. Pour accéder aux services de stockage, vous devez disposer au minimum de l’accès Lecteur des données blob de stockage au compte de stockage. Seuls les propriétaires de comptes de stockage peuvent modifier votre niveau d’accès via le portail Azure.

Créer une application logique

  1. Sur le portail Azure connectez-vous avec votre compte Azure.

  2. Dans la page d’accueil Azure, sélectionnez Créer une ressource.

  3. Dans le menu Place de marché Azure, sélectionnez Intégration>Application logique.

    Screenshot that shows Azure Marketplace menu with

  4. Dans le volet Créer une application logique, sous l’onglet De base, fournissez les informations suivantes sur votre ressource d’application logique.

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

    Propriété Obligatoire Value Description
    Abonnement Oui <Azure-subscription-name> Le nom de votre abonnement Azure. Cet exemple utilise Paiement à l’utilisation.
    Groupe de ressources Oui LA-TravelTime-RG Groupe de ressources Azure dans lequel vous créez votre ressource d’application logique et les ressources associées. Ce nom doit être unique d’une région à l’autre et peut uniquement contenir des lettres, des chiffres, des traits d’union (-), des traits de soulignement (_), des parenthèses ((, )) et des points (.).
    Nom Oui LA-TravelTime Nom de votre ressource d’application logique, qui doit être unique d’une région à l’autre et peut contenir uniquement des lettres, des chiffres, des traits d’union (-), des traits de soulignement (_), des parenthèses ((, )) et des points (.).
  5. Avant de continuer à effectuer des sélections, accédez à la section Plan. Pour Type de plan, sélectionnez Consommation pour afficher uniquement les paramètres d’un workflow d’application logique Consommation, qui s’exécute dans Azure Logic Apps multilocataire.

    La propriété Type de plan spécifie également le modèle de facturation à utiliser.

    Type de plan Description
    Standard Ce type d’applications logiques est la sélection par défaut, s’exécute dans une instance Azure Logic Apps monolocataire et utilise le modèle de facturation Standard.
    Consommation Ce type d’applications logiques s’exécute dans une instance Azure Logic Apps multilocataire mondiale et utilise le modèle de facturation Consommation.

    Important

    Pour les espaces de travail avec liaison privée, vous devez utiliser le plan Standard pour Logic Apps avec autoriser la configuration de réseau privée.

  6. Maintenant, poursuivez avec les sélections suivantes :

    Propriété Obligatoire Value Description
    Région Oui USA Ouest Région du centre de données Azure où sont stockées les informations de votre application. Cet exemple déploie l’exemple d’application logique dans la région USA Ouest dans Azure.

    Remarque : si votre abonnement est associé à un environnement de service d’intégration, cette liste comprend ces environnements.
    Activer l’analytique des journaux Oui Non Cette option s’affiche et s’applique uniquement lorsque vous sélectionnez le type d’application logique Consommation. Changez cette option uniquement quand vous voulez activer la journalisation des diagnostics. Pour ce tutoriel, conservez la sélection par défaut.
  7. Quand vous avez terminé, sélectionnez Vérifier + créer. Une fois qu’Azure a validé les informations relatives à votre ressource d’application logique, sélectionnez Créer.

  8. Une fois que Azure a déployé votre application, sélectionnez Accéder à la ressource.

    Azure ouvre le volet de sélection du modèle de workflow, qui affiche une vidéo de présentation, des déclencheurs couramment utilisés et des modèles de gabarit d’application logique.

  9. Faites défiler la page vers le bas au-delà de la vidéo et des déclencheurs courants jusqu’à la section Modèles, puis sélectionnez Application logique vide.

    Screenshot that shows the workflow template selection pane with

Configurer les paramètres de workflow

Cette application logique utilise des paramètres pour stocker des informations spécifiques dont vous aurez besoin pour exécuter le déploiement par lots.

  1. Dans le concepteur de workflow, sous la barre d’outils, sélectionnez l’option Paramètres et configurez ces derniers comme suit :

    Screenshot of all the parameters required in the workflow.

  2. Pour créer un paramètre, utilisez l’option Ajouter un paramètre :

    Screenshot showing how to add one parameter in designer.

  3. Créez les paramètres suivants.

    Paramètre Description Exemple de valeur
    tenant_id ID de locataire où le point de terminaison est déployé. 00000000-0000-0000-00000000
    client_id ID client du principal de service utilisé pour appeler le point de terminaison. 00000000-0000-0000-00000000
    client_secret Clé secrète client du principal de service utilisé pour appeler le point de terminaison. ABCDEFGhijkLMNOPQRstUVwz
    endpoint_uri URI de scoring du point de terminaison. https://<endpoint_name>.<region>.inference.ml.azure.com/jobs

    Important

    endpoint_uri est l’URI du point de terminaison que vous essayez d’exécuter. Le point de terminaison doit avoir un déploiement par défaut configuré.

    Conseil

    Utilisez les valeurs configurées lors de l’Authentification avec les points de terminaison de lot.

Ajouter le déclencheur

Nous voulons déclencher l’application logique chaque fois qu’un nouveau fichier est créé dans un dossier donné (ressource de données) d’un compte de stockage. L’application logique utilise les informations de l’événement pour appeler le point de terminaison de lot et transmettre le fichier spécifique à traiter.

  1. Dans le concepteur de workflow, sous la zone de recherche, sélectionnez Intégré.

  2. Dans la zone de recherche, entrez Event Grid, puis sélectionnez le déclencheur nommé Quand un événement de ressource se produit.

  3. Configurez le déclencheur comme suit :

    Propriété Valeur Description
    Abonnement Votre nom d’abonnement Abonnement dans lequel le compte de stockage Azure est placé.
    Type de ressource Microsoft.Storage.StorageAccounts Type de ressource qui émet les événements.
    Nom de la ressource Nom de votre compte de stockage Nom du compte de stockage dans lequel les fichiers seront générés.
    Élément de type d’événement Microsoft.Storage.BlobCreated Le type d'événement.
  4. Cliquez sur Ajouter un nouveau paramètre, puis sélectionnez Filtre de préfixe. Ajoutez la valeur /blobServices/default/containers/<container_name>/blobs/<path_to_data_folder>.

    Important

    Le filtre de préfixe permet à Event Grid de notifier uniquement le workflow lorsqu’un objet blob est créé dans le chemin d’accès spécifique que nous avons indiqué. Dans ce cas, nous sommes en mesure de créer des fichiers par un processus externe dans le dossier <path_to_data_folder> à l’intérieur du conteneur <container_name> dans le compte de stockage sélectionné. Configurez ce paramètre pour qu’il corresponde à l’emplacement de vos données. Sinon, l’événement est déclenché pour n’importe quel fichier créé à n’importe quel emplacement du compte de stockage. Pour plus d’informations, consultez Filtrage des événements pour Event Grid.

    Le déclencheur se présente comme suit :

    Screenshot of the trigger activity of the Logic App.

Configurer les actions

  1. Cliquez sur + Nouvelle étape.

  2. Dans le concepteur de workflow, sous la zone de recherche, sélectionnez Intégré, puis cliquez sur HTTP :

  3. Configurez l’action comme suit :

    Propriété Valeur Notes
    Méthode POST La méthode HTTP
    URI concat('https://login.microsoftonline.com/', parameters('tenant_id'), '/oauth2/token') Cliquez sur Ajouter un contexte dynamique, puis sur Expression pour entrer cette expression.
    En-têtes Content-Type avec la valeur application/x-www-form-urlencoded
    Corps concat('grant_type=client_credentials&client_id=', parameters('client_id'), '&client_secret=', parameters('client_secret'), '&resource=https://ml.azure.com') Cliquez sur Ajouter un contexte dynamique, puis sur Expression pour entrer cette expression.

    L’action se présente comme suit :

    Screenshot of the authorize activity of the Logic App.

  4. Cliquez sur + Nouvelle étape.

  5. Dans le concepteur de workflow, sous la zone de recherche, sélectionnez Intégré, puis cliquez sur HTTP :

  6. Configurez l’action comme suit :

    Propriété Valeur Notes
    Méthode POST La méthode HTTP
    URI endpoint_uri Cliquez sur Ajouter un contexte dynamique, puis sélectionnez-le sous parameters.
    En-têtes Content-Type avec la valeur application/json
    En-têtes Authorization avec la valeur concat('Bearer ', body('Authorize')['access_token']) Cliquez sur Ajouter un contexte dynamique, puis sur Expression pour entrer cette expression.
  7. Dans le Corps du paramètre, cliquez sur Ajouter un contexte dynamique, puis sur Expression pour entrer l’expression suivante :

    replace('{
     "properties": {
       "InputData": {
         "mnistinput": {
            "JobInputType" : "UriFile",
             "Uri" : "<JOB_INPUT_URI>"
           }
          }
      }
    }', '<JOB_INPUT_URI>', triggerBody()?[0]['data']['url'])
    

    Conseil

    La charge utile précédente correspond à un déploiement de modèle. Si vous utilisez un déploiement de composant pipeline, veuillez adapter le format en fonction des attentes des entrées du pipeline. Pour en savoir plus sur la structure de l’entrée dans les appels REST, consultez Créer des travaux et des données d’entrée pour les points de terminaison de lot (REST).

    L’action se présente comme suit :

    Screenshot of the invoke activity of the Logic App.

    Remarque

    Notez que cette dernière action déclenche le travail par lots, mais qu’il n’attend pas sa fin. Azure Logic Apps n’est pas conçu pour les applications de longue durée. Si vous devez attendre la fin du travail, nous vous recommandons de passer à Exécuter des points de terminaison de traitement par lots à partir d’Azure Data Factory.

  8. Cliquez sur Save(Enregistrer).

  9. L’application logique est prête à être exécutée et se déclenche automatiquement chaque fois qu’un nouveau fichier est créé sous le chemin indiqué. Vous remarquerez que l’application a bien reçu l’événement en vérifiant son historique des exécutions :

    Screenshot of the invoke history of the Logic App.

Étapes suivantes