【问题标题】:What is the best way to manage your environment specific app settings in Azure?在 Azure 中管理环境特定应用设置的最佳方式是什么?
【发布时间】:2020-06-07 01:59:23
【问题描述】:

我当前的设置将环境特定的应用程序设置存储在 ARM 参数文件的一个部分中。因此,ARM 参数文件的结构如下所示:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "deploymentSpecificValues": {
      "value": {
        "subscriptionId": "0ce7bbfc-9fa4-46b5-8f38-303db907fd89",
        "environmentName": "dev",
        "azureBlobUri": "https://mytestblob.blob.core.windows.net/"
      }
    },
    "regions": {
      "value": [
        {
          "location": "West US",
          "additionalRegionData": "abc"
        },
        {
          "location": "West US 2",
          "additionalRegionData": "pqr"
        }
      ]
    },
    "webAppInfo": {
      "value": {
        "appName": "mytestapp",
        "appSettings": {
          "SqlServerConnectionString": "mySqlServerConnectionString",
          "Service1Url": "https://www.service1url.com",
          "Service2Url": "https://www.service2url.com"
        }
      }
    },
    "sku": {
      "value": "Dynamic"
    }
  }
}

请注意位于上述代码的 webAppInfo 节点下的 appSettings。每个环境都有它自己的参数文件,就像上面一样。我相信 appsettings 的数量会随着时间的推移而不断增长,并且可能会使参数文件变得混乱。

问题:

  1. 这是管理应用设置的最佳做法吗?
  2. 如果上述问题的答案是否定的,那么在这种情况下处理应用设置的最佳做法是什么?

【问题讨论】:

  • 这种方法一点也不差。另一种方法是使用 Terraform 或 Ansible 等 IaC 工具,它们为您提供更多的基础架构和配置管理结构。例如,在 Terraform 中,您可以将工作空间用于不同的环境,并且只有一个参数文件来存储不同环境的每个参数的不同值,并在 terraform 文件中使用查找来获取该环境的该参数的值。您还可以使用此类工具获得其他功能。根据经验,Terraform 和 ARM 可以很好地协同工作。

标签: azure configuration azure-web-app-service azure-resource-manager


【解决方案1】:

几个想法:

  • 您所做的很好,但您是对的 1) 它在参数文件中可能会变得笨拙,并且 2) 通常这些参数文件在源代码控制中,因此请确保您在其中拥有的内容应该是在源代码中。
  • 检查是否有可以在部署时从部署中获得的值,例如subscriptionId 可以从 subscription() 函数返回(假设您想要部署到的订阅的 ID)。

Azure 中有两种资源可用于存储“配置” - 您可以稍微不同地使用它们。

  1. KeyVault 可以安全地存储任意字符串(例如 json 的 blob),并且可以在部署时动态引用(通过参数)。

https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/key-vault-parameter

  1. App-Config 是一种用于存储此类情况的配置值的资源 - 您可以使用 listKeyValue() 模板函数从配置存储中提取值

https://docs.microsoft.com/en-us/azure/azure-app-configuration/quickstart-resource-manager https://github.com/Azure/azure-quickstart-templates/tree/master/101-app-configuration

有帮助吗?

【讨论】:

  • 感谢@bmoore-msft 的详细回复!我知道 AppConfiguration 在这里可能有用,但我想限制最终用户对门户的访问并控制代码库中的所有内容。如果服务不可用,应用程序配置还会为我的应用程序提供故障点。想法?
  • appSettings 被视为机密,因此只有对资源具有贡献者访问权限的用户才能更改它...如果用户需要成为贡献者,那么您可以锁定资源以防止更改。 AppConfigStore 只会在部署时使用,因此如果部署成功,那么您的风险窗口已经过去。有帮助吗?
【解决方案2】:

是的,我认为像这样在 ARM 模板中管理 appsettings 是一个很好的做法。

但如果您只是想添加/更新设置,建议使用 azure 门户或 Azure CLI。

参考:

az webapp config appsettings

【讨论】:

  • 只需要小心这种方法,因为您的模板和配置变得不同步......
猜你喜欢
  • 1970-01-01
  • 2014-06-01
  • 1970-01-01
  • 2015-03-23
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 2011-05-06
  • 2023-03-16
相关资源
最近更新 更多