Didacticiel : Exécuter Azure Functions à partir des travaux Azure Stream AnalyticsTutorial: Run Azure Functions from Azure Stream Analytics jobs

Vous pouvez exécuter Azure Functions à partir d’Azure Stream Analytics en configurant Functions comme l’un des récepteurs de sortie de la tâche Stream Analytics.You can run Azure Functions from Azure Stream Analytics by configuring Functions as one of the output sinks to the Stream Analytics job. Functions offre une expérience de calcul à la demande basée sur des événements, qui vous permet d’implémenter le code qui est déclenché par les événements qui se produisent dans Azure ou dans des services tiers.Functions are an event-driven, compute-on-demand experience that lets you implement code that is triggered by events occurring in Azure or third-party services. Comme ce logiciel peut répondre à des déclencheurs, il constitue l’outil de sortie logique pour des travaux Stream Analytics.This ability of Functions to respond to triggers makes it a natural output to Stream Analytics jobs.

Stream Analytics appelle Functions via des déclencheurs HTTP.Stream Analytics invokes Functions through HTTP triggers. L’adaptateur de sortie de Functions permet aux utilisateurs de connecter Functions à Stream Analytics, de telle sorte que les événements puissent être déclenchés en fonction des requêtes Stream Analytics.The Functions output adapter allows users to connect Functions to Stream Analytics, such that the events can be triggered based on Stream Analytics queries.

Ce tutoriel vous montre comment effectuer les opérations suivantes :In this tutorial, you learn how to:

  • Créer et exécuter un travail Stream AnalyticsCreate and run a Stream Analytics job
  • Créer une instance Cache Redis AzureCreate an Azure Cache for Redis instance
  • Création d’une fonction AzureCreate an Azure Function
  • Consulter les résultats dans Cache Redis AzureCheck Azure Cache for Redis for results

Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.If you don’t have an Azure subscription, create a free account before you begin.

Configurer un travail Stream Analytics pour exécuter une fonctionConfigure a Stream Analytics job to run a function

Cette section explique comment configurer un travail Stream Analytics pour exécuter une fonction qui écrit des données dans Cache Redis Azure.This section demonstrates how to configure a Stream Analytics job to run a function that writes data to Azure Cache for Redis. Le travail Stream Analytics lit les événements d’Azure Event Hubs et exécute une requête qui appelle la fonction.The Stream Analytics job reads events from Azure Event Hubs, and runs a query that invokes the function. Cette fonction lit les données à partir du travail Stream Analytics et les écrit dans Cache Redis Azure.This function reads data from the Stream Analytics job, and writes it to Azure Cache for Redis.

Schéma montrant les relations entre les services Azure

Créer un travail Stream Analytics en utilisant Event Hubs comme entréeCreate a Stream Analytics job with Event Hubs as input

Suivez le didacticiel Détection des fraudes en temps réel pour créer un concentrateur d’événements, démarrer l’application de générateur d’événements et créer un travail Stream Analytics.Follow the Real-time fraud detection tutorial to create an event hub, start the event generator application, and create a Stream Analytics job. Ignorez les étapes de création de la requête et de la sortie.Skip the steps to create the query and the output. Consultez plutôt les sections suivantes pour configurer la sortie Azure Functions.Instead, see the following sections to set up an Azure Functions output.

Créer une instance Cache Redis AzureCreate an Azure Cache for Redis instance

  1. Créez un cache dans Cache Redis Azure en suivant les étapes décrites dans la section Create a cache (Créer un cache).Create a cache in Azure Cache for Redis by using the steps described in Create a cache.

  2. Une fois le cache créé, sous Paramètres, sélectionnez Clés d’accès.After you create the cache, under Settings, select Access Keys. Notez la chaîne de connexion primaire.Make a note of the Primary connection string.

    Capture d’écran de la chaîne de connexion de Cache Redis Azure

