Благодаря @ martin-esteban-zurita его ответ помог мне получить то, что мне нужно, и это был прекрасный и забавный эксперимент.
Важно понимать, что Azure Automation используется для многих целей, касающихся управления ресурсами в Azure (виртуальные машины, службы, DevOps), эта автоматизация может быть выполнена с помощью Powershell и / или Python.
В этом конкретном случае мне не нужно было изменять / поддерживать / оркестрировать какой-либо ресурс Azure, мне нужно было фактически запустить команду Bash / Powershell удаленно в одну из моих существующих виртуальных машин, где у меня запущено несколько команд Powershell / Bashпериодически в «Планировщике заданий».«Планировщик заданий» добавлял ненужные накладные расходы в мои конвейеры данных, потому что он не мог общаться с ADF.
Кроме того, Azure Automation непосредственно выполняет команды Powershell / Python в Azure Cloud Shell, что очень полезно для организации ресурсов, таких как включение / выключение виртуальных машин Azure, добавление / удаление разрешений из других служб Azure, запуск обслуживания или очисткипроцессы и т. д., но я все еще не мог запускать команды локально в существующей виртуальной машине.Именно здесь на фото появился Hybrid Runbook Worker .Гибридная рабочая группа
Это шаги для выполнения этого варианта использования.
1.Создайте учетную запись автоматизации Azure
2. Установите Windows Hybrid Worker в моей существующей виртуальной машине.В моем случае это было сложно, потому что мой прокси-сервер давал мне некоторые ошибки.В итоге я скачал пакет Nuget и вручную установил его.
.\New-OnPremiseHybridWorker.ps1 -AutomationAccountName <NameofAutomationAccount> -AAResourceGroupName <NameofResourceGroup>
-OMSResourceGroupName <NameofOResourceGroup> -HybridGroupName <NameofHRWGroup>
-SubscriptionId <AzureSubscriptionId> -WorkspaceName <NameOfLogAnalyticsWorkspace>
Имейте в виду, что в приведенном выше коде вам нужно будет найти свои собственные значения параметров, единственный параметр, который не имеетбудет найден и будет создан HybridGroupName
, это будет определять имя гибридной группы
3.Создайте PowerShell Runbook
[CmdletBinding()]
Param
([object]$WebhookData) #this parameter name needs to be called WebHookData otherwise the webhook does not work as expected.
$VerbosePreference = 'continue'
#region Verify if Runbook is started from Webhook.
# If runbook was called from Webhook, WebhookData will not be null.
if ($WebHookData){
# Collect properties of WebhookData
$WebhookName = $WebHookData.WebhookName
# $WebhookHeaders = $WebHookData.RequestHeader
$WebhookBody = $WebHookData.RequestBody
# Collect individual headers. Input converted from JSON.
$Input = (ConvertFrom-Json -InputObject $WebhookBody)
# Write-Verbose "WebhookBody: $Input"
#Write-Output -InputObject ('Runbook started from webhook {0} by {1}.' -f $WebhookName, $From)
}
else
{
Write-Error -Message 'Runbook was not started from Webhook' -ErrorAction stop
}
#endregion
# This is where I run the commands that were in task scheduler
$callBackUri = $Input.callBackUri
# This is extremely important for ADF
Invoke-WebRequest -Uri $callBackUri -Method POST
4.Создайте веб-крючок Runbook, указывающий на виртуальную машину гибридного рабочего
4.Создайте активность webhook в ADF, где вышеуказанный сценарий PowerShell Runbook будет вызываться с помощью метода POST
Важное примечание. Когда я создавал операцию webhook, она истекала через 10 минут(по умолчанию), поэтому я заметил в учетной записи Azure Automation, что фактически получаю входные данные (WEBHOOKDATA), которые содержат структуру JSON со следующими элементами:
- WebhookName
- RequestBody (Этот файл содержит все, что вы добавляете в Body, плюс элемент по умолчанию, называемый callBackUri)
Все, что мне нужно было сделать, это вызвать callBackUri
из Azure Automation.И именно поэтому в коде Runbook PowerShell я добавил Invoke-WebRequest -Uri $callBackUri -Method POST
.При этом ADF преуспевал / терпел неудачу вместо того, чтобы отключать время ожидания.
Есть много других деталей, с которыми я столкнулся при установке гибридного работника на моей виртуальной машине, но они более специфичны для вашей среды / компании.