Azure Functions v2-新的.netcore配置和部署

And*_*w G 8 configuration azure azure-functions

现在,我们可以使用.NETCore中非常灵活的配置引擎-我们可以执行以下操作:

   private static IConfigurationRoot SetConfig(ExecutionContext executionContext)
    {
        return new ConfigurationBuilder()
           .SetBasePath(executionContext.FunctionAppDirectory)
           .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
           .AddEnvironmentVariables()
           .Build();
    }
Run Code Online (Sandbox Code Playgroud)

这很棒,因为它允许您将更复杂的配置数据放入配置文件中-例如

    {
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "<< removed >>",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "APPINSIGHTS_INSTRUMENTATIONKEY": "<< removed >>"
  },
  "MyCustomSettings": [
    {
      "ConnectionString": "<< removed >>",
      "Folders": [
        {
          "ShareName": "share1",
          "FolderName": "folder1"
        },
        {
          "ShareName": "share2",
          "FolderName": "folder2"
        }
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

再次-好消息!现在,我可以使用config [“ MyCustomSettings”]访问我的强类型配置

我没有得到的是发布功能时如何进行部署。仅“值”部分迁移到Azure函数“应用程序设置”。我显然可以将此自定义json放在json文件中,并将其添加到类似local.settings.json的load语句中。

.AddJsonFile("my-custom-settings.json", optional: false, reloadOnChange: true)
Run Code Online (Sandbox Code Playgroud)

但是此文件必须包含在部署中,并且不能安全存储。

有任何想法吗?

Mad*_*han 2

截至 2019 年 11 月,此功能尚未得到官方支持。

警告

避免尝试从消费计划上的 local.settings.json 或 appsettings.{environment}.json 等文件中读取值。随着应用程序扩展,从这些与触发器连接相关的文件中读取的值将不可用,因为托管基础设施无法访问配置信息。

有很多博客建议这样做,如果您只有一个实例,这可能会起作用,但一旦 ScaleController 触发缩放,新实例将无法找到配置文件。

如果您有使用该%SettingName%语法的触发器,它们将不会随着函数缩放而工作。

职能团队正在 考虑 可能的 选项(笑)

还可以选择使用新的应用程序配置服务,但它目前处于预览阶段,并非在所有 Azure 区域都可用。

将配置放入 blob 存储中并在启动时加载可能更简单?(您的 blob 存储连接字符串需要位于环境变量中)

到目前为止,我们能做的最好的事情MyThingTimeout就是将您的“不太秘密”设置(例如或ExternalEndpointAddress)包含在 json 文件中,并.AddJsonFile(...)在 KeyVault 中使用和放置秘密。这确实迫使您拆分配置并决定哪个配置放在哪里。(还要确保您的触发器仅从值部分/环境变量中读取)