[Solucionado] Error publicando plantillas ARM desde VS2019

El lanzamiento de Visual Studio 2019 nos ha traído muchas sorpresas muy gratas, pero también hay algunas otras que aún se deben ir mejorando y es que seguramente te esté pasando o te ha ocurrido en alguna ocasión que cuando vas a implementar una plantilla de recursos de Azure desde Visual Studio 2019 te aparece un error indicando que no se reconoce New-AzureRmResourceGroup y te impide realizar la implementación.

Visual Studio 2019 muestra el error: The term ‘New-AzureRMResourceGroup’ is not reconized

¿Por qué se produce este error?

Esto puede deberse a que no tengamos instalado el módulo de Powershell Azure ARM y por eso no encuentra el cmdlet pero otra situación, quizás la más común actualmente, es que hemos actualizado al nuevo modulo de Azure PowerShell Az.

Para los que aun no conozcan este cambio les recomendamos que consulten la documentación del nuevo modulo de Azure Powershell y sus características.

Lo idóneo es trabajar con este nuevo módulo puesto que sobre el módulo ARM dejaran de implementarse las nuevas características y para no quedarnos obsoletos debemos hacer este cambio.

¿Pero que implica actualizar a Azure PS Az Module?

Entre otras cosas, implica que muchos scripts dejaran de funcionar porque la sintaxis de los cmdlets ha cambiado y la instalación de este módulo, escrito completamente desde cero, implica la desinstalación del módulo ARM.

¿Y entonces el error que se produce en VS2019 a qué se debe?

Pues es más sencillo de lo que parece, en VS2019 no se han actualizado aun los scripts de implementación y siguen usando la versión ARM por lo que si hemos instalado la versión AZ no se van a encontrar los cmdlets en nuestro sistema ☹

¿Y cómo lo soluciono?

Lo más sencillo seria pensar que no debería actualizar o que debería desinstalar el módulo, pero claro esto implicaría perdernos todas las nuevas características de Azure Powershell que ya solo se van a incorporar en el modulo AZ.

Otra opción muy poco aconsejable seria reescribir todos los scripts para que sean compatibles teniendo en cuenta la cantidad de horas y de pruebas (en función de la cantidad de scripts que tengamos).

Realmente disponemos de un recurso muy útil y muy sencillo de usar, que es habilitar la compatibilidad con cmdlets de ARM mediante el uso del cmdlet Enable-AzureRmAlias.

Por lo tanto, volviendo a nuestro problema en VS2019…

Cuando creamos un proyecto de Grupo de Recursos de Azure

Implementado una plantilla desde el menu emergente de un proyecto de Grupo de Recursos de Azure

Podemos ver en nuestro Explorador de soluciones varios ficheros:

  • azuredeploy.json – Este fichero contiene la definición de la plantilla con los recursos a implementar
  • azuredeploy.parameters.json – Este fichero contiene los parámetros de la plantilla
  • Deploy-AzureResourceGroup.ps – Este fichero contiene el script en Powershell ARM con la implementación de la plantilla
  • deploy-azureresourcegroupbashcli.sh – Este fichero contiene el script en bash con la implementación de la plantilla
Explorador de soluciones mostrando los ficheros de un proyecto de Grupo de Recursos de Azure

Y cuando vamos a implementar desde el Explorador de soluciones desde la opción del menú emergente del proyecto…

Implementando desde el Explorador de Soluciones

Lo que hace VS2019 es ejecutar el fichero Deploy-AzureResourceGroup.ps que contiene el código en Azure Powershell ARM por lo que el resultado será que se producirá el error ya comentado puesto que no reconocerá los cmdlets.

Lo que vamos a hacer para solucionarlo es sustituir las líneas 16-18 del script

Lineas 16-18 del script Deploy-AzureResourceGroup.ps1

Por las siguientes líneas…

Haciendo compatible el script Deploy-AzureResourceGroup.ps1 con el modulo Az de Azure Powershell

Aquí estamos introduciendo una comprobación de la existencia del modulo Az y en caso afirmativo activamos la compatibilidad con cmdlets de ARM y realizamos el login interactivo con el nuevo módulo.

Con esto el problema estaría resuelto, con la única pega de que nos aparecerá el login interactivo durante la implementación.

Solucionado el problema de implementación de Visual Studio 2019 con el modulo Az

Bueno pues hasta que Visual Studio 2019 actualice la plantilla de solución esperamos que este truco te sirva y no dejes de usar el nuevo módulo Az de Azure Powershell.

Esperamos vuestros comentarios! ?