【问题标题】:Set ARM Template Web appSetting设置 ARM 模板 Web 应用设置
【发布时间】:2016-11-03 07:41:56
【问题描述】:

如何使用 ARM 将应用程序设置部署到网站?


1 在 VS ARM Deploy json 中运行以下命令时:

....
     "resources": [
    {
      "apiVersion": "2015-08-01",
      "name": "[variables('hostingPlanName')]",
      "type": "Microsoft.Web/serverfarms",
      "location": "[resourceGroup().location]",
      "tags": {
        "displayName": "HostingPlan"
      },
      "sku": {
        "name": "[variables('skuName')]",
        "capacity": "[variables('skuCapacity')]"
      },
      "properties": {
        "name": "[variables('hostingPlanName')]"
      }
    },
    {
      "apiVersion": "2015-08-01",
      "name": "[variables('webSiteName')]",
      "type": "Microsoft.Web/sites",
      "location": "[resourceGroup().location]",
      "dependsOn": [
        "[concat('Microsoft.Web/serverFarms/', variables('hostingPlanName'))]"
      ],
      "tags": {
        "[concat('hidden-related:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', variables('hostingPlanName'))]": "empty",
        "displayName": "Website"
      },
      "properties": {
        "name": "[variables('webSiteName')]",
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]"
      },
      "resources": [
        {
          "apiVersion": "2015-08-01",
          "name": "web",
          "type": "config",
          "dependsOn": [
            "[concat('Microsoft.Web/Sites/', variables('webSiteName'))]"
          ],
          "properties": {
            "netFrameworkVersion": "4.5.2",
            "use32BitWorkerProcess": true,
            "webSocketsEnabled": false,
            "alwaysOn": false,
            "requestTracingEnabled": true,
            "httpLoggingEnabled": true,
            "logsDirectorySizeLimit": 40,
            "detailedErrorLoggingEnabled": true,
            "appSettings": [
              {
                "name": "testn",
                "value": "testv"
              }
            ],
            "connectionstrings": [
              {
                "name": "testn",
                "value": "testv",
                "type": "SQLServer"
              }
            ]
          }
        }
      ]
    }
  ],

输出是;

VERBOSE: Performing the operation "Creating Deployment" on target "testdeploy3".
VERBOSE: 4:44:42 PM - Template is valid.
...
VERBOSE: 4:45:17 PM - Resource Microsoft.Web/sites/config 'testwebadtzmdritygpo/web' provisioning status is succeeded

...
ProvisioningState       : Succeeded

在门户中双重检查显示尚未创建 appsettings 和连接字符串

问题 1:如何使用 PowerShell 查询网站的配置属性?

问题 2:如何使用 ARM 将应用程序设置部署到网站?

