[英]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 变量中)
到目前为止,我们能做的最好的事情是将您的“不那么秘密”的设置(比如MyThingTimeout
或ExternalEndpointAddress
)包含在一个 json 文件中,并使用.AddJsonFile(...)
并将秘密放在 KeyVault 中。 这确实会迫使您拆分配置并决定哪个去哪里。 (并确保您的触发器仅从“值”部分/环境变量中读取)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.