Как запустить удаленную команду (powershell / bash) для существующей виртуальной машины Azure в Azure Data Factory V2? - PullRequest
2 голосов
/ 07 мая 2019

Я пытался найти способ выполнить простую команду для одной из моих существующих виртуальных машин Azure, используя Azure Data Factory V2.

Параметры на данный момент:

  • ПользовательскийПакет Activity / Azure не позволяет мне добавлять существующие виртуальные машины в пул
  • Функции Azure - я не играл с этим, но я не нашел никакой документации по этому вопросу с использованием функций AZ.
  • AzureCloud Shell - я пробовал этот с помощью пользовательского интерфейса браузера, и он работает, однако я не могу найти способ сделать это через ADF V2

Вариант использования следующий:

Есть несколько задач, которые выполняются локально (виртуальная машина Azure) в планировщике задач, и я хотел бы организовать их с помощью ADF, поскольку все остальное находится в ADF. Обычно это задачи Python, которые восстанавливают резервную копию SQL иили удалите некоторые папки.

т.е. sqdb-restore -r myDatabase

, где sqldb-restore - это команда, которая распознается локально после установки моей локальной библиотеки python.К сожалению, приложение на python должно жить локально в ВМ.

Есть предложения?Спасибо.

Ответы [ 2 ]

2 голосов
/ 08 мая 2019

Благодаря @ martin-esteban-zurita его ответ помог мне получить то, что мне нужно, и это был прекрасный и забавный эксперимент.

Важно понимать, что Azure Automation используется для многих целей, касающихся управления ресурсами в Azure (виртуальные машины, службы, DevOps), эта автоматизация может быть выполнена с помощью Powershell и / или Python.

В этом конкретном случае мне не нужно было изменять / поддерживать / оркестрировать какой-либо ресурс Azure, мне нужно было фактически запустить команду Bash / Powershell удаленно в одну из моих существующих виртуальных машин, где у меня запущено несколько команд Powershell / Bashпериодически в «Планировщике заданий».«Планировщик заданий» добавлял ненужные накладные расходы в мои конвейеры данных, потому что он не мог общаться с ADF.

Кроме того, Azure Automation непосредственно выполняет команды Powershell / Python в Azure Cloud Shell, что очень полезно для организации ресурсов, таких как включение / выключение виртуальных машин Azure, добавление / удаление разрешений из других служб Azure, запуск обслуживания или очисткипроцессы и т. д., но я все еще не мог запускать команды локально в существующей виртуальной машине.Именно здесь на фото появился Hybrid Runbook Worker .Гибридная рабочая группа

Это шаги для выполнения этого варианта использования.

1.Создайте учетную запись автоматизации Azure

2. Установите Windows Hybrid Worker в моей существующей виртуальной машине.В моем случае это было сложно, потому что мой прокси-сервер давал мне некоторые ошибки.В итоге я скачал пакет 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, указывающий на виртуальную машину гибридного рабочего

enter image description here

enter image description here

4.Создайте активность webhook в ADF, где вышеуказанный сценарий PowerShell Runbook будет вызываться с помощью метода POST

Важное примечание. Когда я создавал операцию webhook, она истекала через 10 минут(по умолчанию), поэтому я заметил в учетной записи Azure Automation, что фактически получаю входные данные (WEBHOOKDATA), которые содержат структуру JSON со следующими элементами:

  • WebhookName
  • RequestBody (Этот файл содержит все, что вы добавляете в Body, плюс элемент по умолчанию, называемый callBackUri)

Все, что мне нужно было сделать, это вызвать callBackUri из Azure Automation.И именно поэтому в коде Runbook PowerShell я добавил Invoke-WebRequest -Uri $callBackUri -Method POST.При этом ADF преуспевал / терпел неудачу вместо того, чтобы отключать время ожидания.

Есть много других деталей, с которыми я столкнулся при установке гибридного работника на моей виртуальной машине, но они более специфичны для вашей среды / компании.

1 голос
/ 07 мая 2019

Это похоже на сценарий использования, который поддерживается в Azure Automation с использованием гибридного работника. Попробуйте прочитать здесь: https://docs.microsoft.com/en-us/azure/automation/automation-hybrid-runbook-worker

Вы можете вызывать модули Runbook с помощью webhooks в ADFv2, используя веб-активность.

Надеюсь, это помогло!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...