Démarrage rapide : Créer une fonction dans Azure qui répond à des requêtes HTTPQuickstart: Create a function in Azure that responds to HTTP requests

Dans cet article, vous allez utiliser des outils en ligne de commande pour créer une fonction basée sur une bibliothèque de classes C# qui répond aux requêtes HTTP.In this article, you use command-line tools to create a C# class library-based function that responds to HTTP requests. Après avoir testé le code localement, vous le déployez dans l’environnement serverless d’Azure Functions.After testing the code locally, you deploy it to the serverless environment of Azure Functions.

Dans cet article, vous allez utiliser des outils en ligne de commande pour créer une fonction JavaScript qui répond aux requêtes HTTP.In this article, you use command-line tools to create a JavaScript function that responds to HTTP requests. Après avoir testé le code localement, vous le déployez dans l’environnement serverless d’Azure Functions.After testing the code locally, you deploy it to the serverless environment of Azure Functions.

Dans cet article, vous allez utiliser des outils en ligne de commande pour créer une fonction TypeScript qui répond aux requêtes HTTP.In this article, you use command-line tools to create a TypeScript function that responds to HTTP requests. Après avoir testé le code localement, vous le déployez dans l’environnement serverless d’Azure Functions.After testing the code locally, you deploy it to the serverless environment of Azure Functions.

Dans cet article, vous allez utiliser des outils en ligne de commande pour créer une fonction PowerShell qui répond aux requêtes HTTP.In this article, you use command-line tools to create a PowerShell function that responds to HTTP requests. Après avoir testé le code localement, vous le déployez dans l’environnement serverless d’Azure Functions.After testing the code locally, you deploy it to the serverless environment of Azure Functions.

Dans cet article, vous utilisez des outils en ligne de commande pour créer une fonction Python qui répond à des requêtes HTTP.In this article, you use command-line tools to create a Python function that responds to HTTP requests. Après avoir testé le code localement, vous le déployez dans l’environnement serverless d’Azure Functions.After testing the code locally, you deploy it to the serverless environment of Azure Functions.

Dans cet article, vous allez utiliser des outils en ligne de commande pour créer une fonction Java qui répond aux requêtes HTTP.In this article, you use command-line tools to create a Java function that responds to HTTP requests. Après avoir testé le code localement, vous le déployez dans l’environnement serverless d’Azure Functions.After testing the code locally, you deploy it to the serverless environment of Azure Functions.

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.Completing this quickstart incurs a small cost of a few USD cents or less in your Azure account.

Si vous souhaitez consulter une version de cet article adaptée à Visual Studio Code, cliquez ici.There is also a Visual Studio Code-based version of this article.

Notes

Si Maven n’est pas votre outil de développement préféré, consultez nos tutoriels similaires destinés aux développeurs Java utilisant Gradle, IntelliJ IDEA et Visual Studio Code.If Maven is not your prefered development tool, check out our similar tutorials for Java developers using Gradle, IntelliJ IDEA and Visual Studio Code.

Configurer votre environnement localConfigure your local environment

Avant de commencer la lecture cet article, vous devez disposer des éléments suivants :Before you begin, you must have the following:

  • Node.js, Active LTS et Maintenance LTS (versions 8.11.1 et 10.14.1 recommandées).Node.js, Active LTS and Maintenance LTS versions (8.11.1 and 10.14.1 recommended).
  • Java Developer Kit (JDK) version 8.The Java Developer Kit, version 8.

    Important

    • La prise en charge des fonctions pour Java 11 est actuellement en préversion et l’archétype Maven crée un déploiement Java 8 par défaut.Functions support for Java 11 is currently in preview, and the Maven archetype creates a Java 8 deployment by default. Si vous souhaitez exécuter à la place votre application de fonction sur Java 11, vous devez mettre à jour manuellement le fichier pom.xml avec les valeurs Java 11.If you want to instead run your function app on Java 11, you must manually update the pom.xml file with Java 11 values. Pour plus d’informations, consultez les versions Java.To learn more, see Java versions.
    • La variable d’environnement JAVA_HOME doit être définie sur l’emplacement d’installation de la version appropriée du JDK pour effectuer ce démarrage rapide.The JAVA_HOME environment variable must be set to the install location of the correct version of the JDK to complete this quickstart.
  • Apache Maven version 3.0 ou ultérieure.Apache Maven, version 3.0 or above.