【问题讨论】:

    标签: powershell azure


    【解决方案1】:

    感谢@Alexander-s 和 @davidebbo

    使用 PowerShell

    部署(没有 appsettings)成功后。然后运行它来完全覆盖 appsettings。

    $subscriptionID = {...}
    Add-AzureRmAccount
    Set-AzureRmContext -SubscriptionID $subscriptionID
    
    # List appsettings
    $resource = Invoke-AzureRmResourceAction -ResourceGroupName <ResourceGroupName> -ResourceType Microsoft.Web/sites/config -ResourceName <webSiteName>/appsettings -Action list -ApiVersion 2015-08-01 -Force
    $resource.Properties
    
    # SET list
    $appsettingTest1Value = "testValue1"
    $appsettingTest2Value = "testValue2"
    $PropertiesObject = @{
        appsettingTest1=$appsettingTest1Value,
        appsettingTest2=$appsettingTest2Value,
        WEBSITE_NODE_DEFAULT_VERSION: "4.4.7"
      }
    New-AzureRmResource -PropertyObject $PropertiesObject -ResourceGroupName <ResourceGroupName> -ResourceType Microsoft.Web/sites/config -ResourceName <webSiteName>/appsettings -ApiVersion 2015-08-01 -Force
    

    使用 ARM 部署 JSON

    {
      "apiVersion": "2015-08-01",
      "name": "[variables('webSiteName')]",
      "type": "Microsoft.Web/sites",
      "location": "[resourceGroup().location]",
      "dependsOn": [
        "[concat('Microsoft.Web/serverFarms/', parameters('hostingPlanName'))]",
        "[concat('Microsoft.Storage/storageAccounts/', variables('storage_account_name'))]",
        "[resourceId('Microsoft.Sql/servers', variables('sqlserverName'))]",
        "[resourceId('Microsoft.Sql/servers/databases', variables('sqlserverName'), parameters('database_name_auth'))]"
      ],
      "tags": {
        "[concat('hidden-related:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]": "empty",
        "displayName": "Website"
      },
      "properties": {
        "name": "[variables('webSiteName')]",
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]"
      },
      "resources": [
        {
          "apiVersion": "2015-08-01",
          "name": "web",
          "type": "config",
          "dependsOn": [
            "[concat('Microsoft.Web/Sites/', variables('webSiteName'))]"
          ],
          "properties": {
            "netFrameworkVersion": "[parameters('dotnet_version')",
            "use32BitWorkerProcess": "[parameters('use32bit_worker_process')",
            "webSocketsEnabled": false,
            "alwaysOn": "[parameters('enable_always_on')]",
            "requestTracingEnabled": true,
            "httpLoggingEnabled": true,
            "logsDirectorySizeLimit": 40,
            "detailedErrorLoggingEnabled": true
          }
        },
        {
          "apiVersion": "2015-08-01",
          "name": "appsettings",
          "type": "config",
          "dependsOn": [
            "[concat('Microsoft.Web/Sites/', variables('webSiteName'))]"
          ],
          "properties": {
            "appsettingTest1": "[parameters('appsettingTest1Value')]",
            "appsettingTest2": "[parameters('appsettingTest2Value')]"
          }
        },
        {
          "apiVersion": "2015-08-01",
          "name": "connectionstrings",
          "type": "config",
          "dependsOn": [
            "[concat('Microsoft.Web/Sites/', variables('webSiteName'))]"
          ],
          "properties": {
            "dbconnstringTest1": {
              "value": "[concat('Data Source=tcp:', reference(concat('Microsoft.Sql/servers/', variables('sqlserverName'))).fullyQualifiedDomainName, ',1433;Initial Catalog=', parameters('database_name_auth'), ';User Id=', parameters('administratorLogin'), '@', variables('sqlserverName'), ';Password=', parameters('administratorLoginPassword'), ';')]",
              "type": "SQLServer"
            },
            "AzureWebJobsConnectionString": {
              "value": "[concat('DefaultEndpointsProtocol=https;AccountName=',variables('storage_account_name'),';AccountKey=',listkeys(resourceId('Microsoft.Storage/storageAccounts', variables('storage_account_name')), '2015-05-01-preview').key1,';')]",
              "type": "Custom"
            }
          }
        }
      ]
    },
    

    【讨论】:

    • 这里我们正在创建父子资源,因此子资源的名称是可解析的。但是如果父资源已经存在,我们只需要添加子资源怎么办。就像我可以拥有 Cloud DNS 一样如何在其中添加记录集?我找不到如何设置名称。
    【解决方案2】:

    回答 1

       $webapp = Get-AzureRmWebApp -Name $webSiteName
       $webapp.SiteConfig.AppSettings
    

    答案 2

    这是我的 ARM 模板中的内容,它工作正常:

      "resources": [
        {
          "apiVersion": "2015-08-01",
          "location": "[resourceGroup().location]",
          "type": "config",
          "name": "appsettings",
          "dependsOn": [
            "[resourceId('Microsoft.Web/Sites', variables('webSiteName'))]"
          ],
          "properties": {...}
        },
        {
          "apiVersion": "2015-08-01",
          "location": "[resourceGroup().location]",
          "type": "config",
          "name": "web",
          "dependsOn": [
            "[resourceId('Microsoft.Web/Sites', variables('webSiteName'))]"
          ],
          "properties": {
            "alwaysOn": true
          }]
    

    如您所见,我将 AppSettings 设置为网站下的单独资源。试试吧,应该可以的。

    希望对你有帮助。

    【讨论】:

    • 资源是“Microsoft.Web/sites”还是“Microsoft.Web/serverfarms”下的“节点”?
    • 答案 1. 可能不是。大量的 NameValuePair 和 Dictionary 转换,以确保只添加额外的 appsettings,而不是删除任何现有的。
    • 如果我只想插入一个,请回答 2。有关多个值和连接字符串的“自己的答案”,请参见下文。提示来自:github.com/davidebbo/AzureWebsitesSamples/blob/…
    • 在网站下
    猜你喜欢
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 2019-01-28
    • 2023-04-10
    相关资源
    最近更新 更多