web-dev-qa-db-fra.com

Comment ajouter des valeurs de configuration dans AppSettings.json dans les fonctions Azure. Y a-t-il une structure pour cela?

Quelle est la structure standard pour ajouter des clés à appsettings.json? Aussi, comment lire ces valeurs dans notre run.csx? Normalement, dans app.config, nous avions ConfigurationManager.GetSettings["SettingName"]; Existe-t-il une implémentation similaire dans Azure Function?

4
Harshit Agarwal

Comme indiqué ici

Ces paramètres peuvent également être lus dans votre code en tant que variables d'environnement. En C #, utilisez System.Environment.GetEnvironmentVariable ou ConfigurationManager.AppSettings. En JavaScript, utilisez process.env. Les paramètres spécifiés en tant que variable d'environnement système ont priorité sur les valeurs du fichier local.settings.json.

4
Kevin Smith

Dans Azure Functions 2.x, vous devez utiliser le style de gestion de la configuration de base .Net, contenu dans le package Microsoft.Extensions.Configuration. Cela vous permet de créer un fichier settings.json local sur votre ordinateur dev pour la configuration locale dans les portions Values et ConnectionString du fichier json. Le fichier de paramètres local json n'est pas publié dans Azure. Au lieu de cela, Azure obtiendra les paramètres à partir des paramètres d'application associés à la fonction.

Dans votre code de fonction, acceptez un paramètre de type Microsoft.Azure.WebJobs.ExecutionContext context, dans lequel vous pouvez ensuite créer un fournisseur IConfigurationRoot:

[FunctionName("MyFunction")]
public static async Task Run([TimerTrigger("0 */15 * * * *")]TimerInfo myTimer,
    TraceWriter log, Microsoft.Azure.WebJobs.ExecutionContext context, 
    CancellationToken ctx)
{
   var config = ConfigurationBuilder()
        .SetBasePath(context.FunctionAppDirectory)
        .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
        .AddEnvironmentVariables()
        .Build();

    // This abstracts away the .json and app settings duality
    var myValue = config["MyKey"];

    var myConnString = config.GetConnectionString("connString");
    ... etc

La AddJsonFile vous permet d’ajouter un fichier de configuration de développement local, par exemple. local.settings.json contenant les valeurs de dev locales (non publié)

{
  "IsEncrypted": false,
  "Values": {
    "MyKey": "MyValue",
     ...
   },
   "ConnectionStrings": {
      "connString": "...."
}

Bien qu'apparemment, utiliser ConnectionStrings pour autre chose que EF semble être découragé

Et une fois déployé sur Azure, vous pouvez modifier les valeurs des paramètres de la fonction Paramètres de la lame Paramètres d'application:

 Application Config

3
StuartLC

Vous n'avez pas besoin d'utiliser System.Environment.GetEnvironmentVariable() pour accéder aux paramètres de votre application. 

ConfigurationManager est disponible pour Azure Functions dans run.csx comme suit:

System.Configuration.ConfigurationManager.AppSettings["SettingName"]
3
urig

Pour charger la valeur environment ou appsettings, vous devez utiliser le 

Propriété System.Environment.GetEnvironmentVariable

public static void Run(TimerInfo myTimer, TraceWriter log)
{
    log.Info($"C# Timer trigger function executed at: {DateTime.Now}");
    log.Info(GetEnvironmentVariable("AzureWebJobsStorage"));
    log.Info(GetEnvironmentVariable("WEBSITE_SITE_NAME"));
}

public static string GetEnvironmentVariable(string name)
{
    return name + ": " + 
        System.Environment.GetEnvironmentVariable(name, EnvironmentVariableTarget.Process);
}

Gérer les variables de paramètres d'application - https://docs.Microsoft.com/en-us/Azure/azure-functions/functions-how-to-use-Azure-function-app-settings

2
Aravind

Les fonctions Azure ne prennent en charge qu'une partie limitée de app.config. Il permet d’enregistrer les paramètres de l’application et les connexions dans local.settings.json lors de l’exécution de la fonction à partir de VS. Il ne prend pas en charge les paramètres de point de terminaison WCF sous system.serviceModel dans ce fichier json. J'avais une référence de bibliothèque DLL dans Azure Function et cela appelait en interne les apis WCF. 

La chose étrange que j'ai trouvée est que, lorsque j'exécute la fonction Azure, il reconvertit le fichier json en configuration xml au niveau du chemin d'accès au cli (%localappdata%\AzureFunctionsTools\Releases\1.6.0\cli\func.exe.config). J'ai ajouté ma hiérarchie de configuration xml (system.serviceModel) à ce fichier de configuration et cela a bien fonctionné, en sélectionnant mes points de terminaison WCF pour exécuter les services. Bien que je ne sache pas utiliser la configuration log4net, mais je suis bon pour exécuter les API. Azure aurait dû prendre en charge directement les fichiers de configuration xml. J'espère que cela vous aidera.

1
Phantom

Les applications ne sont pas gérées par la fonction elle-même, mais par son application Fonction. Donc, si vous utilisez la cli, il y a quelque chose de long ...

az functionapp appsettings set .....

C'est comme ça que je fais dans mon pipeline CI/CD. Après cela, vous pouvez les utiliser dans vos fonctions. Rappelez-vous qu'une fonction DOIT vivre dans une application de fonction. Il est donc parfaitement logique de placer toutes ces valeurs ici pour qu'elles soient disponibles dans chaque fonction.

0
Pepito Fernandez