Azure Automation: parar/arrancar máquinas virtuales ARM en paralelo

Hace unos días compartí un script para Azure Automation que gestiona la parada y el arranque de máquinas virtuales. Mis últimas preocupaciones venían por este mismo proceso pero en paralelo, con el fin de no tener que esperar a que una máquina se parara o se iniciara para poder lanzar la orden a la siguiente. Ya te enseñé cómo hacerlo con aquellas máquinas creadas en el modelo clásico (ASM) y hoy me gustaría compartir contigo cómo hacer el mismo proceso con aquellas en el modelo ARM.

El script para este escenario sería el siguiente:

workflow Shutdown-Start-ARM-VMs-Parallel
{
		Param(
		[Parameter(Mandatory=$true)]
        [String]
		$ResourceGroupName,
		[Parameter(Mandatory=$true)]
        [Boolean]
		$Shutdown
	)
	
	#The name of the Automation Credential Asset this runbook will use to authenticate to Azure.
    $CredentialAssetName = "DefaultAzureCredential";
	
	#Get the credential with the above name from the Automation Asset store
    $Cred = Get-AutomationPSCredential -Name $CredentialAssetName;
    if(!$Cred) {
        Throw "Could not find an Automation Credential Asset named '${CredentialAssetName}'. Make sure you have created one in this Automation Account."
    }

    #Connect to your Azure Account
	Add-AzureRmAccount -Credential $Cred;
	
	$vms = Get-AzureRmVM -ResourceGroupName $ResourceGroupName;
	
	Foreach -Parallel ($vm in $vms){
		
		if($Shutdown){
			Write-Output "Stopping $($vm.Name)";		
			Stop-AzureRmVm -Name $vm.Name -ResourceGroupName $ResourceGroupName -Force;
		}
		else{
			Write-Output "Starting $($vm.Name)";		
			Start-AzureRmVm -Name $vm.Name -ResourceGroupName $ResourceGroupName;
		}
	}
}

Como ves, en este caso se lanza un foreach con la opción -Parallel donde se lanza la acción por cada una de las máquinas dentro del resource group, lanzando todas las peticiones a la vez.

Azure Automation - Test Pane - Shutdown-Start-ARM-VMs-Parallel
Azure Automation – Test Pane – Shutdown-Start-ARM-VMs-Parallel

También puedes importar este script desde la galería.

Azure Automation - Browse Gallery - Shutdown-Start-VMs-By-Resource-Group-Parallel
Azure Automation – Browse Gallery – Shutdown-Start-VMs-By-Resource-Group-Parallel

¡Saludos!