我一直在尝试找到一种使用Azure Data Factory V2对我现有的Azure VM运行简单命令的方法。
到目前为止的选项:
用例如下:
我想使用ADF协调任务计划程序中本地运行的一些任务(Azure VM),因为其他所有内容都在ADF中,这些任务通常是可恢复SQL备份和/或清除某些任务的python应用程序文件夹。
即sqdb-restore -r myDatabase
其中sqldb-restore
是安装我的本地python库后在本地识别的命令。不幸的是,python应用程序需要在VM中本地运行。
有什么建议吗?谢谢。
答案 0 :(得分:2)
感谢@ martin-esteban-zurita,他的回答帮助我找到了所需的东西,这是一个美丽而有趣的实验。
重要的是要了解Azure Automation用于与Azure中的资源编排有关的许多事情(VM,服务,DevOps),这种自动化可以通过Powershell和/或Python来完成。
在这种特殊情况下,我不需要修改/维护/编排任何Azure资源,我实际上需要在我现有的其中一个VM中远程运行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
,这将定义Hybrid的名称。组
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。创建一个指向Hybrid Worker的VM的Runbook Webhook
4。在ADF中创建一个webhook activity,将通过POST方法调用上述PowerShell Runbook脚本
重要说明:创建webhook活动时,它在10分钟后超时(默认),因此我在Azure自动化帐户中注意到我实际上正在获取包含具有以下元素的JSON结构的INPUT数据(WEBHOOKDATA) :
我要做的就是从Azure自动化调用callBackUri
。这就是为什么我在PowerShell Runbook代码中添加了Invoke-WebRequest -Uri $callBackUri -Method POST
。因此,ADF成功/失败而不是超时。
在VM中安装混合工作程序时,我还有很多其他细节需要解决,但这些细节更特定于您的环境/公司。
答案 1 :(得分:1)
这看起来像使用混合工作程序的Azure自动化支持的用例。尝试在这里阅读:https://docs.microsoft.com/en-us/azure/automation/automation-hybrid-runbook-worker
您可以使用网络活动在ADFv2中调用带有网络钩子的Runbook。
希望这对您有帮助!