Créer une fonction dans Azure Functions qui permet d’écrire des données dans Cache Redis AzureCreate a function in Azure Functions that can write data to Azure Cache for Redis

  1. Consultez la section Créer une application de fonction de la documentation Functions.See the Create a function app section of the Functions documentation. Cette section vous explique comment créer une application de fonction et une fonction déclenchée par HTTP dans Azure Functions en utilisant le langage CSharp.This walks you through how to create a function app and an HTTP-triggered function in Azure Functions, by using the CSharp language.

  2. Accédez à la fonction run.csx.Browse to the run.csx function. Mettez-la à jour avec le code suivant.Update it with the following code. Remplacez «< your redis cache connection string goes here >» par la chaîne de connexion principale de Cache Redis Azure que vous avez récupérée dans la section précédente.Replace "<your Azure Cache for Redis connection string goes here>" with the Azure Cache for Redis primary connection string that you retrieved in the previous section.

    using System;
    using System.Net;
    using System.Threading.Tasks;
    using StackExchange.Redis;
    using Newtonsoft.Json;
    using System.Configuration;
    
    public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
    {
        log.Info($"C# HTTP trigger function processed a request. RequestUri={req.RequestUri}");
    
        // Get the request body
        dynamic dataArray = await req.Content.ReadAsAsync<object>();
    
        // Throw an HTTP Request Entity Too Large exception when the incoming batch(dataArray) is greater than 256 KB. Make sure that the size value is consistent with the value entered in the Stream Analytics portal.
    
        if (dataArray.ToString().Length > 262144)
        {
            return new HttpResponseMessage(HttpStatusCode.RequestEntityTooLarge);
        }
        var connection = ConnectionMultiplexer.Connect("<your Azure Cache for Redis connection string goes here>");
        log.Info($"Connection string.. {connection}");
    
        // Connection refers to a property that returns a ConnectionMultiplexer
        IDatabase db = connection.GetDatabase();
        log.Info($"Created database {db}");
    
        log.Info($"Message Count {dataArray.Count}");
    
        // Perform cache operations using the cache object. For example, the following code block adds few integral data types to the cache
        for (var i = 0; i < dataArray.Count; i++)
        {
            string time = dataArray[i].time;
            string callingnum1 = dataArray[i].callingnum1;
            string key = time + " - " + callingnum1;
            db.StringSet(key, dataArray[i].ToString());
            log.Info($"Object put in database. Key is {key} and value is {dataArray[i].ToString()}");
    
            // Simple get of data types from the cache
            string value = db.StringGet(key);
            log.Info($"Database got: {value}");
        }
    
        return req.CreateResponse(HttpStatusCode.OK, "Got");
    }
    
    

    Lorsque Stream Analytics reçoit une erreur « HTTP Request Entity Too Large » de la part de la fonction, il réduit la taille des lots envoyés à Functions.When Stream Analytics receives the "HTTP Request Entity Too Large" exception from the function, it reduces the size of the batches it sends to Functions. Le code suivant garantit que Stream Analytics n’envoie pas de lots trop volumineux.The following code ensures that Stream Analytics doesn't send oversized batches. Vérifiez également que les valeurs de taille et de nombre de lots maximum utilisées dans la fonction correspondent à celles qui ont été saisies dans le portail Stream Analytics.Make sure that the maximum batch count and size values used in the function are consistent with the values entered in the Stream Analytics portal.

    if (dataArray.ToString().Length > 262144)
        {
            return new HttpResponseMessage(HttpStatusCode.RequestEntityTooLarge);
        }
    
  3. Dans un éditeur de texte de votre choix, créez un fichier JSON nommé project.json.In a text editor of your choice, create a JSON file named project.json. Collez le code suivant et enregistrez-le sur votre ordinateur local.Paste the following code, and save it on your local computer. Ce fichier contient les dépendances du package NuGet dont a besoin la fonction C#.This file contains the NuGet package dependencies required by the C# function.

    {
        "frameworks": {
            "net46": {
                "dependencies": {
                    "StackExchange.Redis":"1.1.603",
                    "Newtonsoft.Json": "9.0.1"
                }
            }
        }
    }
    
    
  4. Revenez au portail Azure.Go back to the Azure portal. Sous l’onglet Fonctionnalités de la plateforme, accédez à votre fonction.From the Platform features tab, browse to your function. Sous Outils de développement, sélectionnez Éditeur App Service.Under Development Tools, select App Service Editor.

    Capture d’écran de l’Éditeur App Service

  5. Dans l’éditeur App Service, cliquez avec le bouton droit sur votre répertoire racine et téléchargez le fichier project.json.In the App Service Editor, right-click your root directory, and upload the project.json file. Une fois le téléchargement terminé, actualisez la page.After the upload is successful, refresh the page. Vous devriez maintenant voir un fichier généré automatiquement appelé project.lock.json.You should now see an autogenerated file named project.lock.json. Ce fichier généré automatiquement contient des références aux fichiers .dll spécifiés dans le fichier project.json.The autogenerated file contains references to the .dll files that are specified in the project.json file.

    Capture d’écran de l’Éditeur App Service

