此功能已在此处跟踪并正在进行中:
编辑 28/11/2018:目前处于预览阶段
以前的答案 07/10/2018
此解决方案不适用于使用消费计划的触发器。
与此同时,我对您的问题进行了一些研究,如果您使用 Azure Function v2,则可以从密钥保管库中读取配置。
我从 Visual Studio 创建了 Azure Functions v2 (.NET Standard)。
它使用:
- NETStandard.Library v2.0.3
- Microsoft.NET.Sdk.Functions v1.0.22
- Microsoft.Azure.WebJobs v3.0.0
- Microsoft.Azure.WebJobs.Extensions.Storage v3.0.0
由于 Azure Functions v2 使用 ASP.NET 核心,我可以参考此链接来配置我的函数应用以使用 Azure Key Vault:
Azure Key Vault configuration provider in ASP.NET Core
- 我添加了这个 nuget 包:
我已将我的应用配置为使用此 nuget 包:
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System.Linq;
[assembly: WebJobsStartup(typeof(FunctionApp1.WebJobsExtensionStartup), "A Web Jobs Extension Sample")]
namespace FunctionApp1
{
public class WebJobsExtensionStartup : IWebJobsStartup
{
public void Configure(IWebJobsBuilder builder)
{
// Get the existing configuration
var serviceProvider = builder.Services.BuildServiceProvider();
var existingConfig = serviceProvider.GetRequiredService<IConfiguration>();
// Create a new config based on the existing one and add kv
var configuration = new ConfigurationBuilder()
.AddConfiguration(existingConfig)
.AddAzureKeyVault($"https://{existingConfig["keyVaultName"]}.vault.azure.net/")
.Build();
// replace the existing configuration
builder.Services
.Replace(ServiceDescriptor.Singleton(typeof(IConfiguration), configuration));
}
}
}
我的 Azure 函数使用 MSI:
我已向我的密钥保管库上的函数应用授予读取/列出机密权限:
我有一个小队列触发函数:
public static class Function2
{
[FunctionName("Function2")]
public static void Run([QueueTrigger("%queueName%", Connection = "queueConnectionString")]string myQueueItem, ILogger log)
{
log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
}
}
queueName 在local.settings.json 文件中定义(部署后的应用设置刀片):
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"keyVaultName": "thomastestkv",
"queueName": "myqueue"
}
}
queueConnectionString 在我的密钥库中配置: