The storage account already exists error when redeploying an ARM template

Update 06 Jul 2016

Seems this is resolved on the latest Storage Resource Provider API 2016-01-01. The schema documented at https://azure.microsoft.com/en-us/documentation/articles/resource-manager-template-storage/ is for 2015-06-15, and that version didn’t support PUT operations. The new 2016-01-01 schema can be found at:

So this new template now works as expected and tags and other settings can be changed:

{

    “$schema”: “https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#”,

    “contentVersion”: “1.0.0.0”,

    “resources”: [

      {

        “name”: “dnntest20160705”,

        “type”: “Microsoft.Storage/storageAccounts”,

        “location”: “[resourceGroup().location]”,

        “apiVersion”: “2016-01-01”,

        “dependsOn”: [ ],

        “tags”: {

          “displayName”: “MyStorageAccount”

        },

        “sku”: {

          “name”: “Standard_LRS”

        },

        “kind”: “Storage”

      }

    ]

}

 

Notes:

  • Ensure you install the latest Azure PowerShell and SDKs or the latest 2016-01-01 version won’t be recognized
  • With the latest Azure SDK 2.9.1 available, I have syntax errors on the template, seems the schema was not included in the latest release. While you have syntax errors, you can deploy from Visual Studio with no problems. I suppose this will be fixed on the next Azure SDK release.

Thanks to Tom FitzMacken for the indications.

_____________________________________________________________________________

Original issue description

Seems that when deploying an storage account using an ARM template like the one below:

{

    “$schema”: “https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#”,

    “contentVersion”: “1.0.0.0”,

    “resources”: [

      {

        “name”: “dnntest20160705”,

        “type”: “Microsoft.Storage/storageAccounts”,

        “location”: “[resourceGroup().location]”,

        “apiVersion”: “2015-06-15”,

        “dependsOn”: [ ],

        “tags”: {

          “displayName”: “MyStorageAccount”

        },

        “properties”: {

          “accountType”: “Standard_LRS”

        }

      }

    ]

}

 

If you go and change the “displayName” tag value for something else or try to add a new tag, when you deploy the update I get the following deployment exception:

22:44:07 – [ERROR] New-AzureRmResourceGroupDeployment : 22:44:07 – Resource

22:44:07 – [ERROR] Microsoft.Storage/storageAccounts ‘dnntest20160705’ failed with message ‘{

22:44:07 – [ERROR]   “error”: {

22:44:07 – [ERROR]     “code”: “StorageAccountAlreadyExists”,

22:44:07 – [ERROR]     “message”: “The storage account named dnntest20160705 already exists under

22:44:07 – [ERROR] the subscription.”

22:44:07 – [ERROR]   }

22:44:07 – [ERROR] }’

22:44:07 – [ERROR] At D:\temp\azureresourcegroup2\Scripts\Deploy-AzureResourceGroup.ps1:98 char:1

Workaround

Change the tag value through the portal/PowerShell, so new deployment updates work.

 

This sounds like a bug, that will probably be resolved in a future release.

Password is expired when using Visual Studio Release Management

Today I was investigating an issue on Visual Studio Online Release Management, getting a deployment error related to the Azure credentials used for the deployment operation

Password is Expired summary

When going to the log details, the error happens on a resource manager task. The logs show that the password of the user account used to connect to Azure has expired.

Password is Expired

And here comes something to highlight, because the configuration of the service connection between VS Online and Azure has evolved in the latest months, to support both Azure Classic and Resource Manager models. Also note that the tasks you can configure on Visual Studio Release Management can work with one of these models or both. Let me show with an example.

Configuring Azure service connection on VS Online Release Management

To setup the Azure connection on Release Management, you need to click on the “Manage Project”

ManageProject

Once there, go the “Services” tab and when clicking on the “New Service Endpoint” you will see two ways to connect to Azure: Azure Classic and the new Azure Resource Manager. A few months back there was an only option to support Classic and RM scenarios, but this changed later. The main difference now is the way each connection authenticates with Azure

SNAGHTMLd1dcd0b

So a big difference here is the use of a service principal on Azure Resource Manager connections instead of using a user principal when using Azure Classic connections. This is important for our case, because the “Password is expired” error message we got refers to a user principal, not to a service principal where the “password” and “expiration” concepts are different.

Note that depending on the task used on Release Management, you can use one or other connection, or only the Classic connection. For example:

Fixing the “password is expired” issue

Once we understand these concepts, we have just to fix the password expiration issue. The solution has two steps:

  1. Change the password of the user principal and then update the Azure Classic connections with the new password. Note: You should use a long/very strong password for these user principals because of the second step; service principals come to play to stop using user principals in the future;
  2. To avoid this to happen again, change the password expiration policy for this account to don’t expire.

The first step can be easily done manually. For the second step, we need the help of Azure AD PowerShell module.

Install Azure AD PowerShell module

On this MSDN article you can find all the information related to managing Azure AD via PowerShell: https://msdn.microsoft.com/en-us/library/jj151815.aspx The Azure AD module is supported on the following Windows operating systems with the default version of Microsoft .NET Framework and Windows PowerShell: Windows 8.1, Windows 8, Windows 7, Windows Server 2012 R2, Windows Server 2012, or Windows Server 2008 R2. You need to install two utilities:

Connecting to Azure AD

Once you have installed both utilities, to start using all the Azure AD cmdlets just open a PowerShell command prompt.

$msolcred = get-credential
connect-msolservice -credential $msolcred

Obviously you need to introduce admin credentials if you want to use the administrative cmdlets later, like changing the password expiration policy.

Change the user principal password expiration policy

Once logged in, we can just change the password expiration policy for the user with this script:

# Gets the current policiy value
Get-MsolUser -UserPrincipalName “releasemanagement@mytenant.onmicrosoft.com” | select PasswordNeverExpires

# Changes the policy to never expire
Get-MsolUser -UserPrincipalName “releasemanagement@mytenant.onmicrosoft.com” | Set-MsolUser -PasswordNeverExpires $true

There is a good blog post about this at https://azure.microsoft.com/en-us/documentation/articles/active-directory-passwords-set-expiration-policy/

What happens with service principals? Passwords never expire?

Service principals works in a different way. When you create a service principal, you can specify the StartDate and EndDate for the security principal credential (by default, StartDate=Now; EndDate = Now + 1 Year). You can change the EndDate in a similar way (is not a boolean flag, you need to set the EndDate).

For more information, visit the MSDN article https://msdn.microsoft.com/en-us/library/dn194091.aspx

Azure Bootcamp 2016: cierre y hasta el año que viene!

Después de la resaca que nos ha dejado el Global Azure Bootcamp 2016, no nos queda más que dar las gracias a todos los que habéis puesto vuestro granito de arena en lo que ha sido la mejor edición de todos los bootcamps que hemos realizado durante los últimos años. Comenzamos en 2014 con cerca de 140 asistentes, el año pasado pasamos de 200, y este año, las cifras se han disparado a lo siguiente:
· 450 registrados 1 mes antes de la fecha del evento, llegando al límite de capacidad de las instalaciones. Al final sobre 390 asistentes en total
· 3 tracks de sesiones haciendo un total de 21 sesiones entre una pre-selección de 60 charlas. Todos los recursos de las mismas ya están enlazados desde la agenda en http://azurebootcamp.es
· Emisión en directo a través de Channel9, quedando publicadas en el mismo canal http://aka.ms/azurebootcampstreaming
· 13 patrocinadores duplicando el número de la última edición
· 1 Lab Global (RacingLab con backend en Azure) con 365 participantes simultáneos
· 187 localizaciones en 62 países alrededor del mundo
Hemos recibido feedback muy positivo y hemos tomado nota de algunas incidencias a mejorar en la próxima edición, estoy ya no hay quien lo pare. También hemos subido algunas fotos del evento que ya están enlazadas también desde la propia web del Azure Bootcamp, incluyendo la foto finish, de los que se quedaron hasta más de las 19:00 horas para el sorteo final (tenemos grabado El Preguntón en Channel 9!).
Una vez más, gracias a todos por vuestra asistencia, colaboración y sobretodo, por habérnoslo hecho pasar en grande. Nos vemos en 2017.
clip_image002

Azure Bootcamp 2016: a una semana del gran evento

bootcamp2016-150x101Parece mentira, pero ya ha pasado un año desde la última vez que pasamos un sábado estupendo aprendiendo sobre los últimos avances y nuevas características de Azure, un día que nos dejó a todos un buen sabor de boca compartiendo una experiencia global y con ganas de repetir de nuevo en 2016.
¡Y ese momento por fin ya llegó! El próximo sábado 16 de Abril nos vemos de nuevo y las cifras se han disparado.

Un evento global

Como ya sabéis, el Azure Bootcamp es un evento creado por y para la comunidad, donde voluntarios alrededor del globo se ofrecen para compartir conocimiento a través de sesiones técnicas, resolviendo dudas y contando las últimas novedades sobre la plataforma de nube pública de Microsoft. Este año se celebra en casi 180 ciudades alrededor del globo, por lo que si tienes una cerca, no pierdas la oportunidad. En este enlace tienes más información de todas las ciudades donde se celebra el evento: http://global.azurebootcamp.net/locations/
EventoGlobal
Para el evento que tenemos preparado para Madrid no van a faltar las sorpresas, y siguiendo la misma tónica del año pasado tendremos:

  • 3 tracks de sesiones técnicas, desde nivel para principiantes hasta para los más avanzados.
  • Un área “Azk the expert” para preguntar de primera mano a los que más saben sobre la plataforma y así resolver tus dudas
  • Racing Lab: ver detalles más abajo
  • Novedad: Hands-on Labs con premios directos por completarlos
  • Sorteos de licencias de software relacionado con Azure para hacerte la vida más fácil
  • Presencia de las empresas que en la actualidad más en contacto están con la plataforma, por lo que si tienes un proyecto que no sabes cómo meterle mano o buscas una nueva carrera profesional en el mundo cloud, puede ser tu gran oportunidad
  • Ah! Café y bocatas también habrá 🙂

Toda esta expectación de un evento que no ha hecho más que crecer a lo largo de los años, ha provocado que a un mes de la fecha llegáramos a completar el aforo que inicialmente habíamos calculado, después de conseguir más patrocinadores y así poder ampliar al número de participantes (al doble de la última edición), tuviéramos que colgar el cartel de “todo vendido”. Hemos hecho lo que ha estado en nuestra mano para liberar plazas que se han ido reservando de nuevo casi inmediatamente. Pero no os preocupéis, que ya tenemos algunas ideas para que podáis participar de algún modo en la experiencia, tanto en los hand-on labs como en algunos de los premios. Estad atentos al Twitter de @gwab_es para más información.

Racing Lab

Los que ya habéis estado en ediciones anteriores, recordaréis que se ha implementado un lab científico, que desafortunadamente este año la organización global no ha podido encontrar el algoritmo que cumpliera las expectativas. Pero una vez más, sí que estará disponible el Global Azure Bootcamp Racing Game Lab, un juego que ha sido diseñado para ejecutarse sobre Azure y conocer los detalles de cómo funciona para así aprender cómo se millones de datos de telemetría y finalmente explotarlos directamente desde una simple página web con Javascript.
El lab permite a los asistentes de todo el mundo a competir para conseguir las vueltas más rápidas en un juego de conducción 3D. Los servicios de back-end del juego están alojados en Azure y procesarán los tiempos por vuelta, telemetría y logros desbloqueados en el juego.
Ahora mismo los organizadores de todo el mundo hemos comenzado a testearlo para que esté a punto para el día del evento con más de 10.000 jugadores alrededor del globo, y por ahora, dejando el podio bien alto 🙂
Highscores1
Para conocer más detalles del juego puedes echarle un vistazo al siguiente video de Alan Smith, quien ha creado e implementado el mismo:

 

Patrocinadores locales

Por supuesto, la realización de este evento con los líderes de la comunidad de Microsoft Azure en España manteniendo la asistencia gratuita no sería posible sin la dedicación y duro trabajo de los presentadores, organizadores y contribuciones económicas de otras organizaciones para ayudar a financiar la logística del mismo.
patrocinadoreslocales

Patrocinadores globales

Agradecemos también a los patrocinadores globales por ofrecer esa guinda al pastel con las licencias de software que nos harán la vida más fácil a todos los que trabajamos con Azure.

¡Y no olvides ponerte en contacto con nosotros en http://azurebootcamp.es o a través de la cuenta de Twitter @gwab_es para cualquier duda que tengas!