Vérification du prérequisPrerequisite check

  • Dans une fenêtre de terminal ou une fenêtre Commande, exécutez func --version pour vérifier que vous disposez d’Azure Functions Core Tools version 2.7.1846 ou ultérieure.In a terminal or command window, run func --version to check that the Azure Functions Core Tools are version 2.7.1846 or later.

  • Exécutez az --version pour vérifier que vous disposez d’Azure CLI version 2.0.76 ou ultérieure.Run az --version to check that the Azure CLI version is 2.0.76 or later.

  • Exécutez az login pour vous connecter à Azure et vérifier que l’abonnement est actif.Run az login to sign in to Azure and verify an active subscription.

  • Exécutez python --version (Linux/macOS) ou py --version (Windows) pour vérifier que vous disposez de Python version 3.8.x, 3.7.x ou 3.6.x.Run python --version (Linux/MacOS) or py --version (Windows) to check your Python version reports 3.8.x, 3.7.x or 3.6.x.

Créer et activer un environnement virtuelCreate and activate a virtual environment

Dans le dossier approprié, exécutez les commandes suivantes pour créer et activer un environnement virtuel nommé .venv.In a suitable folder, run the following commands to create and activate a virtual environment named .venv. Veillez à utiliser Python 3.8, 3.7 ou 3.6, qui sont pris en charge par Azure Functions.Be sure to use Python 3.8, 3.7 or 3.6, which are supported by Azure Functions.

python -m venv .venv
source .venv/bin/activate

Si Python n’a pas installé le package venv sur votre distribution Linux, exécutez la commande suivante :If Python didn't install the venv package on your Linux distribution, run the following command:

sudo apt-get install python3-venv

Vous devez exécuter toutes les commandes suivantes dans cet environnement virtuel activé.You run all subsequent commands in this activated virtual environment.

Créer un projet de fonction localCreate a local function project

Dans Azure Functions, un projet de fonction est un conteneur pour une ou plusieurs fonctions qui répondent chacune à un déclencheur spécifique.In Azure Functions, a function project is a container for one or more individual functions that each responds to a specific trigger. Toutes les fonctions d’un projet partagent les mêmes configurations locale et d’hébergement.All functions in a project share the same local and hosting configurations. Dans cette section, vous créez un projet de fonction qui contient une seule fonction.In this section, you create a function project that contains a single function.

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é :Run the func init command, as follows, to create a functions project in a folder named LocalFunctionProj with the specified runtime:

func init LocalFunctionProj --python
func init LocalFunctionProj --dotnet
func init LocalFunctionProj --javascript
func init LocalFunctionProj --typescript
func init LocalFunctionProj --powershell

Dans un dossier vide, exécutez la commande suivante pour générer le projet Functions à partir d’un archétype Maven.In an empty folder, run the following command to generate the Functions project from a Maven archetype.

mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype 

Maven vous invite à entrer les valeurs nécessaires pour terminer la génération du projet lors du déploiement.Maven asks you for values needed to finish generating the project on deployment.
Fournissez les valeurs suivantes à l’invite :Provide the following values when prompted:

PromptPrompt ValeurValue DescriptionDescription
groupIdgroupId com.fabrikam Valeur qui identifie de façon unique votre projet parmi tous les projets, avec respect des règles de nommage de package pour Java.A value that uniquely identifies your project across all projects, following the package naming rules for Java.
artifactIdartifactId fabrikam-functions Valeur qui correspond au nom du fichier jar, sans numéro de version.A value that is the name of the jar, without a version number.
versionversion 1.0-SNAPSHOT Choisissez la valeur par défaut.Choose the default value.
packagepackage com.fabrikam Valeur qui correspond au package Java pour le code de fonction généré.A value that is the Java package for the generated function code. Utilisez la valeur par défaut.Use the default.

Tapez Y ou appuyez sur Entrée pour confirmer.Type Y or press Enter to confirm.

Maven crée les fichiers projet dans un nouveau dossier avec le nom d’artifactId, qui est fabrikam-functions dans cet exemple.Maven creates the project files in a new folder with a name of artifactId, which in this example is fabrikam-functions.

Pour exécuter Java 11 dans Azure, vous devez modifier les valeurs dans le fichier pom.xml.To run on Java 11 in Azure, you must modify the values in the pom.xml file. Pour plus d’informations, consultez les versions Java.To learn more, see Java versions.

Accédez au dossier du projet :Navigate into the project folder:

cd LocalFunctionProj
cd fabrikam-functions

