繁体   English   中英

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

[英]Azure Functions v2 - New .netcore Configuration and deployment

现在我们可以使用 .NETCore 非常灵活的配置引擎 - 我们可以这样做:

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

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

    {
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "<< removed >>",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "APPINSIGHTS_INSTRUMENTATIONKEY": "<< removed >>"
  },
  "MyCustomSettings": [
    {
      "ConnectionString": "<< removed >>",
      "Folders": [
        {
          "ShareName": "share1",
          "FolderName": "folder1"
        },
        {
          "ShareName": "share2",
          "FolderName": "folder2"
        }
      ]
    }
  ]
}

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

我不明白的是 - 发布功能时如何部署它。 只有值部分迁移到 Azure 函数应用程序设置。 我显然可以将这个自定义 json 放在一个 json 文件中,并将其添加到 load 语句中,如 local.settings.json

.AddJsonFile("my-custom-settings.json", optional: false, reloadOnChange: true)

但是这个文件必须包含在部署中,并且没有安全存储。

有任何想法吗?

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

警告

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

有很多博客都建议这样做,如果您只有一个实例,这似乎可行,但是一旦 ScaleController 触发缩放,新实例将无法找到配置文件。

如果您有使用%SettingName%语法的触发器,它们将不会在函数缩放时起作用。

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

还可以选择使用新的App Configuration服务,但它目前处于预览状态,并非在所有 Azure 区域都可用。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM