我有一个用 .net 7 编写的独立 Azure 函数,由服务总线触发。 我正在尝试将我的连接字符串(以及其他凭据移至 KeyVault Secrets)
我已经创建了一个名为 ServiceBusConnectionString 的 Keyvault 密钥。
这是我的简化app.settings.json(我在Azure功能中有类似的配置)
"Values": {
"KeyVaultUri": "https://xxxxxxx-vault.vault.azure.net/",
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
"StorageConnectionString": "Moved to Keyvault",
"ServiceBusConnectionString": "Moved to Keyvault"
}
这是我的简化程序.cs:
internal class Program
{
private static void Main(string[] args)
{
string keyVaultUri = string.Empty;
SecretClient _secretClient;
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.ConfigureOpenApi()
.ConfigureAppConfiguration((context, config) =>
{
var builtConfig = config.Build();
keyVaultUri = builtConfig["KeyVaultUri"];
builtConfig = config.AddAzureKeyVault(new Uri(keyVaultUri), new DefaultAzureCredential());
})
.ConfigureServices(services =>
{
_secretClient = new SecretClient(new Uri(keyVaultUri), new DefaultAzureCredential());
services.AddOptions<DemandwareSettings>().Configure<IConfiguration>((settings, configuration) =>
{
configuration.GetSection("Demandware").Bind(settings);
settings.SFCCCustomerListId = _secretClient.GetSecret(configuration["SFCCCustomerListId"]).Value.Value;
});
services.AddSingleton<ISQLHelper, SQLHelper>();
services.AddHttpClient();
})
.Build();
host.Run();
}
}
最后这是我的 Azure 函数:
public class UpdateInvoices
{
[Function("UpdateInvoices")]
public async Task Run([ServiceBusTrigger("omssalespostings", "canadagoosetoods", Connection = "ServiceBusConnectionString")] string msg)
{
//....
}
}
在本地运行此 Azure 函数时,我收到此错误消息:
函数“Functions.UpdateInvoices”的侦听器无法启动。 Microsoft.Azure.WebJobs.Extensions.ServiceBus:服务总线帐户连接字符串“ServiceBusConnectionString”不存在。确保它是已定义的应用程序设置。
.build()
中的第 18 行末尾添加 Program.cs
以及 builtConfig
的断点,然后使用 Immediate Window 检索builtConfig["ServiceBusConnectionString"] 时,我得到了丢失的连接字符串值。 (请参阅下面的快照)
注意:我不想设置
"ServiceBusConnection" : "@Microsoft.KeyVault(SecretUri=<Y...
在我的
local.settings.json.
这就是为什么
从 Azure 服务总线读取并从 Azure KeyVault 加载连接配置的函数
对我不起作用。
尝试将这些行添加到您的 UpdateInvoices 类中。
private readonly IConfiguration _configuration;
public UpdateInvoices(IConfiguration configuration)
{
_configuration = configuration;
}