0
votes

I am encountering strange behavior when deploying an ARM template.

I have the following template: (Note that sasUrl value 'xxx' has a real, working value in my file)

{
  "name": "[variables('webAppServiceName')]",
  "type": "Microsoft.Web/sites",
  "location": "[resourceGroup().location]",
  "apiVersion": "2016-08-01",
  "dependsOn": [
    "[concat('Microsoft.Web/serverfarms/', variables('appServicePlanName'))]"
  ],
  "tags": {
    "[concat('hidden-related:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', variables('appServicePlanName'))]": "Resource",
    "displayName": "[variables('webAppServiceName')]"
  },
  "properties": {
    "name": "[variables('webAppServiceName')]",
    "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanName'))]"
  },
  "resources": [
    {
      "apiVersion": "2014-11-01",
      "name": "appsettings",
      "type": "config",
      "dependsOn": [
        "[concat('Microsoft.Web/sites/', variables('webAppServiceName'))]",
        "[concat('Microsoft.Web/certificates/', variables('certificateName'))]"
      ],
      "tags": {
        "displayName": "WebAppSettings"
      },
      "properties": {
        "WEBSITE_LOAD_CERTIFICATES": "[reference(resourceId('Microsoft.Web/certificates', variables('certificateName')), providers('Microsoft.Web', 'certificates').apiVersions[0]).thumbprint]"
      }
    },
    {
      "apiVersion": "2016-08-01",
      "name": "Microsoft.ApplicationInsights.Profiler.AzureWebApps",
      "type": "siteextensions",
      "dependsOn": [
        "[resourceId('Microsoft.Web/Sites', variables('webAppServiceName'))]"
      ],
      "properties": {}
    },
    {
      "apiVersion": "2015-08-01",
      "name": "logs",
      "type": "config",
      "dependsOn": [
        "[resourceId('Microsoft.Web/Sites', variables('webAppServiceName'))]"
      ],
      "properties": {
        "applicationLogs": {
          "fileSystem": {
            "level": "Off"
          },
          "azureTableStorage": {
            "level": "Off"
          },
          "azureBlobStorage": {
            "level": "[parameters('applicationLogLevel')]",
            "sasUrl": "xxx"
          }
        },
        "httpLogs": {
          "fileSystem": {
            "enabled": false
          },
          "azureBlobStorage": {
            "enabled": true,
            "sasUrl": "xxx"
          }
        },
        "failedRequestsTracing": {
          "enabled": "[parameters('enableFailedRequestTracing')]"
        },
        "detailedErrorMessages": {
          "enabled": "[parameters('enableDetailedErrorMessages')]"
        }
      }
    }
  ]
}

When deploying this template without modifying anything, the config section 'logs' is not deployed correctly +- 1 on 2 times. I have just tested the ARM template again, and the first deployment, the web app had not the correct settings for diagnostics logging. The second time neither, but the third time they were ok. But the fourth time, the settings were not correct anymore. It looks like this part of the template has no consistent behavior.

Am I overseeing something?

2
Do you have any update about this thread? If it is useful, please help to mark it as answer that will help more communities who has the same issue? - Tom Sun - MSFT
I still don't have a consistent result, but a support ticket has been logged with the Azure support team and they are working on it. - Identity

2 Answers

0
votes

I try to create WebApp with the appsetting and logs, it works correctly for me. I created the project using Visual Studio. The following is my detail steps.

1.Create the Azure Resource Project

enter image description here

2.Select the WebApp template

enter image description here

3.Click the deploy file then right click and remove the unnecessary resource

enter image description here

4.Add the Appsetting Resource for the WebApp

enter image description here

5.Add the logs code for the Azure WebApp

{
          "apiVersion": "2015-08-01",
          "name": "logs",
          "type": "config",
          "dependsOn": [
            "[resourceId('Microsoft.Web/Sites', variables('webSiteName'))]"
          ],
          "properties": {
            "applicationLogs": {
              "fileSystem": {
                "level": "Off"
              },
              "azureTableStorage": {
                "level": "Off"
              },
              "azureBlobStorage": {
                "level": "[variables('Level')]",
                "sasUrl": "xxxx"
              }
            },
            "httpLogs": {
              "fileSystem": {
                "enabled": false
              },
              "azureBlobStorage": {
                "enabled": true,
                "sasUrl": "xxxxxx"
              }
            },
            "failedRequestsTracing": {
              "enabled": "[parameters('enableFailedRequestTracing')]"
            },
            "detailedErrorMessages": {
              "enabled": "[parameters('enableDetailedErrorMessages')]"
            }
          }
        }

6.Right click the project and select the deploy

enter image description here

7.Check the result from the Output and Azure portal

enter image description here

enter image description here