Ce dossier contient divers fichiers pour le projet, notamment des fichiers config nommés local.settings.json et host.json.This folder contains various files for the project, including configurations files named local.settings.json and 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.Because local.settings.json can contain secrets downloaded from Azure, the file is excluded from source control by default in the .gitignore file.

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).Add a function to your project by using the following command, where the --name argument is the unique name of your function (HttpExample) and the --template argument specifies the function's trigger (HTTP).

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

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

func new crée un sous-dossier correspondant au nom de la fonction qui contient le fichier de code approprié au langage choisi pour le projet, et un fichier config nommé function.json.func new creates a subfolder matching the function name that contains a code file appropriate to the project's chosen language and a configuration file named function.json.

(Facultatif) Examiner le contenu du fichier(Optional) Examine the file contents

Si vous le souhaitez, vous pouvez passer à Exécuter la fonction localement et examiner le contenu du fichier plus tard.If desired, you can skip to Run the function locally and examine the file contents later.

HttpExample.csHttpExample.cs

HttpExample.cs contient une méthode Run qui reçoit des données de requête dans la variable req de type HttpRequest, décorée avec HttpTriggerAttribute qui définit le comportement du déclencheur.HttpExample.cs contains a Run method that receives request data in the req variable is an HttpRequest that's decorated with the HttpTriggerAttribute, which defines the trigger behavior.

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;

namespace LocalFunctionProj
{
    public static class HttpExample
    {
        [FunctionName("HttpExample")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string name = req.Query["name"];

            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            dynamic data = JsonConvert.DeserializeObject(requestBody);
            name = name ?? data?.name;

            return name != null
                ? (ActionResult)new OkObjectResult($"Hello, {name}")
                : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
        }
    }
}

L’objet retourné est un ActionResult qui retourne un message de réponse sous la forme d’un OkObjectResult (200) ou d’un BadRequestObjectResult (400).The return object is an ActionResult that returns a response message as either an OkObjectResult (200) or a BadRequestObjectResult (400). Pour en savoir plus, voir Déclencheurs et liaisons HTTP Azure Functions.To learn more, see Azure Functions HTTP triggers and bindings.

Function.javaFunction.java

Function.java contient une méthode run qui reçoit des données de requête dans la variable request d’un objet HttpRequestMessage, doté de l’annotationHttpTrigger qui définit le comportement du déclencheur.Function.java contains a run method that receives request data in the request variable is an HttpRequestMessage that's decorated with the HttpTrigger annotation, which defines the trigger behavior.

/**
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License. See License.txt in the project root for
 * license information.
 */

package com.functions;

import com.microsoft.azure.functions.ExecutionContext;
import com.microsoft.azure.functions.HttpMethod;
import com.microsoft.azure.functions.HttpRequestMessage;
import com.microsoft.azure.functions.HttpResponseMessage;
import com.microsoft.azure.functions.HttpStatus;
import com.microsoft.azure.functions.annotation.AuthorizationLevel;
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.annotation.HttpTrigger;

import java.util.Optional;

/**
 * Azure Functions with HTTP Trigger.
 */
public class Function {
    /**
     * This function listens at endpoint "/api/HttpExample". Two ways to invoke it using "curl" command in bash:
     * 1. curl -d "HTTP Body" {your host}/api/HttpExample
     * 2. curl "{your host}/api/HttpExample?name=HTTP%20Query"
     */
    @FunctionName("HttpExample")
    public HttpResponseMessage run(
            @HttpTrigger(
                name = "req",
                methods = {HttpMethod.GET, HttpMethod.POST},
                authLevel = AuthorizationLevel.ANONYMOUS)
                HttpRequestMessage<Optional<String>> request,
            final ExecutionContext context) {
        context.getLogger().info("Java HTTP trigger processed a request.");

        // Parse query parameter
        final String query = request.getQueryParameters().get("name");
        final 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 {
            return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
        }
    }
}

Le message de réponse est généré par l’API HttpResponseMessage. Builder.The response message is generated by the HttpResponseMessage.Builder API.

pom.xmlpom.xml

