将 Azure Functions 部署到同一 ARM 模板中新创建的应用服务

Issue deploying AzureFunctions to newly created AppService in the same ARM template

我正在使用 ARM 模板来部署 azure 函数。我的步骤如下

1) 将 arm 模板推送到 blob 存储并获取 SAS uri 2) 将 azure 函数推送到 blob 存储并获取 SAS uri 3) 运行 powershell 命令 New-AzureRmResourceGroup 创建我的新资源组 4) 运行 powershell 命令 New-AzureRmResourceGroupDeployment 通过 ARM 模板部署我的应用程序。

在我的 Arm 模板中,我使用 MSDeploy 的嵌套模板通过 zip 文件发送我的 azure 函数。

第一次部署将创建我的所有资源,但不会部署我的 Azure 功能。

如果我使用相同的 arm 模板通过相同的过程部署到我新创建的资源和资源组,我的 azure 函数将被部署。我不确定这个过程发生了什么,因为这两个部署都被认为是成功的。

这是我的带有 MSDeploy 的 azure 函数 arm 模板

{
        "type": "Microsoft.Web/sites",
        "apiVersion": "2015-08-01",
        "name": "[variables('functionsName')]",
        "location": "[resourceGroup().location]",
        "kind": "functionapp",
        "dependsOn": [
            "[resourceId('Microsoft.Web/serverfarms',variables('hostPlanName'))]",
            "[resourceId('Microsoft.Storage/storageAccounts', variables('storageName'))]",
            "[resourceId('Microsoft.Insights/components', variables('appInsightsName'))]"
        ],
        "properties": {
            "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('hostPlanName'))]",
            "name": "[variables('functionsName')]"
        },
        "resources": [ 
            {
                "name": "MSDeploy",
                "type": "extensions",
                "location": "[resourceGroup().location]",
                "apiVersion": "2015-08-01",
                "dependsOn": [
                    "[concat('Microsoft.Web/sites/', variables('functionsName'))]"
                ],
                "properties": {
                    "packageUri": "[concat(parameters('_artifactsLocation'),  parameters('SampleFunctionAppPackageFolder'), '/', parameters('SampleFunctionAppPackageFileName'), parameters('_artifactsLocationSasToken'))]",
                }
            },
            {
                "apiVersion": "2016-03-01",
                "name": "appsettings",
                "type": "config",
                "dependsOn": [
                    "[resourceId('Microsoft.Web/sites', variables('functionsName'))]",
                    "[resourceId('Microsoft.Storage/storageAccounts', variables('storageName'))]",
                    "[concat('Microsoft.Web/sites/', variables('functionsName'), '/Extensions/MSDeploy')]"
                ],
                "properties": {
                   ****  App settings removed *****
                }
            }
        ]
    }

事实证明,将您的 appSettings 置于不同的 ARM 模板中会导致 azure 函数未在第一个 运行 上部署的问题。将 AppSettings 移动到 appFunction ARM 模板中,例如

"type": "Microsoft.Web/sites",
    "apiVersion": "2015-08-01",
    "name": "[variables('functionsName')]",
    "location": "[resourceGroup().location]",
    "kind": "functionapp",
    "identity": {
        "type": "SystemAssigned"
    },
    "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms',variables('hostPlanName'))]"
    ],
    "properties": {
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('hostPlanName'))]",
        "name": "[variables('functionsName')]",
        "siteConfig": {
            "appSettings": [
                {
                    "name": "key1",
                    "value": "value1"
                }
            ]
        }
    }           
}

我试图避免这里解释的死锁问题 https://blogs.msdn.microsoft.com/hosamshobak/2016/05/26/arm-template-msdeploy-race-condition-issue/

但是我们看到这个错误是这些步骤的结果。我在部署时没有 运行 解决这个死锁问题,但它仍然是可能的,因为我不知道死锁问题是否已通过 MSDeploy 解决。