管理多个环境的设置?

时间:2018-08-14 22:39:09

标签: c# .net azure azure-functions

Azure Function应用程序允许您使用诸如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 }));
}

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

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

例如,如果我从dev部署到main,如何获取主环境的设置?

1 个答案:

答案 0 :(得分:2)

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

通常可能有两种配置:

我们不想将开发配置与生产环境混在一起

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

  2. 对于VS部署,我们可以在部署期间管理应用程序设置。如果我们要在部署之前修改设置,只需选择create profile而不是publish,然后在编辑应用程序设置后发布即可。

    application settings in VS

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

  4. 如果需要频繁更改设置,也建议使用
  5. 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来读取我们的自定义设置。