Les paramètres des ressources Azure créées pour héberger votre application sont définis dans l’élément de configuration du plug-in avec un groupId de com.microsoft.azure dans le fichier pom.xml généré.Settings for the Azure resources created to host your app are defined in the configuration element of the plugin with a groupId of com.microsoft.azure in the generated pom.xml file. Par exemple, l’élément de configuration ci-dessous indique à un déploiement basé sur Maven de créer une application de fonction dans le groupe de ressources java-functions-group de la région westus.For example, the configuration element below instructs a Maven-based deployment to create a function app in the java-functions-group resource group in the westus region. L’application de fonction elle-même s’exécute sur Windows hébergé dans le plan java-functions-app-service-plan qui, par défaut, est un plan de consommation serverless.The function app itself runs on Windows hosted in the java-functions-app-service-plan plan, which by default is a serverless Consumption plan.

<plugin>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure-functions-maven-plugin</artifactId>
    <version>${azure.functions.maven.plugin.version}</version>
    <configuration>
        <!-- function app name -->
        <appName>${functionAppName}</appName>
        <!-- function app resource group -->
        <resourceGroup>${functionResourceGroup}</resourceGroup>
        <!-- function app service plan name -->
        <appServicePlanName>java-functions-app-service-plan</appServicePlanName>
        <!-- function app region-->
        <!-- refers https://github.com/microsoft/azure-maven-plugins/wiki/Azure-Functions:-Configuration-Details#supported-regions for all valid values -->
        <region>${functionAppRegion}</region>
        <!-- function pricingTier, default to be consumption if not specified -->
        <!-- refers https://github.com/microsoft/azure-maven-plugins/wiki/Azure-Functions:-Configuration-Details#supported-pricing-tiers for all valid values -->
        <!-- <pricingTier></pricingTier> -->

        <!-- Whether to disable application insights, default is false -->
        <!-- refers https://github.com/microsoft/azure-maven-plugins/wiki/Azure-Functions:-Configuration-Details for all valid configurations for application insights-->
        <!-- <disableAppInsights></disableAppInsights> -->
        <runtime>
            <!-- runtime os, could be windows, linux or docker-->
            <os>windows</os>
            <javaVersion>8</javaVersion>
            <!-- for docker function, please set the following parameters -->
            <!-- <image>[hub-user/]repo-name[:tag]</image> -->
            <!-- <serverId></serverId> -->
            <!-- <registryUrl></registryUrl>  -->
        </runtime>
        <appSettings>
            <property>
                <name>FUNCTIONS_EXTENSION_VERSION</name>
                <value>~3</value>
            </property>
        </appSettings>
    </configuration>
    <executions>
        <execution>
            <id>package-functions</id>
            <goals>

Vous pouvez modifier ces paramètres pour contrôler la façon dont les ressources sont créées dans Azure, par exemple en modifiant runtime.os pour passer de windows à linux avant le déploiement initial.You can change these settings to control how resources are created in Azure, such as by changing runtime.os from windows to linux before initial deployment. Pour obtenir la liste complète des paramètres pris en charge par le plug-in Maven, consultez les détails de la configuration.For a complete list of settings supported by the Maven plug-in, see the configuration details.

Si vous souhaitez exécuter votre application de fonction sur Java 11 au lieu de Java 8, vous devez mettre à jour manuellement le fichier pom.xml avec les valeurs Java 11.If you want to run your function app on Java 11 instead of Java 8, you must manually update the pom.xml file with Java 11 values. Pour plus d’informations, consultez les versions Java.To learn more, see Java versions. En cas d’exécution sur Java 11, assurez-vous queWhen running on Java 11, make sure that

FunctionTest.javaFunctionTest.java

L’archétype génère également un test unitaire pour votre fonction.The archetype also generates a unit test for your function. Lorsque vous modifiez votre fonction pour ajouter des liaisons ou de nouvelles fonctions au projet, vous devez également modifier les tests dans le fichier FunctionTest.java.When you change your function to add bindings or add new functions to the project, you'll also need to modify the tests in the FunctionTest.java file.

__init__.py__init__.py

__init__.py contient une fonction Python main(), qui se déclenche selon la configuration définie dans function.json.__init__.py contains a main() Python function that's triggered according to the configuration in function.json.

import logging

import azure.functions as func


def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP 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:
        return func.HttpResponse(f"Hello, {name}. This HTTP triggered function executed successfully.")
    else:
        return func.HttpResponse(
             "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.",
             status_code=200
        )

Pour un déclencheur HTTP, la fonction reçoit les données de requête dans la variable req, tel que cela est défini dans function.json.For an HTTP trigger, the function receives request data in the variable req as defined in function.json. req est une instance de la classe azure.functions.HttpRequest.req is an instance of the azure.functions.HttpRequest class. L’objet retourné, défini comme $return dans function.json, est une instance de la classe azure.functions.HttpResponse.The return object, defined as $return in function.json, is an instance of azure.functions.HttpResponse class. Pour en savoir plus, voir Déclencheurs et liaisons HTTP Azure Functions.To learn more, see Azure Functions HTTP triggers and bindings.

