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