Démarrage rapide : Créer une fonction C# dans Azure à partir de la ligne de commande

Dans cet article, vous utilisez les outils ligne de commande pour créer une fonction C# qui répond aux requêtes HTTP. Après avoir testé le code localement, vous le déployez dans l’environnement serverless d’Azure Functions.

Cet article crée une fonction déclenchée par HTTP qui s'exécute sur .NET 8 dans un processus Worker isolé. Pour obtenir des informations sur les versions de .NET prises en charge pour les fonctions C#, consultez Versions prises en charge. Il existe également une version basée sur Visual Studio Code de cet article.

Le fait de suivre ce guide de démarrage rapide entraîne une faible dépense de quelques cents USD tout au plus dans votre compte Azure.

Configurer votre environnement local

Avant de commencer la lecture cet article, vous devez disposer des éléments suivants :

Vous avez aussi besoin d’un compte Azure avec un abonnement actif. Créez un compte gratuitement.

Installer Azure Functions Core Tools

La méthode recommandée pour installer Core Tools dépend du système d’exploitation de votre ordinateur de développement local.

Les étapes suivantes utilisent un programme d’installation Windows (MSI) pour installer Core Tools v4.x. Pour plus d’informations sur les autres programmes d’installation basés sur des packages, consultez le fichier Lisezmoi des outils principaux.

Téléchargez et exécutez le programme d’installation de Core Tools, selon votre version de Windows :

Si vous avez précédemment utilisé Windows installer (MSI) pour installer Core Tools sur Windows, vous devez désinstaller l’ancienne version de la fonction Ajout/suppression de programmes avant d’installer la dernière version.

Créer un projet de fonction local

Dans Azure Functions, un projet de fonction est un conteneur pour une ou plusieurs fonctions qui répondent chacune à un déclencheur spécifique. Toutes les fonctions d’un projet partagent les mêmes configurations locale et d’hébergement. Dans cette section, vous créez un projet de fonction qui contient une seule fonction.

  1. Exécutez la commande func init, de la façon suivante, pour créer un projet Functions dans un dossier nommé LocalFunctionProj avec le runtime spécifié :

    func init LocalFunctionProj --worker-runtime dotnet-isolated --target-framework net8.0
    
  2. Accédez au dossier du projet :

    cd LocalFunctionProj
    

    Ce dossier contient divers fichiers pour le projet, notamment des fichiers config nommés local.settings.json et host.json. Dans la mesure où local.settings.json peut contenir des secrets téléchargés à partir d’Azure, le fichier est exclu du contrôle de code source par défaut dans le fichier .gitignore.

  3. Ajoutez une fonction à votre projet à l’aide de la commande suivante, où l’argument --name est le nom unique de votre fonction (HttpExample) et où l’argument --template spécifie le déclencheur de la fonction (HTTP).

    func new --name HttpExample --template "HTTP trigger" --authlevel "anonymous"
    

    func new crée un fichier de code HttpExample.cs.

(Facultatif) Examiner le contenu du fichier

Si vous le souhaitez, vous pouvez passer à Exécuter la fonction localement et examiner le contenu du fichier plus tard.

HttpExample.cs

HttpExample.cs contient une méthode Run qui reçoit des données de requête dans la variable req en tant qu'objet HttpRequest. Ce paramètre est décoré avec l'attribut HttpTriggerAttribute, pour définir le comportement du déclencheur.

using System.Net;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace Company.Function
{
    public class HttpExample
    {
        private readonly ILogger<HttpExample> _logger;

        public HttpExample(ILogger<HttpExample> logger)
        {
            _logger = logger;
        }

        [Function("HttpExample")]
        public IActionResult Run([HttpTrigger(AuthorizationLevel.AuthLevelValue, "get", "post")] HttpRequest req)
        {            
            _logger.LogInformation("C# HTTP trigger function processed a request.");

            return new OkObjectResult("Welcome to Azure Functions!");
        }
    }
}

L'objet de retour est un objet IActionResult qui contient les données renvoyées dans la réponse HTTP.

Pour en savoir plus, voir Déclencheurs et liaisons HTTP Azure Functions.

Exécuter la fonction localement

  1. Exécutez votre fonction en démarrant l’hôte du runtime d’Azure Functions local à partir du dossier LocalFunctionProj :

    func start
    

    Vers la fin de la sortie, les lignes suivantes doivent s’afficher :

     ...
    
     Now listening on: http://0.0.0.0:7071
     Application started. Press Ctrl+C to shut down.
    
     Http Functions:
    
             HttpExample: [GET,POST] http://localhost:7071/api/HttpExample
     ...
    
     

    Notes

    Si HttpExample n’apparaît pas comme indiqué ci-dessus, cela signifie probablement que vous avez démarré l’hôte à partir d’un emplacement autre que le dossier racine du projet. Dans ce cas, utilisez Ctrl+C pour arrêter l’hôte, accédez au dossier racine du projet, puis réexécutez la commande précédente.

  2. Copiez l’URL de votre fonction HttpExample à partir de cette sortie dans un navigateur et accédez à l’URL de la fonction. Vous devez recevoir un message Bienvenue dans Azure Functions.

  3. Quand vous avez terminé, utilisez Ctrl+C, puis choisissez y pour arrêter l’hôte Functions.

