【问题标题】:Managing settings for multiple environments?管理多个环境的设置?
【发布时间】:2018-08-14 22:39:08
【问题描述】:

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 }));
}

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

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

例如,如果我从 dev 部署到 main,我如何检索 main 环境的设置?

【问题讨论】:

  • 也许这是部署时的责任?
  • 我认为正如 Alex 提到的,这听起来是部署时间。也许通过 Arm 模板

标签: c# .net azure azure-functions


【解决方案1】:

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

一般可能有两种配置:

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

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

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

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

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

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

  1. 使用Azure function core tools

    安装后,在 cmd(或 powershell、bash 等)中导航到您的函数应用目录(local.settings.json 所在的位置)。使用以下命令从 Azure 获取 appsettings 到 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 用户,只需单击一下即可。

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

说明

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

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

【讨论】:

  • 非常感谢。关于一种常见且简单的方法是访问门户以编辑应用程序设置——我不认为这是一个选项。这个过程太手动了。
  • 你的创建个人资料的想法看起来很酷;但是,是否可以创建 local 配置文件?如果我想在本地测试,我该如何使用 appsettings?我知道当我们远程部署时,我们可以为每个配置文件设置应用程序设置,但是 在 VS 中的调试期间应用程序设置是否可用
  • @AlexGordon 对不起,我的话让你感到困惑。查看我的更新。
  • 非常感谢。那么这在我们的部署过程中会是什么样子呢?假设我们正在部署 VSTS,我们会运行func azure functionapp publish &lt;functionappname&gt; --publish-settings-only 命令吗?
  • @AlexGordon 为此,local.setting.json 需要提交到存储库(编辑 gitignore),因为通常不是。我们应该首先设置一个 npm 任务npm install -g azure-fucntions-core-tools,因为默认情况下基础设施上没有安装函数 cli,然后添加另一个任务来运行命令。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 2021-09-05
  • 2020-02-14
相关资源
最近更新 更多