Photo par Adi Goldstein

Utilisez settings.json dans vos Azure Functions C#

Chargez les paramètres locaux ou de production !

Créé par Damien Aicheh le 10/05/2022 · 6 mins

Lorsque vous développez une Azure Function, vous devrez probablement utiliser certains paramètres qui seront définis par environnement. Ces fichiers de paramètres peuvent être ajoutés à votre contrôle de code source uniquement s’ils ne contiennent pas de valeurs sensibles, telles qu’un mot de passe, des tokens ou des secrets.

Dans ce tutoriel, nous verrons comment charger le fichier settings.json et le remplacer par des valeurs locales dans votre local.settings.json à des fins de développement.

Charger les settings

Pour pouvoir utiliser vos fichiers de paramètres, vous devez les charger lorsque vous lancez votre Azure Function, qui se trouve dans le fichier Startup.cs :

[assembly: FunctionsStartup(typeof(Company.Function.Startup))]
namespace Company.Function
{
    internal class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            var configuration = BuildConfiguration(builder.GetContext().ApplicationRootPath);
            builder.Services.AddAppConfiguration(configuration);
        }

        private IConfiguration BuildConfiguration(string applicationRootPath)
        {
            var config =
                new ConfigurationBuilder()
                    .SetBasePath(applicationRootPath)
                    .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
                    .AddJsonFile("settings.json", optional: true, reloadOnChange: true)
                    .AddEnvironmentVariables()
                    .Build();

            return config;
        }
    }
}

Comme vous pouvez le voir ci-dessus, la méthode BuildConfiguration charge deux fichiers json :

  • local.settings.json
  • settings.json

Le fichier local.settings.json est l’endroit où vous pouvez définir les valeurs de votre projet dans votre environnement de développement. Ce fichier ne doit pas être ajouté à votre contrôle de code source car il est spécifique à votre propre machine.

Le fichier settings.json sera utilisé en production. C’est une bonne pratique d’avoir un settings.json.tmpl qui ne contiendra que la structure du fichier settings.json afin que vous puissiez le copier coller et ajouter les valeurs dont vous avez besoin dans votre environnement de développement local.

En effet, les fichiers sont chargés dans l’ordre où ils sont définis. Ce qui signifie que dans cet exemple, local.settings.json sera remplacé par les valeurs settings.json si elles sont présentes. Cette technique est utile lorsque vous souhaitez utiliser des valeurs locales de votre machine et les remplacer en production.

Si vous inversez les deux lignes comme ceci :

.AddJsonFile("settings.json", optional: true, reloadOnChange: true)
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)

Les valeurs par défaut de settings.json seront remplacées par celles local.settings.json si vous en avez besoin. Cela peut être utilisé par exemple, si vous ciblez une URL par défaut vers votre environnement de développement en ligne et que vous souhaitez en cibler une autre sur votre machine locale en utilisant localhost.

Utiliser les valeurs définies dans les fichiers

Pour les besoins de cet article, les fichiers JSON contiendront une définition d’une ApiUrl :

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet"
  },
  "MyServerOptions": {
    "ApiUrl": "http://localhost"
  }
}

L’objet Values et l’option IsEncrypted que vous voyez ci-dessus sont des paramètres par défaut nécessaires pour que votre Azure Function démarre correctement.

Pour consommer la section MyServerOptions nous allons définir une classe :

public class MyServerOptions
{
    public string ApiUrl { get; init; }
}

Ensuite, nous créerons une méthode d’extension appelée AddAppConfiguration où nous ajouterons toutes les configurations pour nos Azure Functions, ci-dessous, vous pouvez voir à quel point il est facile de charger la section MyServerOptions :

internal static class ConfigurationServiceCollectionExtensions
{
    public static IServiceCollection AddAppConfiguration(this IServiceCollection services, IConfiguration config)
    {
        services.Configure<MyServerOptions>(config.GetSection(nameof(MyServerOptions)));
        return services;
    }
}

Et utilisez-la ensuite dans la méthode Configure comme nous l’avons vu précédemment :

public override void Configure(IFunctionsHostBuilder builder)
{
    var configuration = BuildConfiguration(builder.GetContext().ApplicationRootPath);
    builder.Services.AddAppConfiguration(configuration);
}

Touche finale

Vous savez maintenant comment utiliser les fichiers de paramètres dans vos Azure Functions en production ou dans un environnement local. Vous trouverez un exemple de code sur ce répertoire Github.

Happy codding !

Vous avez aimé ce tutoriel ? Laissez une étoile sur le répertoire Github associé !

N'hésitez pas à me suivre sur pour ne pas rater mon prochain tutoriel !