Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Azure中管理特定于环境的应用程序设置的最佳方法是什么?_Azure_Configuration_Azure Web App Service_Azure Resource Manager - Fatal编程技术网

在Azure中管理特定于环境的应用程序设置的最佳方法是什么?

在Azure中管理特定于环境的应用程序设置的最佳方法是什么?,azure,configuration,azure-web-app-service,azure-resource-manager,Azure,Configuration,Azure Web App Service,Azure Resource Manager,我的当前设置将特定于环境的应用程序设置存储在ARM参数文件的一个部分中。因此,ARM参数文件的结构如下所示: { "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "deploymentSpecificValues": { "value

我的当前设置将特定于环境的应用程序设置存储在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的数量会随着时间的推移而不断增长,这可能会使参数文件变得混乱

问题:

  • 这是管理应用程序设置的最佳做法吗
  • 如果以上问题的答案是否定的,那么在这种情况下处理appsettings的最佳实践是什么

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

    但如果您只想添加/更新设置,建议使用azure portal或azure CLI

    参考:

    一些想法:

    • 你所做的很好,但你是对的,1)在param文件中可能会变得笨拙,2)通常这些param文件都在源代码管理中,所以确保你在那里的内容应该在源代码中
    • 检查是否有可以在部署时从部署中获取的值,例如,subscriptionId可以从subscription()函数返回(假设您需要要部署到的订阅的id)
    Azure中有两种资源可用于存储“配置”-您可以稍微不同地使用它们

  • KeyVault可以安全地存储任意字符串(例如json的blob),并且可以在部署时动态引用(通过参数)
  • App Config是一种用于存储配置值的资源,可用于存储此类场合的配置值-您可以使用listKeyValue()模板函数从配置存储中提取值

  • 有帮助吗?

    这种方法一点也不坏。另一种方法是使用诸如Terraform或Ansible之类的IaC工具,它们为基础架构和配置管理提供了更多的结构。例如,在Terraform中,您可以为不同的环境使用工作空间,并且只有一个参数文件来存储不同环境的每个参数的不同值,并在Terraform文件中使用查找来获取该环境的参数值。您还可以使用这些工具获得其他功能。根据经验,Terraform和ARM配合得非常好。感谢@bmoore msft的详细回复!我知道AppConfiguration在这里可能很有用,但我想限制最终用户对门户的访问,并控制代码库中的所有内容。应用程序配置还为我的应用程序提供了一个故障点,以防服务不可用。想法?应用程序设置被视为机密,因此只有具有资源参与者访问权限的用户才能更改它。。。如果用户需要成为贡献者,则可以锁定资源以防止更改。AppConfigStore将仅在部署时使用,因此如果部署成功,则风险窗口已过。这有帮助吗?只需要小心使用这种方法,因为您的模板和配置变得不同步。。。