gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 23:19:25 31 4
gpt4 key购买 nike

我一直在尝试找到一种方法,使用 Azure 数据工厂 V2 对现有的 Azure VM 之一运行简单的命令。

到目前为止的选项:

  • 自定义事件/Azure Batch 不允许我将现有虚拟机添加到池中
  • Azure Functions - 我没有使用过这个,但我没有找到任何关于使用 AZ Functions 的文档。
  • Azure Cloud Shell - 我已尝试过 this使用浏览器 UI 并且它可以工作,但是我找不到通过 ADF V2 执行此操作的方法

用例如下:

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

sqdb-restore -r myDatabase

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

有什么建议吗?谢谢。

最佳答案

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

重要的是要了解 Azure Automation用于 Azure 中资源编排(VM、服务、DevOps)的许多事情,这种自动化可以使用 Powershell 和/或 Python 来完成。

在这种特殊情况下,我不需要修改/维护/编排任何Azure资源,我需要实际远程运行Bash/Powershell命令到我现有的VM之一,其中我有多个Powershell/Bash命令在“任务调度器”。“任务计划程序”给我的数据管道增加了不必要的开销,因为它无法与 ADF 通信。

此外,Azure 自动化本身仅在 Azure Cloud Shell 中运行 Powershell/Python 命令,这对于编排资源非常有用,例如打开/关闭 Azure VM、添加/删除其他 Azure 服务的权限、运行维护或清除进程等,但我仍然无法在现有虚拟机中本地运行命令。这就是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。创建指向混合工作线程虚拟机的 Runbook Webhook

enter image description here

enter image description here

<强>4。创建 webhook activity在 ADF 中,将通过 POST 方法调用上述 PowerShell Runbook 脚本

重要提示:当我创建 webhook 事件时,它会在 10 分钟后超时(默认),因此我在 Azure 自动化帐户中注意到,我实际上正在获取包含 JSON 结构和以下元素的 INPUT 数据 (WEBHOOKDATA) :

  • 网络钩子(Hook)名称
  • RequestBody(这包含您在正文中添加的任何内容以及名为 callBackUri 的默认元素)

我所要做的就是从 Azure 自动化调用 callBackUri。这就是为什么我在 PowerShell Runbook 代码中添加了 Invoke-WebRequest -Uri $callBackUri -Method POST。这样,ADF 就成功/失败了,而不是超时了。

在虚拟机中安装混合工作线程时,我还遇到了许多其他细节问题,但这些细节针对您的环境/公司而言更为具体。

关于azure - 如何针对 Azure 数据工厂 V2 中的现有 Azure VM 运行远程命令 (powershell/bash)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56027764/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com