Ich versuche, eine ARM-Vorlage zu erstellen, die einen App Service Plan und einen App Service enthält, aber nur den App Service Plan erstellt, wenn ein optionaler Parameter mit Bezug auf Ein vorhandener App Service Plan ist nicht festgelegt.Azure ARM Bereitstellen von App Service Plan basierend auf Eingabeparametern
Daher sollte der ARM entweder einen App Service Plan für den App Service erstellen, den vorhandenen App Service Plan einfach verwenden, der als Parameter angegeben wird.
Wie ist das möglich?
SOLUTION
Hier ist die finale ARM-Vorlage, die
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"currentServiceplanId": {
"type": "string",
"defaultValue": "",
"metadata": {
"description": "Optional. Use an existing serviceplan for deployment"
}
},
"serviceplanSkuName": {
"type": "string",
"defaultValue": "B1",
"allowedValues": [
"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/"
}
}
},
"variables": {
"prefix": "setup05",
"serviceplanName": "[concat(variables('prefix'), 'serviceplan')]",
"serviceplanId": "[variables('serviceplanIdSelector')[string(equals(length(parameters('currentServiceplanId')), 0))]]",
"serviceplanIdSelector": {
"true": "[resourceId('Microsoft.Web/serverfarms', variables('serviceplanName'))]",
"false": "[parameters('currentServiceplanId')]"
},
"api-appName": "[concat(variables('prefix'), 'api-app')]"
},
"resources": [
{
"name": "[variables('serviceplanName')]",
"condition": "[equals(length(parameters('currentServiceplanId')), 0)]",
"type": "Microsoft.Web/serverfarms",
"location": "[resourceGroup().location]",
"apiVersion": "2015-08-01",
"sku": {
"name": "[parameters('serviceplanSkuName')]"
},
"properties": {
"name": "[variables('serviceplanName')]",
"numberOfWorkers": 1
}
},
{
"name": "[variables('api-appName')]",
"type": "Microsoft.Web/sites",
"location": "[resourceGroup().location]",
"apiVersion": "2015-08-01",
"dependsOn": [
"[resourceId('Microsoft.Web/serverfarms', variables('serviceplanName'))]"
],
"properties": {
"name": "[variables('api-appName')]",
"serverFarmId": "[variables('serviceplanId')]"
}
}
],
"outputs": {
"ApiDefaultHostname": {
"value": "[reference(variables('api-appName')).defaultHostName]",
"type": "string"
},
"ApiAppName": {
"value": "[variables('api-appName')]",
"type": "string"
}
}
}
Hier ist ein Beispiel für das, was ich versucht habe: https://pastebin.com/PnH6ehf6 - aber das Problem in dieser Vorlage ist, wenn ich möchte, dass ein neuer Service-Plan erstellt wird - der App-Service wartet auf den App-Service Plan erstellt werden - aber ich bin nicht in der Lage, eine Dependon zu setzen. irgendwelche Vorschläge? – pajzo
Ich denke, dass Sie ** templatelink ** verwenden können, um zwei Vorlagen zu verwenden. Eine für die Erstellung von App-Service-Plan, die andere für die Verwendung vorhandener Service-Plan. Bei dieser Methode sollten Sie bereits Tow-Vorlagen mit einem bestimmten Namen vorbereiten. Ich bin mir nicht sicher, ob Sie das verstehen können. Aber diese Methode sollte funktionieren. Sie können auf diese Vorlage verweisen, um ** templatelink ** zu verwenden: https: //github.com/rjmax/ArmExamples/blob/master/NewOrExistingTemplate.json –
Hallo, @ pajzo, die Vorlagen in Ihrer Lösung funktionierten nicht für mich . Ich habe gerade die Bereitstellung fehlgeschlagen. –