index.jsindex.js

index.js exporte une fonction qui est déclenchée selon la configuration définie dans function.json.index.js exports a function that's triggered according to the configuration in function.json.

module.exports = async function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');

    const name = (req.query.name || (req.body && req.body.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.";

    context.res = {
        // status: 200, /* Defaults to 200 */
        body: responseMessage
    };
}

Pour un déclencheur HTTP, la fonction reçoit les données de requête dans la variable req, tel que cela est défini dans function.json.For an HTTP trigger, the function receives request data in the variable req as defined in function.json. L’objet retourné, défini comme $return dans function.json, est la réponse.The return object, defined as $return in function.json, is the response. Pour en savoir plus, voir Déclencheurs et liaisons HTTP Azure Functions.To learn more, see Azure Functions HTTP triggers and bindings.

index.tsindex.ts

index.ts exporte une fonction qui est déclenchée selon la configuration définie dans function.json.index.ts exports a function that's triggered according to the configuration in function.json.

import { AzureFunction, Context, HttpRequest } from "@azure/functions"

const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest): Promise<void> {
    context.log('HTTP trigger function processed a request.');
    const name = (req.query.name || (req.body && req.body.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.";

    context.res = {
        // status: 200, /* Defaults to 200 */
        body: responseMessage
    };

};

export default httpTrigger;

Pour un déclencheur HTTP, la fonction reçoit les données de requête dans la variable req de type HttpRequest, tel que cela est défini dans function.json.For an HTTP trigger, the function receives request data in the variable req of type HttpRequest as defined in function.json. L’objet retourné, défini comme $return dans function.json, est la réponse.The return object, defined as $return in function.json, is the response.

run.ps1run.ps1

run.ps1 définit un script de fonction qui est déclenché selon la configuration définie dans function.json.run.ps1 defines a function script that's triggered according to the configuration in function.json.

using namespace System.Net

# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)

# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."

# Interact with query parameters or the body of the request.
$name = $Request.Query.Name
if (-not $name) {
    $name = $Request.Body.Name
}

$body = "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."

if ($name) {
    $body = "Hello, $name. This HTTP triggered function executed successfully."
}

# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::OK
    Body = $body
})

Pour un déclencheur HTTP, la fonction reçoit les données de requête passées au paramètre $Request, tel que cela est défini dans function.json.For an HTTP trigger, the function receives request data passed to the $Request param defined in function.json. L’objet retourné, défini comme Response dans function.json, est passé à l’applet de commande Push-OutputBinding comme réponse.The return object, defined as Response in function.json, is passed to the Push-OutputBinding cmdlet as the response.

function.jsonfunction.json

function.json est un fichier config qui définit le bindings d’entrée et de sortie de la fonction, notamment le type du déclencheur.function.json is a configuration file that defines the input and output bindings for the function, including the trigger type.

Vous pouvez changer scriptFile pour appeler un autre fichier Python, si vous le souhaitez.You can change scriptFile to invoke a different Python file if desired.

{
    "scriptFile": "__init__.py",
    "bindings": [
        {
            "authLevel": "function",
            "type": "httpTrigger",
            "direction": "in",
            "name": "req",
            "methods": [
                "get",
                "post"
            ]
        },
        {
            "type": "http",
            "direction": "out",
            "name": "$return"
        }
    ]
}
{
    "bindings": [
        {
            "authLevel": "function",
            "type": "httpTrigger",
            "direction": "in",
            "name": "req",
            "methods": [
                "get",
                "post"
            ]
        },
        {
            "type": "http",
            "direction": "out",
            "name": "res"
        }
    ]
}
{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "Request",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "Response"
    }
  ]
}

Chaque liaison nécessite une direction, un type et un nom unique.Each binding requires a direction, a type, and a unique name. Le déclencheur HTTP comporte une liaison d’entrée de type httpTrigger et une liaison de sortie de type http.The HTTP trigger has an input binding of type httpTrigger and output binding of type http.

Exécuter la fonction localementRun the function locally

Exécutez votre fonction en démarrant l’hôte du runtime d’Azure Functions local à partir du dossier LocalFunctionProj :Run your function by starting the local Azure Functions runtime host from the LocalFunctionProj folder:

