如何对Azure Data Factory V2中现有的Azure VM运行远程命令(powershell/bash)?
我一直在试图找到一种方法,使用Azure Data Factory V2对我现有的一个Azure VM运行一个简单的命令 迄今为止的选择:如何对Azure Data Factory V2中现有的Azure VM运行远程命令(powershell/bash)?,azure,powershell,azure-data-factory-2,azure-automation,Azure,Powershell,Azure Data Factory 2,Azure Automation,我一直在试图找到一种方法,使用Azure Data Factory V2对我现有的一个Azure VM运行一个简单的命令 迄今为止的选择: 自定义活动/Azure批处理不允许我将现有VM添加到池中 Azure函数-我没有玩过这个,但我没有找到任何使用AZ函数的文档 Azure Cloud Shell-我尝试过使用浏览器UI,它可以工作,但是我找不到通过ADF V2实现这一点的方法 用例如下所示: 在任务调度器中有一些本地运行的任务(Azure VM),我想使用ADF来协调这些任务,因为其他任
- 自定义活动/Azure批处理不允许我将现有VM添加到池中
- Azure函数-我没有玩过这个,但我没有找到任何使用AZ函数的文档
- Azure Cloud Shell-我尝试过使用浏览器UI,它可以工作,但是我找不到通过ADF V2实现这一点的方法
sqdb还原-r myDatabase
其中sqldb restore
是安装本地python库后在本地识别的命令。不幸的是,python应用程序需要在VM中本地运行
有什么建议吗?谢谢。这看起来像是Azure Automation支持的一个使用混合工作程序的用例。试着在这里阅读: 您可以使用web活动在ADFv2中使用webhooks调用Runbook
希望这有帮助 多亏了@martin esteban zurita,他的回答帮助我得到了我需要的东西,这是一个美丽而有趣的实验 重要的是要理解,Azure中的资源编排(VMs、服务、DevOps)有很多方面都用到了这种自动化,这种自动化可以通过Powershell和/或Python实现 在这种特殊情况下,我不需要修改/维护/编排任何Azure资源,我需要实际在我的一个现有VM中远程运行Bash/Powershell命令,其中我有多个Powershell/Bash命令在“任务调度器”中重复运行。 “任务调度器”给我的数据管道增加了不必要的开销,因为它无法与ADF通信 此外,Azure Automation本机仅在Azure Cloud Shell中运行Powershell/Python命令,这对于协调资源(如打开/关闭Azure VM、添加/删除其他Azure服务的权限、运行维护或清除进程等)非常有用,但我仍然无法在现有VM中本地运行命令。这就是这张照片的来源。混合工人群体 这些是完成这个用例的步骤 1。创建Azure自动化帐户 2。我现有VM中的Windows混合工作程序。在我的情况下,这很棘手,因为我的代理给了我一些错误。我最终下载了Nuget软件包并手动安装了它。
.\New-OnPremiseHybridWorker.ps1 -AutomationAccountName <NameofAutomationAccount> -AAResourceGroupName <NameofResourceGroup>
-OMSResourceGroupName <NameofOResourceGroup> -HybridGroupName <NameofHRWGroup>
-SubscriptionId <AzureSubscriptionId> -WorkspaceName <NameOfLogAnalyticsWorkspace>
4。创建一个指向混合工作程序VM的Runbook Webhook
4。在ADF中创建一个,其中将通过POST方法调用上述PowerShell runbook脚本
重要提示:当我创建webhook活动时,它在10分钟后超时(默认值),因此我在Azure Automation帐户中注意到,我实际上正在获取包含JSON结构的输入数据(WEBHOOKDATA),其中包含以下元素:
- WebhookName
- RequestBody(这个包含您在Body中添加的任何内容,外加一个名为callBackUri的默认元素)
callBackUri
。这就是为什么我在PowerShell runbook代码中添加了Invoke WebRequest-Uri$callBackUri-Method POST
。这样,ADF成功/失败,而不是超时
在我的虚拟机中安装hybrid worker时,我遇到了许多其他细节问题,但这些细节更具体到您的环境/公司。谢谢Martin,我会尝试一下,我以前读过,但我不知道ADF V2中的Webhook,我会尝试并回复您。我只在PowerShell中使用过它,但是您应该能够创建一个runbook脚本,该脚本使用powershell调用python,为这个runbook创建一个webhook,并使用ADF调用它。不要害怕问你是否需要更多的帮助:)非常感谢,在了解了如何使用混合worker和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