Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Azure Functions vous permet de connecter Azure services 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 plus d’informations, consultez Azure Functions concepts de déclencheurs et de liaisons.
Cet article vous montre comment utiliser Visual Studio Code pour connecter Azure Cosmos DB à la fonction que vous avez créée dans l’article de démarrage rapide précédent. La liaison de sortie que vous ajoutez à cette fonction écrit des données de la requête HTTP dans un document JSON stocké dans un conteneur Azure Cosmos DB.
Avant de commencer, vous devez terminer le quickstart : Créer une fonction C# dans Azure à l’aide de Visual Studio Code. Si vous avez déjà nettoyé les ressources à la fin de cet article, passez à nouveau par les étapes pour recréer l’application de fonction et les ressources associées dans Azure.
Avant de commencer, vous devez terminer le démarrage rapide : Créer une fonction JavaScript dans Azure à l’aide de Visual Studio Code. Si vous avez déjà nettoyé les ressources à la fin de cet article, passez à nouveau par les étapes pour recréer l’application de fonction et les ressources associées dans Azure.
Remarque
Cet article prend en charge Node.js v4 pour Functions.
Avant de commencer, vous devez terminer le guide de démarrage rapide: Créer une fonction Python dans Azure à l’aide de Visual Studio Code. Si vous avez déjà nettoyé les ressources à la fin de cet article, passez à nouveau par les étapes pour recréer l’application de fonction et les ressources associées dans Azure.
Configurer votre environnement
Avant de get started, veillez à installer l’extension bases de données Azure pour Visual Studio Code.
Créer votre compte Azure Cosmos DB
Vous créez maintenant un compte de type serverless pour Azure Cosmos DB. Ce mode basé sur la consommation rend Azure Cosmos DB une option forte pour les charges de travail serverless.
Dans Visual Studio Code, sélectionnez View>Command Palette... puis dans la palette de commandes, recherchez
Azure Databases: Create Server...Quand vous y êtes invité, indiquez les informations suivantes :
Invite Sélection Select an Azure Database Server Choisissez Core (NoSQL) pour créer une base de données de documents que vous pouvez interroger à l’aide d’une syntaxe SQL ou d’un copilote de requête (Preview) en convertissant des invites en langage naturel en requêtes. En savoir plus sur Azure Cosmos DB. Nom du compte Entrez un nom unique pour identifier votre compte Azure Cosmos DB. Le nom peut contenir uniquement des lettres minuscules, des chiffres et des traits d’union (-), et doit comporter entre 3 et 31 caractères. Sélectionner un modèle de capacité Sélectionnez Serverless pour créer un compte en mode serverless. Sélectionner un groupe de ressources pour les nouvelles ressources Choisissez le groupe de ressources dans lequel vous avez créé votre application de fonction dans l’article précédent. Sélectionnez un emplacement pour les nouvelles ressources Sélectionnez un emplacement géographique pour héberger votre compte Azure Cosmos DB. Utilisez l'emplacement le plus proche de vous ou de vos utilisateurs pour obtenir le access le plus rapide à vos données. Une fois votre nouveau compte approvisionné, un message s’affiche dans la zone de notification.
Créer une base de données Azure Cosmos DB et un conteneur
Sélectionnez l’icône Azure dans la barre d’activité, développez Resources>Azure Cosmos DB, cliquez avec le bouton droit (Ctrl+sélectionner sur macOS) sur votre compte, et sélectionnez Créer une base de données....
Quand vous y êtes invité, indiquez les informations suivantes :
Invite Sélection Nom de la base de données Tapez my-database.Entrer un ID pour votre collection Tapez my-container.Entrer la clé de partition pour la collection Tapez /idcomme clé partition.Sélectionnez OK pour créer le conteneur et la base de données.
Mettre à jour les paramètres de votre application de fonction
Dans l'article de démarrage rapide précédent, vous avez créé une application de fonctions dans Azure. Dans cet article, vous mettez à jour votre application pour écrire des documents JSON dans le conteneur Azure Cosmos DB que vous avez créé. Pour vous connecter à votre compte Azure Cosmos DB, vous devez ajouter sa chaîne de connexion aux paramètres de l'application. Vous téléchargez ensuite le nouveau paramètre dans votre fichier local.settings.json afin de pouvoir vous connecter à votre compte Azure Cosmos DB lors de l’exécution locale.
Dans Visual Studio Code, cliquez avec le bouton droit (Ctrl+sélectionner sur macOS) sur votre nouveau compte Azure Cosmos DB, puis sélectionnez Copy Connection String.
Appuyez sur F1 pour ouvrir la palette de commandes, puis recherchez et exécutez la commande
Azure Functions: Add New Setting....Choisissez l’application de fonction que vous avez créée dans l’article précédent. Quand vous y êtes invité, indiquez les informations suivantes :
Invite Sélection Entrer le nom du nouveau paramètre d’application Tapez CosmosDbConnectionString.Entrez la valeur de « CosmosDbConnectionString » Collez le connection string de votre compte Cosmos DB Azure que vous avez copié. Vous pouvez également configurer l’identité Microsoft Entra comme alternative. Cela crée un paramètre d’application nommé connexion
CosmosDbConnectionStringdans votre application de fonction dans Azure. Vous pouvez maintenant télécharger ce paramètre dans votre fichier local.settings.json.Appuyez à nouveau sur F1 pour ouvrir la palette de commandes, puis recherchez et exécutez la commande
Azure Functions: Download Remote Settings....Choisissez l’application de fonction que vous avez créée dans l’article précédent. Sélectionnez Oui pour tout pour remplacer les paramètres locaux existants.
Cela télécharge tous les paramètres de Azure vers votre project local, y compris le nouveau paramètre de connection string. La plupart des paramètres téléchargés ne sont pas utilisés lors de l’exécution locale.
Inscrire des extensions de liaison
Étant donné que vous utilisez une liaison de sortie Azure Cosmos DB, vous devez avoir installé l'extension de liaisons correspondante avant d'exécuter le project.
À l’exception des déclencheurs HTTP et de minuteur, les liaisons sont implémentées en tant que packages d’extension. Exécutez la commande dotnet add package suivante dans la fenêtre terminal pour ajouter le package d’extension Azure Cosmos DB à votre project.
dotnet add package Microsoft.Azure.Functions.Worker.Extensions.CosmosDB
Votre project a été configuré pour utiliser des bundles extension, qui installe automatiquement un ensemble prédéfini de packages d’extension.
L’utilisation des bundles d’extensions est activée dans le fichier host.json à la racine du project, qui apparaît comme suit :
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
}
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
},
"concurrency": {
"dynamicConcurrencyEnabled": true,
"snapshotPersistenceEnabled": true
},
"extensions": {
"cosmosDB": {
"connectionMode": "Gateway"
}
}
}
Votre project a été configuré pour utiliser des bundles extension, qui installe automatiquement un ensemble prédéfini de packages d’extension.
L’utilisation des bundles d’extensions est activée dans le fichier host.json à la racine du project, qui apparaît comme suit :
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[3.*, 4.0.0)"
}
}
À présent, vous pouvez ajouter la liaison de sortie Azure Cosmos DB à votre projet.
Ajouter une liaison de sortie
Dans un projet de bibliothèque de classes C#, les liaisons sont définies comme attributs de liaison sur la méthode de fonction.
Ouvrez le fichier HttpExample.cs project et ajoutez les classes suivantes :
public class MultiResponse
{
[CosmosDBOutput("my-database", "my-container",
Connection = "CosmosDbConnectionSetting", CreateIfNotExists = true)]
public MyDocument Document { get; set; }
public IActionResult HttpResponse { get; set; }
}
public class MyDocument {
public string id { get; set; }
public string message { get; set; }
}
La classe MyDocument définit un objet qui est écrit dans la base de données. Le connection string du compte Storage est défini par la propriété Connection. Dans ce cas, vous pouvez omettre Connection, car vous utilisez déjà le compte storage par défaut.
La classe MultiResponse vous permet d’écrire dans la collection spécifiée dans la Azure Cosmos DB et de retourner un message de réussite HTTP. Étant donné que vous devez retourner un objet MultiResponse, vous devez également mettre à jour la signature de la méthode.
Des attributs spécifiques définissent le nom du conteneur et le nom de sa base de données parente. Le connection string de votre compte Cosmos DB Azure est défini par le CosmosDbConnectionString.
Les attributs de liaison sont définis directement dans votre code de fonction. La configuration de sortie d’Azure Cosmos DB décrit les champs requis pour une liaison de sortie d’Azure Cosmos DB.
Pour ce scénario MultiResponse, vous devez ajouter une liaison de sortie extraOutputs à la fonction.
app.http('HttpExample', {
methods: ['GET', 'POST'],
extraOutputs: [sendToCosmosDb],
handler: async (request, context) => {
Ajoutez les propriétés suivantes à la configuration de liaison :
const sendToCosmosDb = output.cosmosDB({
databaseName: 'my-database',
containerName: 'my-container',
createIfNotExists: false,
connection: 'CosmosDBConnectionString',
});
Les attributs de liaison sont définis directement dans le fichier function_app.py. Vous utilisez le décorateur cosmos_db_output pour ajouter une liaison de sortie Azure Cosmos DB :
@app.cosmos_db_output(arg_name="outputDocument", database_name="my-database",
container_name="my-container", connection="CosmosDbConnectionString")
Dans ce code, arg_name identifie le paramètre de liaison référencé dans votre code, database_name et container_name sont les noms de base de données et de collection dans lesquels la liaison écrit, et connection est le nom d’un paramètre d’application qui contient le connection string du compte Azure Cosmos DB, qui se trouve dans le paramètre CosmosDbConnectionString dans le fichier local.settings.json.
Ajouter le code qui utilise la liaison de sortie
Remplacez la méthode existante Run par le code suivant :
[Function("HttpExample")]
public MultiResponse Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req)
{
_logger.LogInformation("C# HTTP trigger function processed a request.");
var message = "Welcome to Azure Functions!";
// Return a response to both HTTP trigger and Azure Cosmos DB output binding.
return new MultiResponse()
{
Document = new MyDocument
{
id = System.Guid.NewGuid().ToString(),
message = message
},
HttpResponse = new OkObjectResult(message)
};
}
Ajoutez du code qui utilise l’objet de liaison de sortie extraInputs sur context pour envoyer un document JSON à la fonction de liaison de sortie nommée, sendToCosmosDb. Ajoutez ce code avant l’instruction return.
context.extraOutputs.set(sendToCosmosDb, {
// create a random ID
id:
new Date().toISOString() + Math.random().toString().substring(2, 10),
name: name,
});
À ce stade, votre fonction doit se présenter comme suit :
const { app, output } = require('@azure/functions');
const sendToCosmosDb = output.cosmosDB({
databaseName: 'my-database',
containerName: 'my-container',
createIfNotExists: false,
connection: 'CosmosDBConnectionString',
});
app.http('HttpExampleToCosmosDB', {
methods: ['GET', 'POST'],
extraOutputs: [sendToCosmosDb],
handler: async (request, context) => {
try {
context.log(`Http function processed request for url "${request.url}"`);
const name = request.query.get('name') || (await request.text());
if (!name) {
return { status: 404, body: 'Missing required data' };
}
// Output to Database
context.extraOutputs.set(sendToCosmosDb, {
// create a random ID
id:
new Date().toISOString() + Math.random().toString().substring(2, 10),
name: name,
});
const responseMessage = name
? 'Hello, ' +
name +
'. This HTTP triggered function executed successfully.'
: 'This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.';
// Return to HTTP client
return { body: responseMessage };
} catch (error) {
context.log(`Error: ${error}`);
return { status: 500, body: 'Internal Server Error' };
}
},
});
Ce code retourne à présent un objet MultiResponse qui contient à la fois un document et une réponse HTTP.
Mettez à jour function_app.py pour qu’elle corresponde au code suivant. Ajoutez le paramètre outputDocument à la définition de fonction et outputDocument.set() sous l’instruction if name: :
import azure.functions as func
import logging
app = func.FunctionApp()
@app.function_name(name="HttpTrigger1")
@app.route(route="hello", auth_level=func.AuthLevel.FUNCTION)
@app.queue_output(arg_name="msg", queue_name="outqueue", connection="AzureWebJobsStorage")
@app.cosmos_db_output(arg_name="outputDocument", database_name="my-database", container_name="my-container", connection="CosmosDbConnectionString")
def test_function(req: func.HttpRequest, msg: func.Out[func.QueueMessage],
outputDocument: func.Out[func.Document]) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
logging.info('Python Cosmos DB trigger function processed a request.')
name = req.params.get('name')
if not name:
try:
req_body = req.get_json()
except ValueError:
pass
else:
name = req_body.get('name')
if name:
outputDocument.set(func.Document.from_dict({"id": name}))
msg.set(name)
return func.HttpResponse(f"Hello {name}!")
else:
return func.HttpResponse(
"Please pass a name on the query string or in the request body",
status_code=400
)
Le document {"id": "name"} est créé dans la collection de base de données spécifiée dans la liaison.
Exécuter la fonction localement
Visual Studio Code s’intègre à Outils Azure Functions Core pour vous permettre d’exécuter ce projet sur votre ordinateur de développement local avant de le publier sur Azure. Si vous n'avez pas encore installé Core Tools localement, vous êtes invité à l'installer la première fois que vous exécutez votre project.
Pour appeler votre fonction, appuyez sur F5 pour démarrer le projet d'application de fonctions. Le panneau Terminal affiche la sortie des outils principaux. Votre application démarre dans le panneau Terminal. Vous pouvez voir le point de terminaison de l’URL de votre fonction déclenchée par HTTP en cours d’exécution localement.
Si vous n'avez pas encore installé Core Tools, sélectionnez Install pour l'installer lorsque vous y êtes invité à le faire.
Si vous rencontrez des problèmes d'exécution sur Windows, vérifiez que le terminal par défaut pour Visual Studio Code n'est pas défini sur WSL Bash.Une fois les outils principaux en cours d’exécution, accédez à la zone Azure : Functions. Sous Functions, développez Local Project>Functions. Cliquez avec le bouton droit (Windows) ou effectuez Ctrl-clic (macOS) sur la fonction
HttpExample, puis choisissez Exécuter la fonction maintenant.
Dans Entrez le corps de la requête, appuyez sur Entrée pour envoyer un message de requête à votre fonction.
Lorsque la fonction s’exécute localement et retourne une réponse, une notification est déclenchée dans Visual Studio Code. Les informations relatives à l’exécution de la fonction sont affichées dans le panneau Terminal.
Appuyez sur Ctrl+C pour arrêter Core Tools et déconnecter le débogueur.
Exécuter la fonction localement
Comme dans l'article précédent, appuyez sur F5 pour démarrer le projet d'application de fonction et les Core Tools.
Avec Core Tools en cours d’exécution, accédez à la zone Azure : Functions. Sous Functions, développez Local Project>Functions. Cliquez avec le bouton droit (Ctrl-clic sur Mac) sur la fonction
HttpExample, puis choisissez Exécuter la fonction maintenant.Exécuter la fonction maintenant à partir de Visual Studio Code
Dans Entrez le corps de la requête, vous voyez la valeur du corps du message de requête pour
{ "name": "Azure" }. Appuyez sur Entrée pour envoyer ce message de demande à votre fonction.Une fois la réponse retournée, appuyez sur Ctrl+C pour arrêter Core Tools.
Vérifier qu’un document JSON a été créé
Sur le portail Azure, revenez dans votre compte Azure Cosmos DB, puis sélectionnez Data Explorer.
Développez votre base de données et votre conteneur, puis sélectionnez Éléments pour lister les documents créés dans votre conteneur.
Vérifiez qu’un document JSON a été créé par la liaison de sortie.
Redéployer et tester l’application mise à jour
Dans Visual Studio Code, appuyez sur F1 pour ouvrir la palette de commandes. Dans la palette de commandes, recherchez et sélectionnez
Azure Functions: Deploy to function app....Choisissez l’application de fonction que vous avez créée dans le premier article. Étant donné que vous redéployez votre project dans la même application, sélectionnez Deploy pour ignorer l'avertissement concernant le remplacement des fichiers.
Une fois le déploiement terminé, vous pouvez à nouveau utiliser la fonction Execute Maintenant... fonctionnalité pour déclencher la fonction dans Azure. Cette commande récupère automatiquement la clé d'accès de la fonction et l'utilise lors de l'appel du point de terminaison du déclencheur HTTP.
Là encore vérifiez les documents créés dans votre conteneur Azure Cosmos DB pour vérifier que la liaison de sortie génère à nouveau un nouveau document JSON.
Nettoyer les ressources
Dans Azure, ressources se réfèrent aux applications de fonction, aux fonctions, aux comptes de stockage, etc. Elles sont rassemblées en groupes de ressources, et vous pouvez supprimer tous les éléments d’un groupe en supprimant le groupe.
Vous avez créé des ressources pour effectuer ces démarrages rapides. Vous pouvez être facturé pour ces ressources, selon l’état de votre compte et la tarification des services. Si vous n’avez plus besoin des ressources, voici comment les supprimer :
Dans Visual Studio Code, appuyez sur F1 pour ouvrir la palette de commandes. Dans la palette de commandes, recherchez et sélectionnez
Azure: Open in portal.Choisissez votre application de fonction et appuyez sur Entrée. La page de l’application de fonction s’ouvre dans le Azure portal.
Sous l’onglet Vue d’ensemble, sélectionnez le lien nommé à côté de Groupe de ressources.
Dans la page Groupe de ressources, passez en revue la liste des ressources incluses et vérifiez qu’elles correspondent à celles que vous souhaitez supprimer.
Sélectionnez Supprimer le groupe de ressources et suivez les instructions.
La suppression peut prendre quelques minutes. Une fois terminée, une notification s’affiche pendant quelques secondes. Vous pouvez également sélectionner l’icône représentant une cloche en haut de la page pour afficher la notification.
Étapes suivantes
Vous avez mis à jour votre fonction déclenchée par HTTP pour écrire des documents JSON dans un conteneur Azure Cosmos DB. Vous pouvez maintenant en savoir plus sur le développement de Fonctions à l’aide de Visual Studio Code :