将 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 解决。
我正在使用 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 解决。