Я хочу создать Runbook для учетной записи автоматизации с расписанием, уже подключенным к нему через руку
С моим шаблоном ARM я хочу создать учетную запись автоматизации с Runbook и расписанием, пока все хорошо. Но если я хочу подключить свой график к моей книге запусков через шаблон, я не могу найти рабочий способ сделать это.
Первая попытка (работает): создайте учетную запись автоматизации с помощью Runbook и расписания
"variables": {
"name": "StartAllVM",
"url": "https://gallery.technet.microsoft.com/scriptcenter/Start-Azure-V2-VMs-6352312e/file/147007/1/Start-AzureV2VMs.ps1",
"version": "1.0.0.0",
"type": "PowerShell",
"description": "This PowerShell script runbook connects to Azure and starts all VMs in an Azure subscription or cloud service"
},
"resources": [
{
"name": "AutomationDev",
"type": "Microsoft.Automation/automationAccounts",
"apiVersion": "2015-10-31",
"properties": {
"sku": {
"name": "Free"
}
},
"location": "[parameters('location')]",
"tags": {},
"resources": [
{
"name": "[variables('name')]",
"type": "runbooks",
"apiVersion": "2015-01-01-preview",
"location": "[resourceGroup().location]",
"dependsOn": [
"[concat('Microsoft.Automation/automationAccounts/', 'AutomationDev')]"
],
"properties": {
"runbookType": "PowerShell",
"logProgress": false,
"logVerbose": true,
"publishContentLink": {
"uri": "[variables('url')]",
"version": "[variables('version')]"
}
}
},
{
"comments": "",
"type": "schedules",
"name": "shedule1",
"apiVersion": "2015-10-31",
"location": "[resourceGroup().location]",
"dependsOn": [
"[concat('Microsoft.Automation/automationAccounts/', 'AutomationDev')]",
"[variables('name')]"
],
"properties": {
"description": "VM Patch Automation Schedule",
"startTime": "06:00PM",
"expiryTime": "",
"isEnabled": true,
"interval": 1,
"frequency": "Week",
"timeZone": "UTC",
"advancedSchedule": {
"weekDays": [
"Monday"
]
}
}
}
]
}
]
Вторая попытка здесь, я не получаю ошибки, но расписание не связано с Runbook - я добавил "runbook": "variables('name')",
в свойствах графика
третья попытка (здесь я получаю ошибки, от которых зависит моя конфигурация
я попытался добавить блок расписания внутри значения ресурса Runbook, как это
{
"name": "[variables('name')]",
"type": "runbooks",
"apiVersion": "2015-01-01-preview",
"location": "[resourceGroup().location]",
"dependsOn": [
"[concat('Microsoft.Automation/automationAccounts/', 'AutomationDev')]"
],
"properties": {
"runbookType": "PowerShell",
"logProgress": false,
"logVerbose": true,
"publishContentLink": {
"uri": "[variables('url')]",
"version": "[variables('version')]"
}
},
"resources": [
{
"comments": "",
"type": "schedules",
"name": "shedule1",
"apiVersion": "2015-10-31",
"location": "[resourceGroup().location]",
"dependsOn": [
"[concat('Microsoft.Automation/automationAccounts/', 'AutomationDev' , variables('name'))]",
],
"properties": {
"description": "VM Patch Automation Schedule",
"runbook": "variables('name')",
"startTime": "06:00PM",
"expiryTime": "",
"isEnabled": true,
"interval": 1,
"frequency": "Week",
"timeZone": "UTC",
"advancedSchedule": {
"weekDays": [
"Monday"
]
}
}
}
]
}
Я получил следующую ошибку:
New-AzureRmResourceGroupDeployment : 16:43:44 - Error: Code=InvalidTemplate; Message=Deployment template validation fai
led: 'The resource '/subscriptions/xxxxxxxx/resourceGroups/xxxx/providers/Microsoft.Automa
tion/automationAccounts/AutomationDev/runbooks/StartAllVM/schedules/shedule1' at line '54' and column '17' doesn't depe
nd on parent resource '/subscriptions/xxxxxxxx/resourceGroups/xxx/providers/Microsoft.Aut
omation/automationAccounts/AutomationDev/runbooks/StartAllVM'. Please add dependency explicitly using the 'dependsOn' s
yntax. Please see https://aka.ms/arm-template/#resources for usage details.'.
Я понятия не имею, какой вариант является правильным, я думаю, что моя третья попытка - правильный способ добавить расписание в runbook, но я не могу найти правильный способ использовать правильное, зависит от
[Редактировать]
Как и в упомянутых ответах, моя зависимость от структуры не была хорошей, после того, как я изменил это, я продолжаю получать следующую ошибку. И я некоторое время ищу решение, но не могу найти, какой ресурс, о котором они упоминают, отсутствует, я использовал следующее, зависит от:
"[resourceId('Microsoft.Automation/automationAccounts/runbooks', 'AutomationDev' , variables('name'))]"
И получил эту ошибку.
New-AzureRmResourceGroupDeployment : 9:03:47 - Resource Microsoft.Automation/automationAccounts/runbooks/schedules 'AutomationDev/StartAllVM/shedule1' failed with message '{
"error": {
"code": "BadRequest",
"message": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\"/>\
r\n<title>404 - File or directory not found.</title>\r\n<style type=\"text/css\">\r\n<!--\r\nbody{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}\r\nfieldset{padding:0 15px 10px 15px;} \r\nh1{font-size:2.4em;margin:0;color:
#FFF;}\r\nh2{font-size:1.7em;margin:0;color:#CC0000;} \r\nh3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} \r\n#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:\"trebuchet MS\", Verdana, sans-serif;color:#FFF;\r\nbackground-color:#555555;}\r\n#cont
ent{margin:0 0 0 2%;position:relative;}\r\n.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}\r\n-->\r\n</style>\r\n</head>\r\n<body>\r\n<div id=\"header\"><h1>Server Error</h1></div>\r\n<div id=\"content\">\r\n <div class=\"con
tent-container\"><fieldset>\r\n <h2>404 - File or directory not found.</h2>\r\n <h3>The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable.</h3>\r\n </fieldset></div>\r\n</div>\r\n</body>\r\n</html>\r\n"
}
4 ответа
Я знаю, что этот вопрос задавали некоторое время назад, но я просто решил, как сделать это для себя, и подумал, что опубликую в случае, если он может кому-то помочь:
Добавление блока расписания в шаблон создаст расписание, но не подключит его к модулю Runbook. Чтобы соединить их вместе, вы также должны создать график работы.
Чтобы исправить это, я предпринял следующие шаги:
1. Добавьте блок Runbook в качестве дочернего ресурса учетной записи автоматизации
2. Добавьте блок расписания в качестве дочернего ресурса учетной записи автоматизации (не как дочерний элемент книги запусков - это то, что вызвало последнюю ошибку)
3. Добавьте блок расписания заданий в качестве дочернего ресурса учетной записи автоматизации и передайте имя модуля Runbook и имя расписания:
{
"name": "string",
"type": "Microsoft.Automation/automationAccounts/jobSchedules",
"apiVersion": "2015-10-31",
"properties": {
"schedule": {
"name": "string"
},
"runbook": {
"name": "string"
}
}
}
Очевидно, вам может понадобиться немного больше возиться, чтобы ваша работа работала должным образом, но это общие шаги, которые я предпринял:)
-ПРИМЕЧАНИЕ- не забывайте добавлять зависимости, где это необходимо (например, расписание заданий будет зависеть от модуля Runbook и уже существующего расписания)
Рекомендации:
Ваша зависимость от должна быть:
"dependsOn": [
"[concat('Microsoft.Automation/automationAccounts/', 'AutomationDev/runbooks/' , variables('name'))]",
],
Кроме того, вы можете использовать resourceId()
функция, которая дает более читаемый результат:
"dependsOn": [
"[resourceId('Microsoft.Automation/automationAccounts/runbooks', 'AutomationDev' , variables('name'))]",
]
с помощью resourceId вы также можете легко создать resourceId для ресурсов в других подписках \ ресурсных группах.
resourceId([subscriptionId], [resourceGroupName], resourceType, resourceName1, [resourceName2]...)
С бицепсом это намного проще.
Создайте файл schedules.bicep со следующим содержимым:
param guidValue string = newGuid()
var aaName = 'your-automation-account-name'
var runbookName = 'your-runbook-name'
var scheduleName = 'the-desired-schedule-name'
var scheduleFullName = '${aaName}/${scheduleName}'
var scheduleAssignment = '${aaName}/${guidValue}'
resource schedule 'Microsoft.Automation/automationAccounts/schedules@2020-01-13-preview' = {
name: scheduleFullName
properties: {
frequency: 'Day'
interval: any(6)
startTime: '2021-10-10'
}
}
resource jobSchedule 'Microsoft.Automation/automationAccounts/jobSchedules@2020-01-13-preview' = {
name: scheduleAssignment
properties: {
runbook: {
name: runbookName
}
schedule: {
name: scheduleName
}
}
}
Затем с помощью Azure CLI просто запустите
az deployment group create -f schedules.bicep -g your-resourcegroup-name
.
Примечание. Я ссылался на существующую учетную запись автоматизации и Runbook, но вы также можете добавить эти ресурсы в шаблон. Также для создания классических шаблонов JSON ARM вы можете запустить
az bicep build -f schedules.bicep
.