func start
npm install
npm start
mvn clean package 
mvn azure-functions:run

Vers la fin de la sortie, les lignes suivantes doivent s’afficher :Toward the end of the output, the following lines should appear:

...

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-dessous, cela signifie probablement que vous avez démarré l’hôte à partir d’un emplacement autre que le dossier racine du projet.If HttpExample doesn't appear as shown below, you likely started the host from outside the root folder of the project. 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.In that case, use Ctrl+C to stop the host, navigate to the project's root folder, and run the previous command again.

Copiez dans un navigateur l’URL de votre fonction HttpExample à partir de cette sortie, puis ajoutez la chaîne de requête ?name=<your-name> pour obtenir une URL complète semblable à http://localhost:7071/api/HttpExample?name=Functions.Copy the URL of your HttpExample function from this output to a browser and append the query string ?name=<your-name>, making the full URL like http://localhost:7071/api/HttpExample?name=Functions. Le navigateur doit afficher un message similaire à Hello Functions :The browser should display a message like Hello Functions:

Résultat de la fonction exécutée localement dans le navigateur

Le terminal dans lequel vous avez démarré votre projet affiche également une sortie de journal quand vous effectuez des requêtes.The terminal in which you started your project also shows log output as you make requests.

Quand vous êtes prêt, utilisez Ctrl+C, puis choisissez y pour arrêter l’hôte de fonctions.When you're ready, use Ctrl+C and choose y to stop the functions host.

Créer des ressources Azure de prise en charge pour votre fonctionCreate supporting Azure resources for your function

Avant de déployer le code de votre fonction dans Azure, vous devez créer trois ressources :Before you can deploy your function code to Azure, you need to create three resources:

  • Un groupe de ressources, qui est un conteneur logique pour les ressources associées.A resource group, which is a logical container for related resources.
  • Un compte de stockage, qui conserve l’état et d’autres informations spécifiques à vos projets.A Storage account, which maintains state and other information about your projects.
  • Une application de fonction, qui fournit l’environnement d’exécution de votre code de fonction.A function app, which provides the environment for executing your function code. 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.A function app maps to your local function project and lets you group functions as a logical unit for easier management, deployment, and sharing of resources.

Utilisez les commandes Azure CLI suivantes pour créer ces éléments.Use the following Azure CLI commands to create these items. Chaque commande fournit une sortie JSON à la fin de son exécution.Each command provides JSON output upon completion.

Si vous ne l’avez pas déjà fait, connectez-vous à Azure avec la commande az login :If you haven't done so already, sign in to Azure with the az login command:

az login

Créez un groupe de ressources avec la commande az group create.Create a resource group with the az group create command. L’exemple suivant crée un groupe de ressources nommé AzureFunctionsQuickstart-rg dans la région westeurope.The following example creates a resource group named AzureFunctionsQuickstart-rg in the westeurope region. (Vous créez généralement votre groupe de ressources et vos ressources dans une région près de chez vous, en utilisant une région disponible à partir de la commande az account list-locations.)(You generally create your resource group and resources in a region near you, using an available region from the az account list-locations command.)

az group create --name AzureFunctionsQuickstart-rg --location westeurope

Notes

Vous ne pouvez pas héberger des applications Linux et Windows dans le même groupe de ressources.You can't host Linux and Windows apps in the same resource group. Si vous disposez d’un groupe de ressources existant nommé AzureFunctionsQuickstart-rg avec une application de fonction Windows ou une application web, vous devez utiliser un autre groupe de ressources.If you have an existing resource group named AzureFunctionsQuickstart-rg with a Windows function app or web app, you must use a different resource group.

Créez un compte de stockage universel dans votre groupe de ressources et votre région à l’aide de la commande az storage account create.Create a general-purpose storage account in your resource group and region by using the az storage account create command. Dans l’exemple suivant, remplacez <STORAGE_NAME> par un nom globalement unique qui vous convient.In the following example, replace <STORAGE_NAME> with a globally unique name appropriate to you. Les noms doivent contenir entre 3 et 24 caractères, et comporter uniquement des lettres minuscules.Names must contain three to 24 characters numbers and lowercase letters only. Standard_LRS spécifie un compte universel, qui est pris en charge par Functions.Standard_LRS specifies a general-purpose account, which is supported by Functions.

az storage account create --name <STORAGE_NAME> --location westeurope --resource-group AzureFunctionsQuickstart-rg --sku Standard_LRS