Mettre à jour le travail Stream Analytics en utilisant la fonction comme sortieUpdate the Stream Analytics job with the function as output

  1. Dans le portail Azure, ouvrez votre travail Stream Analytics.Open your Stream Analytics job on the Azure portal.

  2. Accédez à votre fonction et sélectionnez Vue d’ensemble > Sorties > Ajouter.Browse to your function, and select Overview > Outputs > Add. Pour ajouter une nouvelle sortie, sélectionnez Azure Function pour l’option de récepteur.To add a new output, select Azure Function for the sink option. L’adaptateur de sortie Functions a les propriétés suivantes :The Functions output adapter has the following properties:

    Nom de la propriétéProperty name DescriptionDescription
    Alias de sortieOutput alias Nom convivial que vous utilisez dans la requête du travail pour faire référence à la sortie.A user-friendly name that you use in the job's query to reference the output.
    Option d’importationImport option Vous pouvez utiliser la fonction de l’abonnement actuel ou renseigner manuellement les paramètres si la fonction se trouve dans un autre abonnement.You can use the function from the current subscription, or provide the settings manually if the function is located in another subscription.
    Function AppFunction App Nom de votre application Functions.Name of your Functions app.
    FonctionFunction Nom de la fonction dans votre application Functions (nom de votre fonction run.csx).Name of the function in your Functions app (name of your run.csx function).
    Taille de lot maximaleMax Batch Size Définit la taille maximale de chaque lot de sortie envoyé à votre fonction, en octets.Sets the maximum size for each output batch which is sent to your function in bytes. Par défaut, cette valeur est définie à 262 144 octets (256 Ko).By default, this value is set to 262,144 bytes (256 KB).
    Nombre maximal de lotsMax Batch Count Spécifie le nombre maximal d’événements dans chaque lot envoyé à la fonction.Specifies the maximum number of events in each batch that is sent to the function. La valeur par défaut est 100.The default value is 100. Cette propriété est facultative.This property is optional.
    CléKey Vous permet d’utiliser une fonction d’un autre abonnement.Allows you to use a function from another subscription. Indiquez la valeur de la clé pour accéder à votre fonction.Provide the key value to access your function. Cette propriété est facultative.This property is optional.
  3. Indiquez un nom pour l’alias de sortie.Provide a name for the output alias. Dans ce didacticiel, il est nommé saop1, mais vous pouvez utiliser n’importe quel nom de votre choix.In this tutorial, it is named saop1, but you can use any name of your choice. Renseignez les autres détails.Fill in other details.

  4. Ouvrez votre travail Stream Analytics et mettez à jour la requête comme suit.Open your Stream Analytics job, and update the query to the following. Si vous n’avez pas nommé votre récepteur de sortie saop1, n’oubliez pas de modifier le nom dans la requête.If you did not name your output sink saop1, remember to change it in the query.

     SELECT
             System.Timestamp as Time, CS1.CallingIMSI, CS1.CallingNum as CallingNum1,
             CS2.CallingNum as CallingNum2, CS1.SwitchNum as Switch1, CS2.SwitchNum as Switch2
         INTO saop1
         FROM CallStream CS1 TIMESTAMP BY CallRecTime
            JOIN CallStream CS2 TIMESTAMP BY CallRecTime
             ON CS1.CallingIMSI = CS2.CallingIMSI AND DATEDIFF(ss, CS1, CS2) BETWEEN 1 AND 5
         WHERE CS1.SwitchNum != CS2.SwitchNum
    
  5. Démarrez l’application telcodatagen.exe en exécutant la commande suivante dans la ligne de commande.Start the telcodatagen.exe application by running the following command in command line. La commande utilise le format telcodatagen.exe [#NumCDRsPerHour] [SIM Card Fraud Probability] [#DurationHours].The command uses the format telcodatagen.exe [#NumCDRsPerHour] [SIM Card Fraud Probability] [#DurationHours].

    telcodatagen.exe 1000 0.2 2
    
  6. Démarrez le travail Stream Analytics.Start the Stream Analytics job.

Consulter les résultats dans Cache Redis AzureCheck Azure Cache for Redis for results

  1. Accédez au Portail Azure et recherchez votre instance Cache Redis Azure.Browse to the Azure portal, and find your Azure Cache for Redis. Sélectionnez Console.Select Console.

  2. Utilisez les commandes Cache Redis Azure pour vérifier que vos données se trouvent dans Cache Redis Azure.Use Azure Cache for Redis commands to verify that your data is in Azure Cache for Redis. (La commande prend le format Get {clé}.) Par exemple :(The command takes the format Get {key}.) For example:

    Get "12/19/2017 21:32:24 - 123414732"Get "12/19/2017 21:32:24 - 123414732"

    Cette commande doit produire la valeur de la clé spécifiée :This command should print the value for the specified key:

    Capture d’écran de la sortie de Cache Redis Azure

Gestion des erreurs et nouvelles tentativesError handling and retries

En cas de défaillance lors de l’envoi d’événements vers Azure Functions, Stream Analytics effectue une nouvelle tentative pour mener à bien l’opération.In the event of a failure while sending events to Azure Functions, Stream Analytics retries to successfully complete the operation. Dans les cas suivants, aucune nouvelle tentative n’est effectuée :However, there are some failures for which retries are not attempted and they are as follows:

  1. HttpRequestExceptionsHttpRequestExceptions
  2. Entité de requête trop grande (code d’erreur HTTP 413)Request Entity Too Large (Http error code 413)
  3. ApplicationExceptionsApplicationExceptions

Problèmes connusKnown issues

Dans le portail Azure, lorsque vous essayez de rétablir les valeurs maximales de taille et de nombre de lots à des valeurs vides (par défaut), la valeur bascule sur la valeur précédemment saisie au moment de la sauvegarde.In the Azure portal, when you try to reset the Max Batch Size/ Max Batch Count value to empty (default), the value changes back to the previously entered value upon save. Dans ce cas, entrez manuellement les valeurs par défaut pour ces champs.Manually enter the default values for these fields in this case.

Actuellement, l’utilisation du routage Http sur votre instance Azure Functions n’est pas prise en charge par Stream Analytics.The use of Http routing on your Azure Functions is currently not supported by Stream Analytics.

Supprimer des ressourcesClean up resources

Lorsque vous n’en avez plus besoin, supprimez le groupe de ressources, le travail de streaming et toutes les ressources associées.When no longer needed, delete the resource group, the streaming job, and all related resources. La suppression du travail évite la facturation des unités de streaming consommées par le travail.Deleting the job avoids billing the streaming units consumed by the job. Si vous envisagez d’utiliser le travail à l’avenir, vous pouvez l’arrêter et le redémarrer plus tard lorsque vous en avez besoin.If you're planning to use the job in future, you can stop it and re-start it later when you need. Si vous ne pensez pas continuer à utiliser ce travail, supprimez toutes les ressources créées pendant ce guide de démarrage rapide en procédant comme suit :If you are not going to continue to use this job, delete all resources created by this quickstart by using the following steps:

  1. Dans le menu de gauche du portail Azure, cliquez sur Groupes de ressources, puis sur le nom de la ressource que vous avez créée.From the left-hand menu in the Azure portal, click Resource groups and then click the name of the resource you created.
  2. Sur la page de votre groupe de ressources, cliquez sur Supprimer, tapez le nom de la ressource à supprimer dans la zone de texte, puis cliquez sur Supprimer.On your resource group page, click Delete, type the name of the resource to delete in the text box, and then click Delete.

Étapes suivantesNext steps

Dans ce didacticiel, vous avez créé un travail Stream Analytics simple, qui exécute une fonction Azure. Pour en savoir plus sur les travaux Stream Analytics, passez au didacticiel suivant :In this tutorial, you have create a simple Stream Analytics job, that runs an Azure Function, to learn more about Stream Analytics jobs, continue to the next tutorial: