J'ai actuellement une fonction Azure à l'aide de la liaison ServiceBustrigger
[ServiceBusTrigger("%TopicName%", "%SubscripionName%", Connection = "MyConnection")]
string catclogueEventMsgs, ILogger log, ExecutionContext context)
qui utilise ce fichier local.Settings.json
"Values": {
…
"MyConnection": "Endpoint=sb://testxxxxxxxxxxxxxxxxxx
"SubscriptionName": "testsubscriptionName"
"TopicName": "testtopicName",
}
Comment puis-je représenter cela dans le fichier appsetTes.json. Sera-ce comme ci-dessous?
"Values": {
"MyConnection": "Endpoint=sb://testxxxxxxxxxxxxxxxxxx
"SubscriptionName": "testsubscriptionName"
"TopicName": "testtopicName",
}
Au lieu d'utiliser une "valeurs", puis-je utiliser, par exemple, objet "MySubs" comme ci-dessous?
"MySubs": {
"MyConnection": "Endpoint=sb://testxxxxxxxxxxxxxxxxxx
"SubscriptionName": "testsubscriptionName"
"TopicName": "testtopicName",
}
Si son possible d'utiliser les paramètres ci-dessus, comment puis-je représenter cela dans la liaison ServiceBgrigger? Est-ce que je changerais ça?
[ServiceBusTrigger("%MySubs.TopicName%", "%MySubs.SubscripionName%", Connection = "MySubs.MyConnection")]
string catclogueEventMsgs, ILogger log, ExecutionContext context)
Cela ressemble à un hybride de Jason et Oneil/Liam est correct.
D'après ce que je peux dire, dans le nom/la déclaration/la définition de la fonction, il doit provenir de la locale.Settings.json lors du développement et du développement de "% theQuename%", puis entré dans la configuration de la fonction -> Paramètres de l'application pour Bleu azur.
Dans la fonction actuelle elle-même, vous pouvez exploiter l'injection de fichier JSON via STERTUP.CS, puis inclure les valeurs de la fonction elle-même.
Ceci mérite un poteau de blog totalement séparé (et il y a eu semblable, mais pas tout à fait comme des configurations sophistiquées mentionnées, mais voici ce que j'ai fait et figurant après une année plus et fonctionne de manière fantastique.
Configuration des fichiers :
Configuration Configuration : Startup.cs
(Même si cela dit/home/site/wwwroot - les fichiers sont basés sur la racine du projet, lors de la publication de la racine)
public override void Configure(IFunctionsHostBuilder builder)
{
var currentDirectory = "/home/site/wwwroot";
var config = new ConfigurationBuilder()
.SetBasePath(currentDirectory)
.AddJsonFile("local.settings.json", optional: false, reloadOnChange: true)
.AddJsonFile("Config/xyz.settings.json", optional: false, reloadOnChange: true)
.AddJsonFile("Config/xyz.settings.dev.json", optional: true, reloadOnChange: true)
.AddJsonFile("Config/secret.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
builder.Services.Configure<XyzSettings>(config.GetSection("XyzSettings"));
Ce que cela fait et comment ça marche:
en parlant de secrets :
Les secrets locaux peuvent être stockés dans les secrets.json tant qu'ils ne sont pas définis pour publier.
À Azure, il est recommandé de stocker les valeurs dans les paramètres de l'application de fonction qui touchent à Azure Key Vault.
Il est brillant comment il est configuré. Tout ce que vous faites dans les paramètres de l'application Fonction consiste à nommer la variable de quoi il est dans les paramètres, tels que XYZSETTINGS: SETNAME, puis se référer à l'emplacement dans la touche Vault comme suit:
@ Microsoft.KeyVault (Secreturi = https: //yourvalutname.vault.azure.net/secrets/secret-name/auto-generated-keyvaultGuid)
Fichier de fonction : (à l'aide d'une gâchette de files d'attente à titre d'exemple mais fonctionne de la même manière)
namespace Xyz.Functions
{
public class Azure_Queue_Add_Xyz
{
private readonly XyzSettings _xyzSettings = null;
public Azure_Queue_Add_Xyz(IOptions<AzureSettings> Azure_settings)
{
_azureSettings = Azure_settings.Value;
}
[FunctionName("Azure_Queue_Add_Xyz")]
public void Run(
[HttpTrigger(AuthorizationLevel.Function, "post",
Route = "HttpTrigger/Azure_Queue_Add_Xyz")] xyzConfig input,
[Queue("%TheQueueName%"), StorageAccount("StorageAccount")] ICollector<string> msgOutput,
ILogger logger,
ExecutionContext context)
{
logger.LogError("{0} is processing a request", context.FunctionName);
logger.LogError("{0} - Queue: {1}", context.FunctionName, _xyzSettings.TheQueueName);
logger.LogError("{0} - CloudQueueMessage: {1}", context.FunctionName, JsonConvert.SerializeObject(input));
msgOutput.Add(JsonConvert.SerializeObject(input));
}
}
}