Le compte de stockage n’engendre que quelques centimes (USD) de dépense dans ce guide de démarrage rapide.The storage account incurs only a few cents (USD) for this quickstart.

Créez l’application de fonction à l’aide de la commande az functionapp create.Create the function app using the az functionapp create command. Dans l’exemple suivant, 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.In the following example, replace <STORAGE_NAME> with the name of the account you used in the previous step, and replace <APP_NAME> with a globally unique name appropriate to you. <APP_NAME> représente également le domaine DNS par défaut pour l’application de fonction.The <APP_NAME> is also the default DNS domain for the function app.

Si vous utilisez Python 3.8, remplacez --runtime-version par 3.8 et --functions_version par 3.If you are using Python 3.8, change --runtime-version to 3.8 and --functions_version to 3.

Si vous utilisez Python 3.6, remplacez --runtime-version par 3.6.If you are using Python 3.6, change --runtime-version to 3.6.

az functionapp create --resource-group AzureFunctionsQuickstart-rg --os-type Linux --consumption-plan-location westeurope --runtime python --runtime-version 3.7 --functions-version 2 --name <APP_NAME> --storage-account <STORAGE_NAME>

Si vous utilisez Node.js 8, remplacez aussi --runtime-version par 8.If you are using Node.js 8, also change --runtime-version to 8.

az functionapp create --resource-group AzureFunctionsQuickstart-rg --consumption-plan-location westeurope --runtime node --runtime-version 10 --functions-version 2 --name <APP_NAME> --storage-account <STORAGE_NAME>
az functionapp create --resource-group AzureFunctionsQuickstart-rg --consumption-plan-location westeurope --runtime dotnet --functions-version 2 --name <APP_NAME> --storage-account <STORAGE_NAME>
az functionapp create --resource-group AzureFunctionsQuickstart-rg --consumption-plan-location westeurope --runtime powershell --functions-version 2 --name <APP_NAME> --storage-account <STORAGE_NAME>

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.This command creates a function app running in your specified language runtime under the Azure Functions Consumption Plan, which is free for the amount of usage you incur here. La commande provisionne également 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.The command also provisions an associated Azure Application Insights instance in the same resource group, with which you can monitor your function app and view logs. Pour plus d’informations, consultez Surveiller l’exécution des fonctions Azure.For more information, see Monitor Azure Functions. L’instance n’entraîne aucun coût tant que vous ne l’activez pas.The instance incurs no costs until you activate it.

Déployer le projet de fonction sur AzureDeploy the function project to Azure

Avant d’utiliser Core Tools pour déployer votre projet sur Azure, vous créez une build prête pour la production de fichiers JavaScript à partir des fichiers sources TypeScript.Before you use Core Tools to deploy your project to Azure, you create a production-ready build of JavaScript files from the TypeScript source files.

La commande suivante prépare votre projet TypeScript pour le déploiement :The following command prepares your TypeScript project for deployment:

npm run build:production 

Une fois les ressources nécessaires en place, vous êtes prêt à déployer votre projet Functions local sur l’application de fonction dans Azure à l’aide de la commande func azure functionapp publish.With the necessary resources in place, you're now ready to deploy your local functions project to the function app in Azure by using the func azure functionapp publish command. Dans l’exemple suivant, remplacez <APP_NAME> par le nom de votre application.In the following example, replace <APP_NAME> with the name of your app.

func azure functionapp publish <APP_NAME>

Si vous voyez l’erreur « Impossible de localiser l’application nommée... », attendez quelques secondes, puis réessayez, car Azure n’a peut-être pas complètement initialisé l’application après la commande az functionapp create précédente.If you see the error, "Can't find app with name ...", wait a few seconds and try again, as Azure may not have fully initialized the app after the previous az functionapp create command.

La commande de publication affiche des résultats similaires à la sortie suivante (tronquée par souci de simplicité) :The publish command shows results similar to the following output (truncated for simplicity):

...

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?code=KYHrydo4GFe9y0000000qRgRJ8NdLFKpkakGJQfC3izYVidzzDN4gQ==

Déployer le projet de fonction sur AzureDeploy the function project to Azure

Une application de fonction et les ressources associées sont créées dans Azure lors du déploiement initial de votre projet Functions.A function app and related resources are created in Azure when you first deploy your functions project. Les paramètres des ressources Azure créées pour héberger votre application sont définis dans le fichier pom.xml.Settings for the Azure resources created to host your app are defined in the pom.xml file. Dans cet article, vous allez accepter les valeurs par défaut.In this article, you'll accept the defaults.

