如何针对 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 之一执行简单命令。
目前的选项:
- 自定义 Activity/Azure 批处理不允许我将现有 VM 添加到池中
- Azure Functions - 我没有玩过这个,但我没有找到任何关于使用 AZ Functions 的文档。
- Azure Cloud Shell - 我已经尝试 this 使用浏览器 UI 并且它有效,但是我找不到通过 ADF V2 [=33= 执行此操作的方法]
用例如下:
有一些任务是 运行 在任务计划程序中本地(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。
我一直在尝试找到一种方法 运行 使用 Azure Data Factory V2 针对我现有的 Azure VM 之一执行简单命令。
目前的选项:
- 自定义 Activity/Azure 批处理不允许我将现有 VM 添加到池中
- Azure Functions - 我没有玩过这个,但我没有找到任何关于使用 AZ Functions 的文档。
- Azure Cloud Shell - 我已经尝试 this 使用浏览器 UI 并且它有效,但是我找不到通过 ADF V2 [=33= 执行此操作的方法]
用例如下:
有一些任务是 运行 在任务计划程序中本地(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。