c# - 管理多个环境的设置?

标签 c# .net azure azure-functions

Azure Function Apps 允许您拥有一个设置文件,例如 local.settings.json。

然后您可以像这样使用这些设置:

[FunctionName("CustomSettings")]
public static Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "GET")]HttpRequestMessage req, TraceWriter log)
{
    log.Info("101 Azure Function Demo - Accessing Environment variables");
    var customSetting =  Environment.GetEnvironmentVariable("CustomSetting", EnvironmentVariableTarget.Process);
    return Task.FromResult(req.CreateResponse(HttpStatusCode.OK, new { setting= customSetting }));
}

这很好;然而,当需要管理多个环境的设置(类似于配置转换)时,挑战就变得显而易见。

我们如何跨多个环境管理应用设置?

例如,如果我从开发部署到主环境,如何检索主环境的设置?

最佳答案

GetEnvironmentVariable 足以检索 local.settings.json 的 Values 中的设置以及 Azure 上的应用程序设置。我们只需要确保这些设置已在本地或 Azure 门户上配置。

通常可能有两种配置:

我们不想将开发配置与生产环境混合

  1. 一种常见且简单的方法是访问门户来编辑应用程序设置。

  2. 对于 VS 部署,我们可以在部署期间管理应用程序设置。如果我们想在部署之前修改设置,只需选择创建配置文件而不是发布并在编辑应用程序设置后发布。

    application settings in VS

  3. 如果我们选择像 VSTS 这样的持续交付,我们还可以使用 Azure CLI 来管理应用程序设置或related extension在构建和发布管道中。

  4. ARM template如果我们必须经常更改设置,也建议使用。

我们希望将本地开发设置同步到生产环境

  1. 使用Azure function core tools

    安装后,在cmd(或powershell、bash等)中导航到您的函数应用程序目录(local.settings.json所在的位置)。使用以下命令将应用程序设置从 Azure 获取到 local.setting.json 并将这些设置发布到 Azure。 (请注意,fetch-app-settings 还会检索 Azure 上的连接设置,但仅发布更新应用程序设置。)

    func azure functionapp fetch-app-settings <functionappname>
    func azure functionapp publish <functionappname> --publish-settings-only
    

    如果我们想在 VSTS 中使用此 cli,请注意 local.setting.json 需要提交到存储库(通过编辑 gitignore),因为通常不是这样。我们应该先设置一个 npm 任务来安装 cli 函数,因为默认情况下它没有安装在基础设施上,然后添加另一个任务来运行该命令。

  2. 对于 VS Code用户只需简单点击一下即可。 enter image description here

使用 cli 和 VS Code 时请注意覆盖提示,确保开发设置不会覆盖其他环境中有用的设置。

说明

  1. 编辑门户应用程序设置实际上是手动的,但对于那些在线开发或不需要经常修改其设置的人来说,在门户上修改可能是一个合理的选择。

  2. 一些Application settings仅在 Azure 上有用。同样,并非每个值都适用于 local.setting.json在 Azure 上有效。 因此,根据设计,Azure 不会将这两部分设置合并在一起。当然,一旦正确设置,我们的自定义设置就可以在本地和 Azure 环境中使用 GetEnvironmentVariable 读取。

关于c# - 管理多个环境的设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51850657/

相关文章:

python - 如何在不使用 Pillow 的情况下在 Python 中调整图像大小

azure - 映射主机名和外部 IP 的 DNS 记录

C# - 从 DataGridView 更新 MS Access 表时发生并发 Access 冲突

c# - null + true 怎么是一个字符串?

c# - 如何以编程方式将受众 uri 传递给 AudienceUriElementCollection?

.net - c# 全双工异步命名管道 .NET

azure - 无法使用 azure key Vault ('New-AzureKeyVault' 无法识别)('keyvault' 不是 azure 命令)

c# - 连续写入文件并将数据保存在数组中并一次写入文件

c# - 将可变参数传递给委托(delegate)

c# - 如何更改 ScriptManager 中已注册脚本的顺序