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?
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
ouConfigurationManager.AppSettings
. En JavaScript, utilisezprocess.env
. Les paramètres spécifiés en tant que variable d'environnement système ont priorité sur les valeurs du fichierlocal.settings.json
.
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:
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"]
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
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.
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.