2017-12-11 16 views
0

App Service Plan과 App Service가 포함 된 ARM 템플릿을 만들려고하지만 App Service Plan은 해당 참조 매개 변수가있는 경우에만 생성됩니다 기존 App Service Plan이 설정되지 않았습니다.Azure ARM은 입력 매개 변수를 기반으로 App Service Plan을 배포합니다.

그래서 ARM은 매개 변수로 제공되는 기존 App Service Plan을 사용하여 App Service를위한 App Service Plan을 생성해야합니다.

어떻게 가능합니까?

dependsOn: [ 
    "[variables('serviceplanName')]" 
] 

는 것이다이 방법 : 다음 해결

당신이 웹 애플리케이션에 dependsOn 속성을 추가해야합니다 귀하의 경우에는

{ 
    "$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" 
    } 
    } 
} 
+0

다음은 내가 시도한 예입니다. https://pastebin.com/PnH6ehf6 -하지만이 템플릿의 문제는 새로운 서비스 계획을 만들 때입니다. 앱 서비스가 앱 서비스를 기다리고 있습니다. 창조 될 계획이지만 - 의존성을 설정할 수는 없습니다. 어떤 제안? – pajzo

+0

두 템플릿을 사용하려면 ** templatelink **를 사용할 수 있다고 생각합니다. 하나는 App 서비스 계획을 작성하는 것이고, 다른 하나는 존재하는 서비스 계획을 사용하는 것입니다. 이 방법에서는 특정 이름의 견인 템플릿을 미리 준비해야합니다. 나는 당신이 이것을 이해할 수 있는지 확신 할 수 없다. 그러나이 방법이 효과적입니다. ** templatelink **를 사용하려면이 템플릿을 참조하십시오. https : //github.com/rjmax/ArmExamples/blob/master/NewOrExistingTemplate.json –

+0

안녕하세요, @ pajzo, 솔루션의 템플릿이 저에게 맞지 않았습니다. . 방금 배포가 실패했습니다. –

답변

3

작동 피날레 ARM 템플릿입니다 생성이 필요한 경우 완료 될 때까지 기다리십시오.

+0

그럴 생각은 없습니다. 기존 서비스 계획 Id를 매개 변수로 제공하면 실패합니다. 템플릿에 배포 된 리소스에 대해서만 작동합니다. – pajzo

+0

템플릿의 리소스, 내가 왜 일하지 않는지, dependsOn 당신이 리소스 속성에 전달 상관 없어. 실행 명령에만 관심이 있습니다. 보존 될 것입니다 – 4c74356b41

+0

예,하지만'serviceplanName' 자원은 항상 전개되지 않습니다. 그래서 나는 그것이 작동하지 않을 것이라고 확신하지만, 나는 – pajzo