azureazure-functionsazure-rm-template

ARM Template for FileShare on Storage Account


I've created a storage account with Azure Functions etc. The setup is fairly simple - and i've now exported it to an ARM template.

To test it, i've removed the resources from Azure, and tried to use the template to create things.

However, i have this section to create the required File shares:

{
    "type": "Microsoft.Storage/storageAccounts/fileServices/shares",
    "apiVersion": "2021-08-01",
    "name": "funcstoretest/default/scale-test1546",
    "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts/fileServices', 'funcstoretest', 'default')]",
        "[resourceId('Microsoft.Storage/storageAccounts', 'funcstoretest')]"
    ],
    "properties": {
        "accessTier": "TransactionOptimized",
        "shareQuota": 5120,
        "enabledProtocols": "SMB"
    }
},

Actually using this exported sample always results in the following error however:

There were errors in your deployment.

Error code: DeploymentFailed.

##[error]At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/DeployOperations for usage details.

##[error]Details:

##[error]InvalidHeaderValue: The value for one of the HTTP headers is not in the correct format.

Now, removing the section that defines the properties (i.e. accessTier, shareQuota, enabledProtocols) allows the deploy to continue, but results in an unusable share with Azure Functions complaining it can't find the runtime (and with no functions being deployed when i do a deploy).

Any ideas on how this is supposed to work?


Solution

  • Please try this. it works perfectly.

    Make sure passing required appsetting, as function app will try to connect to the storage account, if its not added, it will be facing Runtime unreachable error.

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "appName": {
          "type": "string",
          "defaultValue": "[concat('fnapp', uniqueString(resourceGroup().id))]",
          "metadata": {
            "description": "The name of the function app that you wish to create."
          }
        },
        "storageAccountType": {
          "type": "string",
          "defaultValue": "Standard_LRS",
          "metadata": {
            "description": "Storage Account type"
          }
        },
        "location": {
          "type": "string",
          "defaultValue": "[resourceGroup().location]",
          "metadata": {
            "description": "Location for all resources."
          }
        },
        "runtime": {
          "type": "string",
          "defaultValue": "node",
          "metadata": {
            "description": "The language worker runtime to load in the function app."
          }
        },
        "storageAccountName": {
          "type": "string"
          }
        
      },
      "variables": {
        "functionAppName": "[parameters('appName')]",
        "hostingPlanName": "[parameters('appName')]",
        "functionWorkerRuntime": "[parameters('runtime')]"
      },
      "resources": [
        {
          "type": "Microsoft.Storage/storageAccounts",
          "name": "[parameters('storageAccountName')]",
          "apiVersion": "2019-06-01",
          "location": "[parameters('location')]",
          "kind": "Storage",
          "sku": {
            "name": "[parameters('storageAccountType')]"
          }
        },
        {
          "type": "Microsoft.Web/serverfarms",
          "apiVersion": "2019-08-01",
          "name": "[variables('hostingPlanName')]",
          "location": "[parameters('location')]",
          "sku": {
            "name": "Y1",
            "tier": "Dynamic"
          },
          "properties": {
            "name": "[variables('hostingPlanName')]",
            "computeMode": "Dynamic"
          }
        },
        {
          "apiVersion": "2019-08-01",
          "type": "Microsoft.Web/sites",
          "name": "[variables('functionAppName')]",
          "location": "[parameters('location')]",
          "kind": "functionapp",
          "dependsOn": [
            "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
            "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
          ],
          "properties": {
            "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
            "siteConfig": {
              "appSettings": [
                {
                  "name": "AzureWebJobsStorage",
                  "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', parameters('storageAccountName'), ';EndpointSuffix=', environment().suffixes.storage, ';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2019-06-01').keys[0].value)]"
                },
                {
                  "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
                  "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', parameters('storageAccountName'), ';EndpointSuffix=', environment().suffixes.storage, ';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2019-06-01').keys[0].value)]"
                },
                {
                  "name": "WEBSITE_CONTENTSHARE",
                  "value": "[toLower(variables('functionAppName'))]"
                },
                {
                  "name": "FUNCTIONS_EXTENSION_VERSION",
                  "value": "~2"
                },
                {
                  "name": "WEBSITE_NODE_DEFAULT_VERSION",
                  "value": "~10"
                },
                {
                  "name": "FUNCTIONS_WORKER_RUNTIME",
                  "value": "[variables('functionWorkerRuntime')]"
                }
              ]
            }
          }
        }
       
      ]
    }
    

    Pass the following parameters to it:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "appName": {
          "metadata": {
            "description": "This Param will set the FA name & hostingPlanName"
    
          },
          "value": "yourappservicename_FunctionappName"
        },
        "storageAccountName": {
          "metadata": {
            "descrption": "Name of the storage account that will be conected & configured with teh function app"
          },
          "value": "Storage_Account_name"
        }
      }
    }