感谢@martin-esteban-zurita,他的回答帮助我找到了我需要的东西,这是一个美丽而有趣的实验。
了解Azure Automation 用于许多与 Azure 中的资源编排(VM、服务、DevOps)有关的事情很重要,这种自动化可以通过 Powershell 和/或 Python 完成。
在这种特殊情况下,我不需要修改/维护/编排任何 Azure 资源,我需要将 Bash/Powershell 命令远程实际运行到我现有的一个虚拟机中,其中我有多个 Powershell/Bash 命令在“任务计划程序”。
“任务计划程序”给我的数据管道增加了不必要的开销,因为它无法与 ADF 通信。
此外,Azure 自动化仅在 Azure Cloud Shell 中本机运行 Powershell/Python 命令,这对于编排资源非常有用,例如打开/关闭 Azure VM、添加/删除其他 Azure 服务的权限、运行维护或清除进程等,但我仍然无法在现有 VM 中本地运行命令。这就是Hybrid Runbook Worker 出现的地方。混合工作组
这些是完成此用例的步骤。
1.创建 Azure 自动化帐户
2。 Install 我现有 VM 中的 Windows Hybrid Worker。就我而言,这很棘手,因为我的代理给了我一些错误。我最终下载了 Nuget 包并手动安装它。
.\New-OnPremiseHybridWorker.ps1 -AutomationAccountName <NameofAutomationAccount> -AAResourceGroupName <NameofResourceGroup>
-OMSResourceGroupName <NameofOResourceGroup> -HybridGroupName <NameofHRWGroup>
-SubscriptionId <AzureSubscriptionId> -WorkspaceName <NameOfLogAnalyticsWorkspace>
请记住,在上面的代码中,您需要找到自己的参数值,唯一不必找到并创建的参数是HybridGroupName,这将定义混合组的名称
3.创建 PowerShell 运行手册
[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.创建一个指向 Hybrid Worker 的 VM 的 Runbook Webhook
4.在 ADF 中创建一个webhook activity,其中将通过 POST 方法调用上述 PowerShell Runbook 脚本
重要提示:当我创建 webhook 活动时,它在 10 分钟后超时(默认),所以我注意到在 Azure 自动化帐户中,我实际上正在获取包含 JSON 结构的 INPUT 数据 (WEBHOOKDATA),其中包含以下元素:
- Webhook 名称
- RequestBody(这个包含你在 Body 中添加的任何内容以及一个名为 callBackUri 的默认元素)
我所要做的就是从 Azure 自动化调用 callBackUri。这就是我在 PowerShell Runbook 代码中添加Invoke-WebRequest -Uri $callBackUri -Method POST 的原因。这样,ADF 就会成功/失败,而不是超时。
在我的虚拟机中安装混合工作器时,我还遇到了许多其他细节问题,但这些细节更具体到您的环境/公司。