Integration Runtime starten en stoppen vanuit ADF

Na het inrichten van Azure en DevOps, zijn er nog veel dingen die je moet inrichten. Denk o.a. aan (extra) maintenance scripts voor de databases (indexes rebuilden én statistics bijwerken), maar ook Azure Data Factory (ADF) moet je inrichten.

Het PowerShell-script dat ik gebruik binnen ADF voor het starten en stoppen van SSIS-IR (Integration Runtime), ziet er als volgt uit:



 

# Source: https://docs.microsoft.com/en-gb/azure/data-factory/how-to-schedule-azure-ssis-integration-runtime

Param
(
[Parameter (Mandatory= $true)]
[String] $ResourceGroupName,

[Parameter (Mandatory= $true)]
[String] $DataFactoryName,

[Parameter (Mandatory= $true)]
[String] $AzureSSISName,

[Parameter (Mandatory= $true)]
[String] $Operation
)

$connectionName = "AzureRunAsConnection"
try
{
# Get the connection "AzureRunAsConnection "
$servicePrincipalConnection=Get-AutomationConnection -Name $connectionName

"Logging in to Azure..."
Add-AzureRmAccount `
-ServicePrincipal `
-TenantId $servicePrincipalConnection.TenantId `
-ApplicationId $servicePrincipalConnection.ApplicationId `
-CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint
}
catch {
if (!$servicePrincipalConnection)
{
$ErrorMessage = "Connection $connectionName not found."
throw $ErrorMessage
} else{
Write-Error -Message $_.Exception
throw $_.Exception
}
}

if($Operation -eq "START" -or $operation -eq "start")
{
"##### Starting #####"
Start-AzureRmDataFactoryV2IntegrationRuntime -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name $AzureSSISName -Force
}
elseif($Operation -eq "STOP" -or $operation -eq "stop")
{
"##### Stopping #####"
Stop-AzureRmDataFactoryV2IntegrationRuntime -DataFactoryName $DataFactoryName -Name $AzureSSISName -ResourceGroupName $ResourceGroupName -Force
}
"##### Completed #####"


 


 

Sla dit op als ‘StartStopAzureSsisRuntime.ps1’ en importeer dit PowerShell-script als Runbook binnen je Azure Automation Account:



 


 


 


 


 

Maak vervolgens een Webhook aan voor het starten van SSIS-IR, vervang de juiste waardes (met je eigen Azure configuratie waardes) en gebruik ‘START’ voor ‘Operation’:

Runbook Webhook IntegrationRuntime

 


 


 


 


 


 


 


 

BELANGRIJK: De Webhook-URL’s worden maar één getoond tijdens het aanmaken van de Webhook, sla deze goed op.
Doe ditzelfde voor het stoppen van je IntegrationRuntime, gebruik ‘STOP’ i.p.v. ‘START’.

 

Je hebt als het goed is nu twee Webhooks:



 


 

Tijd om een ADF pipeline aan te maken voor het starten van SSIS-IR. Selecteer een ‘Webhook’-taak, plak je specifieke URL hier voor het ‘Starten’, selecteer ‘POST’ als method en vul als body het volgende in: ‘{“message”:”hello world”}’



 


 


 

Een Webhook triggert de uitvoer van een PowerShell-script, maar weet zelf niet of dat SSIS-IR inderdaad al klaar is met starten. We hebben hiervoor een aparte ‘wacht’-taak nodig en dit gaan we bereiken met het volgende T-SQL script dat we direct uitvoeren tegen de SSISDB. Hiervoor moet je wel vooraf een ‘Linked Service’ aanmaken binnen ADF -> Connections.

BEGIN TRANSACTION
WAITFOR DELAY '00:00:03'

-- Wait until Azure-SSIS IR is started
WHILE NOT EXISTS
(
SELECT *
FROM [catalog].[worker_agents]
WHERE IsEnabled = 1
AND LastOnlineTime > DATEADD(MINUTE, -10, SYSDATETIMEOFFSET())
)
BEGIN
WAITFOR DELAY '00:00:03';
END
COMMIT TRANSACTION


 

Gebruik dit T-SQL script als volgt:


 

Je bent nu klaar met de eerste ADF pipeline voor het starten (en wachten) van SSIS-IR, test deze nu door de pipeline handmatig te triggeren.

 

Next stop, het stoppen van SSIS-IR. Maak hiervoor een nieuwe pipeline aan en ook hier gebruiken we een Webhook met dit keer de URL voor het stoppen van SSIS-IR:



 

Test ook deze pipeline nu door deze handmatig te triggeren.

 

Kom je er niet helemaal uit of loop je vast? Of je vragen m.b.t. Azure of DevOps?
Neem dan contact met ons op: clint.huijbers@monkeyconsultancy.nl