ストレージ アカウント名のエラーの解決

この記事では、Bicep ファイルまたは Azure Resource Manager テンプレート (ARM テンプレート) を使用してデプロイ中に発生する可能性がある Azure ストレージ アカウント名のエラーを解決する方法について説明します。 エラーの一般的な原因は、ストレージ アカウント名に無効な文字が含まれている、またはストレージ アカウントの名前に既存のストレージ アカウントと同じ名前が使用されていることです。 ストレージ アカウント名は Azure 全体でグローバルに一意である必要があります。

症状

ストレージ アカウント名が無効な場合、デプロイ時にエラー コードが発生します。 以下は、ストレージ アカウント名に関するエラーの例です。

アカウント名が無効

ストレージ アカウント名に、大文字や特殊文字 (感嘆符など) などの禁止文字が含まれる場合。

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.

リソースの場所が無効

同じ名前で同じリソース グループにある新しいストレージ アカウントを、Azure サブスクリプションの既存のストレージ アカウントとは異なる場所にデプロイしようとした場合。 このエラーは、ストレージ アカウントが既に存在し、新しい場所に作成できないことを示します。 別の名前を選択して、新しいストレージ アカウントを作成します。

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.

ストレージ アカウントが別のリソース グループ内にある

既存のストレージ アカウントと同じ名前と場所を持つ新しいストレージ アカウントを、サブスクリプション内の異なるリソース グループにデプロイしようとした場合。

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

ストレージ アカウント名が既に使用されている

Azure に既に存在するストレージ アカウントと同じ名前の新しいストレージ アカウントをデプロイしようとした場合。 既存のストレージ アカウント名は、サブスクリプションまたはテナント内、あるいは Azure 全体のどこにでもある可能性があります。 ストレージ アカウント名は Azure 全体でグローバルに一意である必要があります。

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

原因

エラーの一般的な理由は、ストレージ アカウント名に無効な文字を使用しているか、重複する名前であるからです。 ストレージ アカウントの名前は、次の条件を満たす必要があります。

  • 長さは 3 ~ 24 文字で、小文字と数字のみを使用します。
  • Azure 全体で一意である必要があります。 Azure 内で、重複するストレージ アカウント名を使用することはできません。

解決策

プレフィックスまたはサフィックスと uniqueString 関数の値を連結することで、一意な名前を作成することができます。

以下の例では、プレフィックスを文字列 storage で指定し、それを uniqueString の値と連結しています。

Bicep は、string interpolationuniqueString と一緒に使用します。

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

ストレージ アカウント名が 24 文字を超えないようにしてください。 uniqueString 関数は、13 文字を返します。 プレフィックスまたはサフィックスを連結する場合は、11 文字以下の値を指定します。

次の例では、最大 11 文字のプレフィックスを作成する storageNamePrefix というパラメーターを使用します。

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

次に、storageNamePrefix パラメーターの値を uniqueString 値と連結して、ストレージ アカウント名を作成します。

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