How to setup simple Workflow with Azure Automation
You should read below article before following this article, because this article make a Azure Automation workflow collaborating Runbooks.
normalian.hatenablog.com
Azure Automation offers to collaborate with each Runbooks as Workflok, and you can setup your simple workflow with following this article!
Create your new Runbook as "PowerShell"
Create your new "PowrShell" Runbook under your Azure Automation account and edit it like below. This Runbook output your Azure resources in a location specified by a parameter.
Param
(
[Parameter (Mandatory = $true)]
[String] $Location = 'Japan East'
)
# Setup Authentication
$Conn = Get-AutomationConnection -Name AzureRunAsConnection
Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint
Get-AzureRmResourceGroup -Location $Location | ForEach-Object { Write-Output $_.ResourceGroupName }You can specify parameters with "Param" keyword like above. "PowerShell Workflow" created in next section can call "PowerShell" Runbook, so you have to create your Runbooks as "PowerShell".
Create new Runbook as "PowerShell Workflow"
You can find how to pass your parameters and how to get output with your "PowerShell" Runbook.
workflow workflow-sample
{
Param
(
[Parameter (Mandatory = $true)]
[String] $Location01 = "West US",
[Parameter (Mandatory = $true)]
[String] $Location02 = "West Central US"
)
# settings
$automationAccountName = "mytest-automation"
$resourceGroupName = "mytest-automation-rg"
# Setup Authentication
$Conn = Get-AutomationConnection -Name AzureRunAsConnection
Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint
## backup Runbook
echo '#1 runbook starts'
$params = @{ 'Location'=$Location01 }
$runbookName = 'execute-azure-cmdlet'
$job = Start-AzureRmAutomationRunbook -AutomationAccountName $automationAccountName -Name $runbookName -ResourceGroupName $resourceGroupName -Parameters $params
$doLoop = $true
While ($doLoop) {
$job = Get-AzureRmAutomationJob –AutomationAccountName $automationAccountName -Id $job.JobId -ResourceGroupName $resourceGroupName
$status = $job.Status
if($status -eq "Failed") {
Write-Error "Error in $runbookName"
Write-Error $job.Exception
throw $job.Exception
}
$doLoop = (($status -ne "Completed") -and ($status -ne "Suspended") -and ($status -ne "Stopped"))
Start-Sleep -Seconds 2
}
echo '################# output start #################'
$record = Get-AzureRmAutomationJobOutput –AutomationAccountName $automationAccountName -Id $job.JobId -ResourceGroupName $resourceGroupName –Stream Any | Get-AzureRmAutomationJobOutputRecord
$record # for example
echo ' #################'
$record | Where-Object { $_.Value.value -NE $null} | ForEach-Object { Write-Output $_.Value.value }
echo '################# output end #################'
echo '#1 runbook is ended'
##
echo '#2 runbook is starts'
$params = @{ 'Location'=$Location02 }
$runbookName = 'execute-azure-cmdlet'
$job = Start-AzureRmAutomationRunbook -AutomationAccountName $automationAccountName -Name $runbookName -ResourceGroupName $resourceGroupName -Parameters $params
$doLoop = $true
While ($doLoop) {
$job = Get-AzureRmAutomationJob –AutomationAccountName $automationAccountName -Id $job.JobId -ResourceGroupName $resourceGroupName
$status = $job.Status
if($status -eq "Failed") {
Write-Error "Error in $runbookName"
Write-Error $job.Exception
throw $job.Exception
}
$doLoop = (($status -ne "Completed") -and ($status -ne "Suspended") -and ($status -ne "Stopped"))
Start-Sleep -Seconds 2
}
echo '################# output start #################'
$record = Get-AzureRmAutomationJobOutput –AutomationAccountName $automationAccountName -Id $job.JobId -ResourceGroupName $resourceGroupName –Stream Any | Get-AzureRmAutomationJobOutputRecord
$record | Where-Object { $_.Value.value -NE $null} | ForEach-Object { Write-Output $_.Value.value }
echo '################# output end #################'
echo '#2 runbook is ended'
}
Output logs with Workflow
You can execute your Workflow and find output logs like below.
PSComputerName : localhost
PSSourceJobInstanceId : 256fbcbd-f339-4ce5-b75b-0dc973dd0f2a
Environments : {AzureCloud, AzureChinaCloud, AzureUSGovernment}
Context : Microsoft.Azure.Commands.Profile.Models.PSAzureContext
#1 runbook starts
################# output start #################
PSComputerName : localhost
PSSourceJobInstanceId : 256fbcbd-f339-4ce5-b75b-0dc973dd0f2a
Value : {Environments, Context}
ResourceGroupName : mytest-automation-rg
AutomationAccountName : mytest-automation
JobId : eb19892d-8e2d-4572-862f-9205ca6e89fc
StreamRecordId : eb19892d-8e2d-4572-862f-9205ca6e89fc:00636563050813081260:00000000000000000001
Time : 03/10/2018 18:58:01 +00:00
Summary :
Type : Output
PSComputerName : localhost
PSSourceJobInstanceId : 256fbcbd-f339-4ce5-b75b-0dc973dd0f2a
Value : {value}
ResourceGroupName : mytest-automation-rg
AutomationAccountName : mytest-automation
JobId : eb19892d-8e2d-4572-862f-9205ca6e89fc
StreamRecordId : eb19892d-8e2d-4572-862f-9205ca6e89fc:00636563050827143533:00000000000000000002
Time : 03/10/2018 18:58:02 +00:00
Summary : normalian-datacatalog-rg
Type : Output
PSComputerName : localhost
PSSourceJobInstanceId : 256fbcbd-f339-4ce5-b75b-0dc973dd0f2a
Value : {value}
ResourceGroupName : mytest-automation-rg
AutomationAccountName : mytest-automation
JobId : eb19892d-8e2d-4572-862f-9205ca6e89fc
StreamRecordId : eb19892d-8e2d-4572-862f-9205ca6e89fc:00636563050827612512:00000000000000000003
Time : 03/10/2018 18:58:02 +00:00
Summary : sqldb-rg
Type : Output
#################
normalian-datacatalog-rg
sqldb-rg
################# output end #################
#1 runbook is ended
#2 runbook is starts
################# output start #################
demo-automation-rg
mytest-automation-rg
################# output end #################
#2 runbook is ended