如何针对 Azure 数据工厂 V2 中的现有 Azure VM 运行 远程命令 (powershell/bash)?

How to run a remote command (powershell/bash) against an existing Azure VM in Azure Data Factory V2?

我一直在尝试找到一种方法 运行 使用 Azure Data Factory V2 针对我现有的 Azure VM 之一执行简单命令。

目前的选项:

用例如下:

有一些任务是 运行 在任务计划程序中本地(Azure VM),我想使用 ADF 进行编排,因为其他所有任务都在 ADF 中,这些任务通常是 python 恢复 SQL 备份和/或清除某些文件夹的应用程序。

sqdb-restore -r myDatabase

其中sqldb-restore是我安装本地python库后本地识别的命令。不幸的是,python 应用程序需要在 VM 本地运行。

有什么建议吗?谢谢。

这看起来像是 Azure 自动化支持的用例,使用混合辅助角色。尝试阅读此处:https://docs.microsoft.com/en-us/azure/automation/automation-hybrid-runbook-worker

您可以使用网络在 ADFv2 中使用 Webhook 调用 Runbook activity。

希望对您有所帮助!

感谢@martin-esteban-zurita,他的回答帮助我得到了我需要的东西,这是一个美丽而有趣的实验。

重要的是要了解 Azure Automation 用于与 Azure 中的资源编排有关的许多事情(VM、服务、DevOps),这种自动化可以使用 Powershell and/or Python.

在这种特殊情况下,我不需要 modify/maintain/orchestrate 任何 Azure 资源,我实际上需要 运行 一个 Bash/Powershell 命令远程进入我现有的多个虚拟机之一Powershell/Bash 命令 运行ning 在 "Task Scheduler" 中循环执行。 "Task Scheduler" 为我的数据管道增加了不必要的开销,因为它无法与 ADF 通信。

此外,Azure Automation 在 Azure Cloud Shell 中原生仅 运行s Powershell/Python 命令,这对于编排资源非常有用,例如转向 on/off Azure VM,adding/removing 来自其他 Azure 服务的权限,运行宁维护或清除过程等,但我仍然无法在现有 VM 中本地 运行 命令。这就是 Hybrid Runbook Worker 出现的地方。混合工作者组

这些是完成此用例的步骤。

1.创建 Azure 自动化帐户

2。 Install 我现有 VM 中的 Windows 混合辅助角色。就我而言,这很棘手,因为我的代理给了我一些错误。我最终下载了 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.创建指向混合辅助角色 VM 的 Runbook Webhook

4.在 ADF 中创建一个 webhook activity,上面的 PowerShell 运行book 脚本将通过 POST 方法

调用

重要说明:当我创建 webhook activity 时,它会在 10 分钟(默认)后超时,所以我在 Azure 自动化帐户中注意到我实际上正在获取包含一个JSON 具有以下元素的结构:

  • Webhook 名称
  • RequestBody(这个包含您在 Body 中添加的任何内容以及一个名为 callBackUri 的默认元素)

我所要做的就是从 Azure Automation 调用 callBackUri。这就是为什么我在 PowerShell 运行 书中添加了 Invoke-WebRequest -Uri $callBackUri -Method POST 的原因。有了这个,ADF succeeding/failing 而不是超时。

在我的 VM 中安装 Hybrid Worker 时,我还遇到了许多其他细节问题,但这些细节更具体到您的 environment/company。