Conseil

Pour créer une application de fonction s’exécutant sur Linux au lieu de Windows, changez l’élément runtime.os dans le fichier pom.xml en remplaçant windows par linux.To create a function app running on Linux instead of Windows, change the runtime.os element in the pom.xml file from windows to linux. L’exécution de Linux dans un plan de consommation est prise en charge dans ces régions.Running Linux in a consumption plan is supported in these regions. Des applications s’exécutant sur Linux et des applications s’exécutant sur Windows ne peuvent pas se côtoyer dans le même groupe de ressources.You can't have apps that run on Linux and apps that run on Windows in the same resource group.

Avant de procéder au déploiement, utilisez la commande Azure CLI az login pour vous connecter à votre abonnement Azure.Before you can deploy, use the az login Azure CLI command to sign in to your Azure subscription.

az login

Utilisez la commande suivante pour déployer votre projet vers une nouvelle application de fonction.Use the following command to deploy your project to a new function app.

mvn azure-functions:deploy

Cette commande crée les ressources suivantes dans Azure :This creates the following resources in Azure:

  • Groupe de ressources.Resource group. Nommé en tant que java-functions-group.Named as java-functions-group.
  • Compte de stockage.Storage account. Requis par les fonctions.Required by Functions. Le nom est généré de façon aléatoire en fonction des exigences du nom de compte de stockage.The name is generated randomly based on Storage account name requirements.
  • Plan d’hébergement.Hosting plan. Hébergement serverless pour votre application de fonction dans la région westus.Serverless hosting for your function app in the westus region. Le nom est java-functions-app-service-plan.The name is java-functions-app-service-plan.
  • Application de fonction.Function app. Une application de fonction est l’unité de déploiement et d’exécution de vos fonctions.A function app is the deployment and execution unit for your functions. Le nom est généré de façon aléatoire, en fonction de votre artifactId auquel est ajouté un numéro généré de façon aléatoire.The name is randomly generated based on your artifactId, appended with a randomly generated number.

Le déploiement empaquette les fichiers du projet et les déploie dans la nouvelle application de fonction à l’aide du déploiement zip.The deployment packages the project files and deploys them to the new function app using zip deployment. Le code s’exécute à partir du package de déploiement dans Azure.The code runs from the deployment package in Azure.

Appeler la fonction sur AzureInvoke the function on Azure

Dans la mesure où votre fonction utilise un déclencheur HTTP, vous l’appelez en adressant une requête HTTP à son URL dans le navigateur ou à l’aide d’un outil semblable à curl.Because your function uses an HTTP trigger, you invoke it by making an HTTP request to its URL in the browser or with a tool like curl. Dans les deux cas, le paramètre d’URL code est votre clé de fonction unique qui autorise l’appel de votre point de terminaison de fonction.In both instances, the code URL parameter is your unique function key that authorizes the invocation of your function endpoint.

Copiez l’URL d’appel complète affichée au sein de la sortie de la commande de publication dans la barre d’adresse d’un navigateur, en ajoutant le paramètre de requête &name=Functions.Copy the complete Invoke URL shown in the output of the publish command into a browser address bar, appending the query parameter &name=Functions. Le navigateur doit afficher une sortie similaire à celle générée au moment de l’exécution locale de la fonction.The browser should display similar output as when you ran the function locally.

Sortie de la fonction exécutée sur Azure dans un navigateur

Conseil

Pour voir les journaux en quasi temps réel d’une application de fonction publiée, utilisez le flux de métriques temps réel Application Insights.To view near real-time logs for a published function app, use the Application Insights Live Metrics Stream.

Exécutez la commande suivante pour ouvrir le flux de métriques temps réel dans un navigateur.Run the following command to open the live metrics stream in a browser.

func azure functionapp logstream <APP_NAME> --browser

Nettoyer les ressourcesClean up resources

Si vous passez à l’étape suivante, 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.If you continue to the next step, Add an Azure Storage queue output binding, keep all your resources in place as you'll build on what you've already done.

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.Otherwise, use the following command to delete the resource group and all its contained resources to avoid incurring further costs.

az group delete --name AzureFunctionsQuickstart-rg
az group delete --name java-functions-group

Pour quitter l’environnement virtuel, exécutez deactivate.To exit the virtual environment, run deactivate.

Étapes suivantesNext steps