The whole arm template:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "hostingPlanName": {
      "type": "string",
      "minLength": 1
    },
    "enableFailedRequestTracing": {
      "type": "bool"
    },
    "enableDetailedErrorMessages": {
      "type": "bool"
    },
    "skuName": {
      "type": "string",
      "defaultValue": "F1",
      "allowedValues": [
        "F1",
        "D1",
        "B1",
        "B2",
        "B3",
        "S1",
        "S2",
        "S3",
        "P1",
        "P2",
        "P3",
        "P4"
      ],
      "metadata": {
        "description": "Describes plan's pricing tier and capacity. Check details at https://azure.microsoft.com/en-us/pricing/details/app-service/"
      }
    },
    "skuCapacity": {
      "type": "int",
      "defaultValue": 1,
      "minValue": 1,
      "metadata": {
        "description": "Describes plan's instance count"
      }
    }
  },
  "variables": {
    "webSiteName": "[concat('webSite', uniqueString(resourceGroup().id))]",
    "Level": "Error"
  },
  "resources": [
    {
      "apiVersion": "2015-08-01",
      "name": "[parameters('hostingPlanName')]",
      "type": "Microsoft.Web/serverfarms",
      "location": "[resourceGroup().location]",
      "tags": {
        "displayName": "HostingPlan"
      },
      "sku": {
        "name": "[parameters('skuName')]",
        "capacity": "[parameters('skuCapacity')]"
      },
      "properties": {
        "name": "[parameters('hostingPlanName')]"
      }
    },
    {
      "apiVersion": "2015-08-01",
      "name": "[variables('webSiteName')]",
      "type": "Microsoft.Web/sites",
      "location": "[resourceGroup().location]",
      "tags": {
        "[concat('hidden-related:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]": "Resource",
        "displayName": "Website"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"
      ],
      "properties": {
        "name": "[variables('webSiteName')]",
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]"
      },
      "resources": [
        {
          "name": "appsettings",
          "type": "config",
          "apiVersion": "2015-08-01",
          "dependsOn": [
            "[resourceId('Microsoft.Web/sites', variables('webSiteName'))]"
          ],
          "tags": {
            "displayName": "appsettings"
          },
          "properties": {
            "key1": "value1",
            "key2": "value2"
          }
        },
        {
          "apiVersion": "2015-08-01",
          "name": "logs",
          "type": "config",
          "dependsOn": [
            "[resourceId('Microsoft.Web/Sites', variables('webSiteName'))]"
          ],
          "properties": {
            "applicationLogs": {
              "fileSystem": {
                "level": "Off"
              },
              "azureTableStorage": {
                "level": "Off"
              },
              "azureBlobStorage": {
                "level": "[variables('Level')]",
                "sasUrl": "xxxxx"
              }
            },
            "httpLogs": {
              "fileSystem": {
                "enabled": false
              },
              "azureBlobStorage": {
                "enabled": true,
                "sasUrl": "xxxx"
              }
            },
            "failedRequestsTracing": {
              "enabled": "[parameters('enableFailedRequestTracing')]"
            },
            "detailedErrorMessages": {
              "enabled": "[parameters('enableDetailedErrorMessages')]"
            }
          }
        }
      ]
    }

  ]
 }
-4
votes

I have experienced similar issues. We fixed this using dependsOn rules. You should add dependsOn rules to split the processing of each config section. It seems like otherwise there can occur problems, for instance ...missing settings.

Arm snippet:

{
    "name": "[variables('ExampleAppName')]",
    "type": "Microsoft.Web/sites",
    "location": "[resourceGroup().location]",
    "apiVersion": "2015-08-01",
    "kind": "api",
    "dependsOn": ["[resourceId('Microsoft.Web/serverfarms', variables('applicationPlanName'))]"],
    "tags": {
        "displayName": "Example App"
    },
    "properties": {
        "name": "[variables('ExampleAppName')]",
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms/', variables('applicationPlanName'))]",
        "clientAffinityEnabled": "false"
    },
    "resources": [{
        "name": "web",
        "type": "config",
        "apiVersion": "2015-08-01",
        "dependsOn": ["[resourceId('Microsoft.Web/sites', variables('ExampleAppName'))]"],
        "tags": {
            "displayName": "webconfig Example App"
        },
        "properties": {
            "alwaysOn": "true"
        }
    },
    {
        "apiVersion": "2015-08-01",
        "name": "appsettings",
        "type": "config",
        "dependsOn": ["[resourceId('Microsoft.Web/sites', variables('ExampleAppName'))]",
        "[resourceId('Microsoft.Web/sites/config', variables('ExampleAppName'), 'web')]"],
        "tags": {
            "displayName": "appsettings Example App"
        },
        "properties": {
            "EXAMPLE1": "[parameters('EXAMPLE1')]",
            "EXAMPLE2": "[parameters('EXAMPLE2')]"
        }
    },
    {
        "name": "logs",
        "type": "config",
        "apiVersion": "2015-08-01",
        "dependsOn": ["[concat('Microsoft.Web/sites/', variables('ExampleAppName'))]",
        "[resourceId('Microsoft.Web/sites/config', variables('ExampleAppName'), 'appsettings')]"],
        "tags": {
            "displayName": "logs Example App"
        },
        "properties": {
            "applicationLogs": {
                "fileSystem": {
                    "level": "Warning"
                }
            },
            "httpLogs": {
                "fileSystem": {
                    "retentionInMb": "35",
                    "enabled": true
                }
            },
            "detailedErrorMessages": {
                "enabled": false
            }
        }
    }]
}

For additional information you can read my post: Click here!