Créer des ressources Azure de prise en charge pour votre fonction

Avant de déployer le code de votre fonction dans Azure, vous devez créer trois ressources :

  • Un groupe de ressources, qui est un conteneur logique pour les ressources associées.
  • Un compte de stockage, qui sert à conserver l’état et d’autres informations sur vos fonctions.
  • Une application de fonction, qui fournit l’environnement d’exécution de votre code de fonction. Une application de fonction est mappée à votre projet de fonction local. Elle vous permet de regrouper les fonctions en tant qu’unité logique pour faciliter la gestion, le déploiement et le partage des ressources.

Utilisez les commandes suivantes pour créer ces éléments. Azure CLI et PowerShell sont pris en charge.

  1. Si vous ne l’avez pas déjà fait, connectez-vous à Azure :

    az login
    

    La commande az login vous connecte à votre compte Azure.

  2. Créez un groupe de ressources nommé AzureFunctionsQuickstart-rg dans la région de votre choix :

    az group create --name AzureFunctionsQuickstart-rg --location <REGION>
    

    La commande az group create crée un groupe de ressources. Dans la commande ci-dessus, remplacez <REGION> par une région près de chez vous en utilisant un code de région disponible retourné par la commande <REGION>.

  3. Créez un compte de stockage universel dans votre groupe de ressources et votre région :

    az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group AzureFunctionsQuickstart-rg --sku Standard_LRS --allow-blob-public-access false
    

    La commande az storage account create crée le compte de stockage.

    Dans l’exemple précédent, remplacez <STORAGE_NAME> par un nom qui vous convient et qui est unique dans Stockage Azure. Les noms doivent contenir entre 3 et 24 caractères, et comporter uniquement des lettres minuscules. Standard_LRS spécifie un compte universel, qui est pris en charge par Functions.

Important

Le compte de stockage permet de stocker les données importantes de l’application, dont parfois le code proprement dit de l’application. Vous devez limiter l’accès des autres applications et utilisateurs au compte de stockage.

  1. Créer l’application de fonction dans Azure :

    az functionapp create --resource-group AzureFunctionsQuickstart-rg --consumption-plan-location <REGION> --runtime dotnet-isolated --functions-version 4 --name <APP_NAME> --storage-account <STORAGE_NAME>
    

    La commande az functionapp create crée l’application de fonction dans Azure.

    Dans l’exemple précédent, remplacez <STORAGE_NAME> par le nom du compte que vous avez utilisé à l’étape précédente, puis remplacez <APP_NAME> par le nom global unique qui vous convient. <APP_NAME> représente également le domaine DNS par défaut pour l’application de fonction.

    Cette commande crée une application de fonction qui s’exécute dans votre runtime de langage spécifié dans le Plan Consommation Azure Functions, qui est gratuit pour l’utilisation faite ici. La commande crée aussi une instance d’Azure Application Insights associée dans le même groupe de ressources, avec laquelle vous pouvez superviser votre application de fonction et visualiser les journaux. Pour plus d’informations, consultez Surveiller l’exécution des fonctions Azure. L’instance n’entraîne aucun coût tant que vous ne l’activez pas.

Déployer le projet de fonction sur Azure

Après avoir créé votre application de fonction dans Azure, vous êtes prêt à déployer votre projet Functions local à l’aide de la commande func azure functionapp publish.

Dans l’exemple suivant, remplacez <APP_NAME> par le nom de votre application.

func azure functionapp publish <APP_NAME>

La commande de publication affiche des résultats similaires à la sortie suivante (tronquée par souci de simplicité) :

...

Getting site publishing info...
Creating archive for current directory...
Performing remote build for functions project.

...

Deployment successful.
Remote build succeeded!
Syncing triggers...
Functions in msdocs-azurefunctions-qs:
    HttpExample - [httpTrigger]
        Invoke url: https://msdocs-azurefunctions-qs.azurewebsites.net/api/httpexample

Appeler la fonction sur Azure

Dans la mesure où votre fonction utilise un déclencheur HTTP et prend en charge des requêtes GET, vous l’appelez en adressant une requête HTTP à son URL. Il est plus facile d’effectuer cette opération dans un navigateur.

Copiez l’URL d’appel complète affichée dans la sortie de la commande de publication dans la barre d’adresse d’un navigateur. Quand vous accédez à cette URL, le navigateur doit afficher une sortie similaire à celle générée au moment de l’exécution locale de la fonction.


Exécutez la commande suivante pour afficher les journaux de streaming en temps quasi-réel :

func azure functionapp logstream <APP_NAME> 

Dans une fenêtre de terminal distincte ou dans le navigateur, appelez à nouveau la fonction distante. Un journal détaillé de l’exécution de la fonction dans Azure est affiché dans le terminal.

Nettoyer les ressources

Si vous passez à l’étape suivante, qui consiste à ajouter une liaison de sortie de file d’attente Stockage Azure, gardez toutes vos ressources en place, car vous allez tirer parti de ce que vous avez déjà fait.

Sinon, utilisez la commande suivante pour supprimer le groupe de ressources et toutes les ressources qu’il contient afin d’éviter les coûts supplémentaires.

az group delete --name AzureFunctionsQuickstart-rg

Étapes suivantes