Предоставление классического облачного сервиса с помощью шаблона ARM
В одном из наших проектов мы пытаемся автоматизировать развертывание облачных компонентов в Azure. Для большинства компонентов (в основном все компоненты ARM, такие как Redis, служебная шина, служба приложений и т. д.) мы смогли добиться этого, используя шаблоны ARM и сценарий Powershell.
Однако мы застряли на компонентеCloud Service (classic) . Компонент облачной службы содержит только WebRole и не требует подготовки виртуальной машины.Мы можем перейти к классической модели развертывания то есть использование команд ASM в power shell. Но поскольку модель ARM поддерживает инициализацию и развертывание с портала azure, мне было интересно, что API ARM REST также должен иметь стандартную поддержку для этого компонента. Я пытаюсь выяснить, но не могу найти никакой связанной с этим документации.
То, что я пробовал до сих пор
Шаблон Azure (AzureDeploy.json)
{
"$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
"parameters": {
"name": {
"type": "string"
},
"location": {
"type": "string"
}
},
"resources": [
{
"apiVersion": "2014-06-01",
"name": "[parameters('name')]",
"location": "[parameters('location')]",
"type": "Microsoft.ClassicCompute/domainNames"
}
]
}
Сценарий Powershell:
Param(
[string] $ResourceGroupLocation = 'South India',
[string] $ResourceGroupName = 'FreeTrial',
[string] $TemplateFile = 'AzureDeploy.json'
)
$TemplateFile = [System.IO.Path]::GetFullPath([System.IO.Path]::Combine($PSScriptRoot, $TemplateFile))
New-AzureRmResourceGroup -Name $ResourceGroupName -Location $ResourceGroupLocation -Verbose -Force -ErrorAction Stop
New-AzureRmResourceGroupDeployment -Name ((Get-ChildItem $TemplateFile).BaseName + '-' + ((Get-Date).ToUniversalTime()).ToString('MMdd-HHmm')) `
-ResourceGroupName $ResourceGroupName `
-TemplateFile $TemplateFile `
-Force -Verbose
Если я попытаюсь выполнить приведенный выше сценарий, выполнение застрянет при проверке развертывание на час или около того и приходится вручную убивать выполнение скрипта. .
Однако, если я запустил следующую команду в power shell, она успешно создает ресурс в portal:
New-AzureRmResource-Местоположение "Южная Индия" - Имя Ресурса "cloudsmplservice" - ResourceType "Microsoft.ClassicCompute/domainNames "- ResourceGroupName "FreeTrial"
Но я не понимаю, в чем проблема с шаблонным подходом ARM. Может кто-нибудь пожалуйста, направьте меня к проблеме в первом подходе?
Добавление:
Я обнаружил странное поведение. Если я жестко закодирую значение имени ресурса в определении ресурса или передам его при запросе powershell, развертывание будет работать нормально.
Однако, если я установлю некоторое значение по умолчанию для параметра или передам его через файл параметров, он не работает.
{
"$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"cloudName": {
"type": "string",
"defaultValue": "cloudsrvc"
}
},
"resources": [
{
"apiVersion": "2015-06-01",
"name": "[parameters('cloudName')]",
"location": "[resourceGroup().location]",
"type": "Microsoft.ClassicCompute/domainNames"
}
]
}
Addendum2:
Похоже на какую-то проблему с конфигурацией powershell. Сообщу об этом в Azure команда с более подробной информацией. Итак, фар смог воспроизвести его с помощью простых шагов:
- создал новую виртуальную машину в azure.
- импортированные модули AzureRM.
- попробуйте предоставить облачный сервис с шаблоном значений по умолчанию. (Застрял, как уже упоминалось)
- попробуйте выполнить подготовку сейчас, передав параметр из powershell. (Работал отлично)
- теперь повторите попытку с шаблоном значения по умолчанию. (Работал отлично)
2 ответа:
Я рекомендую вам проверить ваш шаблон ARM облачной службы изразвертывания шаблона на портале Azure.
Я могу развернуть облачный сервис с использованием шаблона ниже, и развертывание успешно выполняется в течение нескольких секунд.
Вы также можете "перепроектировать" шаблон ARM облачной службы, нажав на опцию автоматизация при попытке создать новую облачную службу с портала Azure.
Я не видел проблемы в автоматизации облака Обслуживание шаблонным подходом ARM.
Примечание:
Я развернул это в Южной Индии, и это работает.
Добавление:
Я развернул шаблон, как показано ниже, с помощью вашего сценария PowerShell, и он также работает.
Версия Azure PowerShell - 4.3.1 (август 2017 г.) .
{ "$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "name": { "type": "string" }, "location": { "type": "string" } }, "resources": [ { "apiVersion": "2016-11-01", "name": "[parameters('name')]", "location": "[parameters('location')]", "type": "Microsoft.ClassicCompute/domainNames" } ] }
Добавление 2:
Попробуйте использовать шаблон со значениями param по умолчанию и развертывание также работает успешно.
Примечание: я заметил, что ваша версия api старше, а версия api для моей облачной службы 2016-11-01
{ "$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "name": { "type": "string", "defaultValue": "[resourceGroup().name]" }, "location": { "type": "string", "defaultValue": "[resourceGroup().location]" } }, "resources": [ { "apiVersion": "2016-11-01", "name": "[parameters('name')]", "location": "[parameters('location')]", "type": "Microsoft.ClassicCompute/domainNames" } ] }
Мы также можем использовать REST API для этого, я тестирую его с помощью fiddler.
https://management.azure.com/subscriptions/{subscriptionid}/resourceGroups/{resourcegroupname}/providers/Microsoft.ClassicCompute/domainNames/{cloudservicename}?api-version=2016-04-01
Примечание : пожалуйста, убедитесь, что ваша подписка поддерживает создание cloudservice в этом месте. Если он не поддерживается, мы получим следующую ошибку.
Ограничение местоположения недопустимо