Risolvere gli errori relativi ai nomi degli account di archiviazione

Questo articolo spiega come risolvere gli errori per relativi ai nomi degli account di archiviazione di Azure che possono verificarsi durante la distribuzione con un file Bicep o un modello di Azure Resource Manager (modello di ARM). Cause di errore comuni sono la presenza di caratteri non validi nel nome dell'account di archiviazione o l'uso di un nome già esistente per un account di archiviazione. I nomi degli account di archiviazione devono essere univoci a livello globale in Azure.

Sintomo

Un nome di un account di archiviazione non valido genera un codice di errore durante la distribuzione. Di seguito sono riportati alcuni esempi di errori relativi ai nomi degli account di archiviazione.

Nome dell'account non valido

Il nome dell'account di archiviazione include caratteri non validi, ad esempio una lettera maiuscola o un carattere speciale, ad esempio, un punto esclamativo.

Code=AccountNameInvalid
Message=S!torageckrexph7isnoc is not a valid storage account name. Storage account name must be
between 3 and 24 characters in length and use numbers and lower-case letters only.

Percorso della risorsa non valido

Si tenta di distribuire un nuovo account di archiviazione con lo stesso nome e nello stesso gruppo di risorse, ma si usa un percorso diverso come account di archiviazione esistente nella sottoscrizione di Azure. L'errore indica che l'account di archiviazione è già esistente e non può essere creato nel nuovo percorso. Selezionare un nome diverso per creare il nuovo account di archiviazione.

Code=InvalidResourceLocation
Message=The resource 'storageckrexph7isnoc' already exists in location 'westus'
in resource group 'demostorage'. A resource with the same name cannot be created in location 'eastus'.
Please select a new resource name.

Account di archiviazione in un gruppo di risorse diverso

Si tenta di distribuire un nuovo account di archiviazione con lo stesso nome e percorso di un account di archiviazione esistente, ma in un gruppo di risorse diverso nella sottoscrizione.

Code=StorageAccountInAnotherResourceGroup
Message=The account storageckrexph7isnoc is already in another resource group in this subscription.

L'account di archiviazione è già in uso

Si tenta di distribuire un nuovo account di archiviazione con lo stesso nome di un account di archiviazione già esistente in Azure. Il nome dell'account di archiviazione esistente potrebbe trovarsi nella sottoscrizione o nel tenant o in qualsiasi altro percorso in Azure. I nomi degli account di archiviazione devono essere univoci a livello globale in Azure.

Code=StorageAccountAlreadyTaken
Message=The storage account named storageckrexph7isnoc is already taken.

Causa

Le cause di errore più comuni derivano dall'uso di caratteri non validi nel nome dell'account di archiviazione o dalla presenza di un nome duplicato. I nomi degli account di archiviazione devono soddisfare i criteri seguenti:

  • La lunghezza deve essere compresa tra 3 e 24 caratteri e devono essere usate solo lettere minuscole e numeri.
  • Il nome deve essere univoco a livello globale in Azure. I nomi degli account di archiviazione non possono essere duplicati in Azure.

Soluzione

È possibile creare un nome univoco concatenando un prefisso o un suffisso con un valore della funzione uniqueString.

Negli esempi seguenti si specifica un prefisso con la stringa storage concatenata con il valore di uniqueString.

Bicep si avvale della interpolazione di stringa con uniqueString.

resource storageAccount 'Microsoft.Storage/storageAccounts@2021-09-01' = {
  name: 'storage${uniqueString(resourceGroup().id)}'

Assicurarsi che il nome dell'account di archiviazione non superi i 24 caratteri. La funzione uniqueString restituisce 13 caratteri. Se si desidera concatenare un prefisso o un suffisso, specificare un valore di 11 caratteri o inferiore.

Negli esempi seguenti si utilizza un parametro denominato storageNamePrefix che crea un prefisso con un massimo di 11 caratteri.

@description('The prefix value for the storage account name.')
@maxLength(11)
param storageNamePrefix string = 'storage'

Successivamente, si concatena il valore del parametro storageNamePrefix con il valore uniqueString per creare un nome dell'account di archiviazione.

name: '${storageNamePrefix}${uniqueString(resourceGroup().id)}'