Cuando trabajamos con Azure Resource Manager una de la primeras intenciones es automatizar el proceso de creación de un entorno. La forma de lanzar este proceso puede ser variada, por eso quiero mostrarte en este post cómo podrías utilizar Azure Automation como mecanismo de automatización en este escenario.
Lo primero que debes hacer es crear una cuenta de Azure Automation. Desde el portal actual puedes hacerlo desde la sección Automation, pulsando sobre el enlace Create an automation account.

Una vez creada, es necesario añadir el módulo AzureResourceManager, el cual no está presente a día de hoy y es necesario para poder trabajar con los Azure Resource Manager. Este módulo se consigue teniendo instalado Microsoft Azure PowerShell en nuestra máquina local. Accede a la ruta C:\Program Files (x86)\Microsoft SDKs\Azure\PowerShell\ResourceManager para localizar la carpeta que contiene dicho módulo y genera un zip con la misma para subirla a través del portal.

Accede a tu cuenta de Azure Automation, haz clic sobre el apartado ASSETS y selecciona la opción Import Module en el menú inferior.

El proceso tardará unos minutos, pero a partir de ese momento estará disponible para todos los runbooks creados en esta cuenta.

Para finalizar la configuración de la nueva cuenta, es necesario crear un usuario de Azure Active Directory y agregarlo como co-administrador de tu suscripción, de la misma forma que expliqué en este artículo. Una vez que lo tengas debes añadirlo a través de ADD SETTING > ADD CREDENTIAL. El tipo de credencial es Windows PowerShell Credential donde te pedirá un nombre para la credencial y una descripción. En mi caso utilizo el mismo nombre que el usuario para tener claro a quién corresponde dicha credencial.

Por último deberás indicar el nombre de usuario y la contraseña del mismo para guardar la credencial como asset de Azure Automation.

Ahora que ya tienes la cuenta sólo te falta crear un runbook con tu workflow para crear el entorno. Para ello, desde el menú inferior, puedes añadirlo haciendo clic en NEW > APP SERVICES > AUTOMATION > RUNBOOK > QUICK CREATE.

El script que acompaña a los proyectos de ARM no funciona directamente. Gracias a mi compañero Joao Soares, hemos construido un workflow que he estado utilizando para llevar a cabo esta tarea:
workflow buildenv { #1. Subscription Name and Credential $SubscriptionName = "Windows Azure MSDN - Visual Studio Ultimate" $Cred = Get-AutomationPSCredential -Name "gisautomation@giselatboutlook.onmicrosoft.com" #2. Add Azure Account Add-AzureAccount -Credential $Cred #3. Select Subscription Account Select-AzureSubscription -SubscriptionName $SubscriptionName #4. Resource Name, Location and ARM files $ResourceGroupName = "MyNewEnvironment" $ResourceGroupLocation = "West Europe" #4.1 ARM files and Azure Storage account $TemplateFile = "WebSite.json" $TemplateParametersFile = "WebSite.param.dev.json" $Container = "templates" $StorageAccount = "resourcemanagerstore" #5. Download the Json File and convert it to an Hashtable $HashTable = @{} $HashTable = InlineScript { $StorageKey = (Get-AzureStorageKey -StorageAccountName $using:StorageAccount).Primary $StorageContext = New-AzureStorageContext $using:StorageAccount $using:StorageKey $TemplateFile = New-AzureStorageBlobSASToken -Blob $using:TemplateFile -Container $using:Container -Context $using:StorageContext -FullUri -Permission r $TemplateParametersFile = New-AzureStorageBlobSASToken -Blob $using:TemplateParametersFile -Container $using:Container -Context $using:StorageContext -FullUri -Permission r $JSONFile =Invoke-RestMethod -Method Get -Uri $TemplateParametersFile $HashTable = @{} $JSONFile.parameters | get-member -MemberType NoteProperty | Where-Object{ -not [string]::IsNullOrEmpty($JSONFile.parameters."$($_.name)")} | ForEach-Object {$HashTable.add($_.name,$JSONFile.parameters."$($_.name)".value)} $HashTable #6. Call New-AzureResourceGroup and pass the hashtable as TemplateParameterObject New-AzureResourceGroup -Name $using:ResourceGroupName -Location $using:ResourceGroupLocation -TemplateParameterObject $HashTable -TemplateFile $TemplateFile -Verbose -Force } Write-Output "Done" }
Una vez publicado y lanzado el runbook tu entorno estará listo para ser utilizado:
Recuerda que los runbooks pueden ser programados a través de la pestaña SCHEDULE.
¡Saludos!