编辑
下面的建议不适用于 a Trigger
,仅适用于 a Binding
。我们必须等待团队在 Azure Functions 中支持 Key Vault 终结点,请参阅此 GitHub 问题。
我认为您正在寻找的是一种叫做Imperative Bindings的东西。
我昨天自己发现了它们,并且对它们也有疑问。使用这些类型的绑定,您可以动态设置所需的绑定,因此您可以从其他地方(如全局变量或一些初始化代码)检索数据并在绑定中使用它。
我使用它的目的是从 Azure Key Vault 中检索一些值,但您当然也可以从其他地方检索数据。一些示例代码。
// Retrieving the secret from Azure Key Vault via a helper class
var connectionString = await secret.Get("CosmosConnectionStringSecret");
// Setting the AppSetting run-time with the secret value, because the Binder needs it
ConfigurationManager.AppSettings["CosmosConnectionString"] = connectionString;
// Creating an output binding
var output = await binder.BindAsync<IAsyncCollector<MinifiedUrl>>(new DocumentDBAttribute("TablesDB", "minified-urls")
{
CreateIfNotExists = true,
// Specify the AppSetting key which contains the actual connection string information
ConnectionStringSetting = "CosmosConnectionString",
});
// Create the MinifiedUrl object
var create = new CreateUrlHandler();
var minifiedUrl = create.Execute(data);
// Adding the newly created object to Cosmos DB
await output.AddAsync(minifiedUrl);
您还可以将其他一些属性与命令式绑定一起使用,我相信您会在文档中看到这一点(第一个链接)。
除了使用命令式绑定,您还可以使用您的应用程序设置。
作为最佳实践,应使用应用程序设置而不是配置文件来管理机密和连接字符串。这限制了对这些机密的访问,并使将 function.json 存储在公共源代码控制存储库中变得安全。每当您想根据环境更改配置时,应用程序设置也很有用。例如,在测试环境中,您可能想要监视不同的队列或 Blob 存储容器。只要将值括在百分号中,就会解析应用程序设置,例如 %MyAppSetting%。请注意,触发器和绑定的连接属性是一种特殊情况,会自动将值解析为应用程序设置。以下示例是一个 Azure 队列存储触发器,它使用应用设置 %input-queue-name% 来定义要触发的队列。
{
"bindings": [
{
"name": "order",
"type": "queueTrigger",
"direction": "in",
"queueName": "%input-queue-name%",
"connection": "MY_STORAGE_ACCT_APP_SETTING"
}
]
}