Connecter votre fonction Java à Stockage Azure

Azure Functions vous permet de connecter des services Azure et d’autres ressources à des fonctions sans avoir à écrire votre propre code d’intégration. Ces liaisons, qui représentent l’entrée et la sortie, sont déclarées dans la définition de la fonction. Les données issues des liaisons sont fournies à la fonction en tant que paramètres. Un déclencheur est un type spécial de liaison d’entrée. Si une fonction ne peut avoir qu’un seul déclencheur, elle peut avoir plusieurs liaisons d’entrée et de sortie. Pour en savoir plus, consultez Concepts des déclencheurs et liaisons Azure Functions.

Cet article vous montre comment intégrer la fonction que vous avez créée dans l’article du guide de démarrage rapide précédent à une file d’attente Stockage Azure. La liaison de sortie que vous ajoutez à cette fonction écrit des données d’une requête HTTP dans un message en file d’attente.

La plupart des liaisons requièrent une chaîne de connexion stockée que Functions utilise pour accéder au service lié. Pour faciliter cette connexion, vous utilisez le compte de stockage que vous avez créé avec votre application de fonction. La connexion à ce compte est déjà stockée dans un paramètre d’application nommé AzureWebJobsStorage.

Prérequis

Avant de commencer cet article, suivez les étapes de la partie 1 du guide de démarrage rapide Java.

Télécharger les paramètres de l’application de fonction

Vous avez déjà créé une application de fonction dans Azure ainsi que le compte de stockage nécessaire. La chaîne de connexion pour ce compte est stockée de manière sécurisée dans les paramètres d’application au sein d’Azure. Dans cet article, vous allez écrire des messages dans une file d’attente de stockage au sein du même compte. Pour vous connecter à votre compte de stockage lors de l’exécution de la fonction localement, vous devez télécharger les paramètres de l’application dans le fichier local.settings.json.

À partir de la racine du projet, exécutez la commande Azure Functions Core Tools suivante pour télécharger les paramètres dans le fichier local.settings.json, en remplaçant <APP_NAME> par le nom de votre application de fonction décrite dans l’article précédent :

func azure functionapp fetch-app-settings <APP_NAME>

Il se peut que vous deviez vous connecter à votre compte Azure.

Important

Cette commande remplace tous les paramètres existants par des valeurs de votre application de fonction dans Azure.

Comme il contient des secrets, le fichier local.settings.json n’est jamais publié et doit être exclu du contrôle de code source.

Vous avez besoin de la valeur AzureWebJobsStorage, qui est la chaîne de connexion de compte de stockage. Cette connexion vous permet de vérifier que la liaison de sortie fonctionne comme prévu.

Activer les offres groupées d’extension

Le moyen le plus simple d’installer les extensions de liaison consiste à activer les offres groupées d’extension. Lorsque vous activez les offres groupées, un ensemble prédéfini de packages d’extension sont automatiquement installés.

Pour activer les offres groupées d’extension, ouvrez le fichier host.json et mettez à jour son contenu pour qu’il corresponde au code suivant :

{
    "version": "2.0",
    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[3.*, 4.0.0)"
    }
}

Vous pouvez maintenant ajouter la liaison de sortie de stockage à votre projet.

Ajouter une liaison de sortie

Dans un projet Java, les liaisons sont définies comme annotations de liaison sur la méthode de fonction. Le fichier function.json est ensuite généré automatiquement en fonction de ces annotations.

Accédez à l’emplacement de votre code de fonction sous src/main/java, ouvrez le fichier projet Function.java, puis ajoutez le paramètre suivant à la définition de la méthode run :

@QueueOutput(name = "msg", queueName = "outqueue", connection = "AzureWebJobsStorage") OutputBinding<String> msg

Le paramètre msg est un type OutputBinding<T>, qui représente une collection de chaînes. Ces chaînes sont écrites sous forme de messages dans une liaison de sortie lorsque la fonction se termine. Dans ce cas, la sortie est une file d’attente de stockage nommée outqueue. La chaîne de connexion pour le compte de stockage est définie par la méthode connection. Au lieu de passer la chaîne de connexion proprement dite, vous passez le paramètre d’application qui contient la chaîne de connexion du compte de stockage.

La définition de la méthode run doit maintenant être semblable à celle de l’exemple suivant :

@FunctionName("HttpTrigger-Java")
public HttpResponseMessage run(
        @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.FUNCTION)  
        HttpRequestMessage<Optional<String>> request, 
        @QueueOutput(name = "msg", queueName = "outqueue", connection = "AzureWebJobsStorage") 
        OutputBinding<String> msg, final ExecutionContext context) {
    ...
}

Ajouter le code qui utilise la liaison de sortie

À présent, vous pouvez utiliser le nouveau paramètre msg pour écrire dans la liaison de sortie à partir de votre code de fonction. Ajoutez la ligne de code suivante avant la réponse de réussite pour ajouter la valeur de name à la liaison de sortie msg.

msg.setValue(name);

Lorsque vous utilisez une liaison de sortie, vous n’avez pas besoin de recourir au code du Kit de développement logiciel (SDK) Stockage Azure pour l’authentification, l’obtention d’une référence de file d’attente ou l’écriture de données. La liaison de sortie de file d’attente et le runtime Functions effectuent ces tâches.

Votre méthode run doit maintenant être semblable à celle de l’exemple suivant :

public HttpResponseMessage run(
        @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) 
        HttpRequestMessage<Optional<String>> request, 
        @QueueOutput(name = "msg", queueName = "outqueue", 
        connection = "AzureWebJobsStorage") OutputBinding<String> msg, 
        final ExecutionContext context) {
    context.getLogger().info("Java HTTP trigger processed a request.");

    // Parse query parameter
    String query = request.getQueryParameters().get("name");
    String name = request.getBody().orElse(query);

    if (name == null) {
        return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
        .body("Please pass a name on the query string or in the request body").build();
    } else {
        // Write the name to the message queue. 
        msg.setValue(name);

        return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
    }
}

Mettre à jour les tests

Étant donné que l’archétype crée également un ensemble de tests, vous devez mettre à jour ces tests pour gérer le nouveau paramètre msg dans la signature de méthode run.

Accédez à l’emplacement de votre code de test sous src/test/Java, ouvrez le fichier projet Function.java et remplacez la ligne de code située sous //Invoke par le code suivant :

@SuppressWarnings("unchecked")
final OutputBinding<String> msg = (OutputBinding<String>)mock(OutputBinding.class);
final HttpResponseMessage ret = new Function().run(req, msg, context);

Vous êtes maintenant prêt à essayer la nouvelle liaison de sortie localement.

Exécuter la fonction localement

Comme auparavant, utilisez la commande suivante pour générer le projet et démarrer le runtime Functions localement :

mvn clean package 
mvn azure-functions:run

Notes

Comme vous avez activé des bundles d’extension dans le fichier host.json, l’extension de liaison de stockage a été téléchargée et installée lors du démarrage, avec les autres extensions de liaison Microsoft.

Comme précédemment, déclenchez la fonction à partir de la ligne de commande en utilisant cURL dans une nouvelle fenêtre de terminal :

curl -w "\n" http://localhost:7071/api/HttpTrigger-Java --data AzureFunctions

Cette fois, la liaison de sortie crée également une file d’attente nommée outqueue dans votre compte de stockage et ajoute un message avec cette même chaîne.

Ensuite, vous utilisez l’interface de ligne de commande Azure pour afficher la nouvelle file d’attente et vérifier qu’un message a été ajouté. Vous pouvez également afficher votre file d’attente en utilisant l’Explorateur Stockage Azure ou sur le portail Azure.

Définir la connexion de compte de stockage

Ouvrez le fichier local.settings.json et copiez la valeur d’AzureWebJobsStorage, qui est la chaîne de connexion de compte de stockage. Définissez la variable d’environnement AZURE_STORAGE_CONNECTION_STRING sur la chaîne de connexion à l’aide de la commande Bash suivante :

AZURE_STORAGE_CONNECTION_STRING="<STORAGE_CONNECTION_STRING>"

Lorsque vous définissez la chaîne de connexion dans la variable d’environnement AZURE_STORAGE_CONNECTION_STRING, vous pouvez accéder à votre compte de stockage sans devoir vous authentifier à chaque fois.

Interroger la file d’attente de stockage

Vous pouvez utiliser la commande az storage queue list pour afficher les files d’attente de stockage dans votre compte, comme dans l’exemple suivant :

az storage queue list --output tsv

La sortie de cette commande comprend une file d’attente nommée outqueue, qui a été créée lors de l’exécution de la fonction.

Ensuite, utilisez la commande az storage message peek pour afficher les messages dans cette file d’attente, comme dans l’exemple suivant :

echo `echo $(az storage message peek --queue-name outqueue -o tsv --query '[].{Message:content}') | base64 --decode`

La chaîne retournée doit être la même que le message que vous avez envoyé pour tester la fonction.

Notes

L’exemple précédent décode la chaîne retournée à partir de base64. En effet, les liaisons Stockage File d’attente écrivent dans Stockage Azure et lisent à partir de ce dernier sous forme de chaînes base64.

Redéployer le projet

Pour mettre à jour votre application publiée, réexécutez la commande suivante :

mvn azure-functions:deploy

Là encore, vous pouvez utiliser cURL pour tester la fonction déployée. Comme précédemment, transmettez la valeur AzureFunctions dans le corps de la requête POST à l’URL, comme dans l’exemple suivant :

curl -w "\n" https://fabrikam-functions-20190929094703749.azurewebsites.net/api/HttpTrigger-Java?code=zYRohsTwBlZ68YF.... --data AzureFunctions

Vous pouvez réexaminer le message de file d’attente de stockage pour vérifier que la liaison de sortie génère un nouveau message dans la file d’attente, comme prévu.

Nettoyer les ressources

Les autres démarrages rapides de cette collection reposent sur ce démarrage rapide. Si vous souhaitez poursuivre avec les guides de démarrage rapide ou les didacticiels suivants, ne nettoyez pas les ressources créées dans le cadre de ce guide de démarrage rapide. Sinon, utilisez la commande suivante pour supprimer toutes les ressources créées dans le cadre de ce guide de démarrage rapide :

az group delete --name myResourceGroup

Sélectionnez y lorsque vous y êtes invité.

Étapes suivantes

Vous avez mis à jour votre fonction déclenchée via HTTP pour écrire des données dans une file d’attente de stockage. Pour en savoir plus sur le développement de fonctions Azure Functions avec Java, consultez le Guide des développeurs Java sur Azure Functions et Déclencheurs et liaisons Azure Functions. Pour obtenir des exemples de projets Functions complets en Java, consultez les exemples Functions en Java.

Ensuite, vous devez activer la supervision Application Insights pour votre application de fonction :