Устранение ошибок при несоответствии имени и типа ресурса
Эта статья описывает, как устранить ошибку, если формат имени ресурса не соответствует формату типа ресурса.
Симптом
При развертывании шаблона появляется сообщение об ошибке с кодом InvalidTemplate
ошибки . Сообщение указывает на несоответствие типа и имени ресурса. Оно предлагает исправить число сегментов в имени.
Причина
Тип ресурса содержит пространство имен поставщика ресурсов и один или несколько сегментов для типов. Каждый сегмент представляет уровень в иерархии ресурсов и отделяется косой чертой.
{resource-provider-namespace}/{type-segment-1}/{type-segment-2}
Имя ресурса содержит один или несколько сегментов, разделенных косой чертой. Это число сегментов должно соответствовать числу сегментов в типе ресурса.
{name-segment-1}/{name-segment-2}
Если тип и имя ресурса содержат различное число сегментов, возникает эта ошибка.
Решение
Убедитесь, что вы понимаете, к какому уровню относится тип ресурса. Например, ресурс хранилища ключей имеет полный тип ресурса Microsoft.KeyVault/vaults
. Вы можете игнорировать пространство имен поставщика ресурсов (Microsoft.KeyVault) и сконцентрироваться на типе (vaults). Он имеет один сегмент.
Секрет хранилища ключей является дочерним ресурсом этого хранилища. Он имеет полный тип ресурса Microsoft.KeyVault/vaults/secrets
. Этот тип ресурса имеет два сегмента (vaults/secrets).
Чтобы задать имя для хранилища ключей, укажите только один сегмент, например examplevault123
. Чтобы задать имя секрета, укажите два сегмента, например examplevault123/examplesecret
. Первый сегмент указывает хранилище ключей, где хранится этот секрет.
В следующем примере показан допустимый формат для имени ресурса.
Если вы указали имя с несколькими сегментами, возникнет ошибка.
resource kv 'Microsoft.KeyVault/vaults@2022-07-01' = {
name: 'contoso/examplevault123'
...
}
При вложении дочернего ресурса в родительский укажите только дополнительный сегмент. Полный тип и имя ресурса по-прежнему содержат значения родительского ресурса, но они сформированы за вас. В следующем примере тип имеет значение secrets
, а имя — examplesecret
.
resource kv 'Microsoft.KeyVault/vaults@2022-07-01' = {
name: 'examplevault123'
...
resource kvsecret 'secrets' = {
name: 'examplesecret'
properties: {
value: secretValue
}
}
}
Когда вы определяете дочерний ресурс за пределами родительского, укажите полный тип ресурса. В JSON укажите полное имя ресурса.
Для Bicep используйте свойство parent
и укажите символьное имя родительского ресурса. При использовании родительского свойства полное имя будет создано за вас, поэтому нужно указать имя дочернего ресурса в виде одного сегмента.
resource kvsecret 'Microsoft.KeyVault/vaults/secrets@2022-07-01' = {
name: 'examplesecret'
parent: kv
properties: {
value: secretValue
}
}
resource kv 'Microsoft.KeyVault/vaults@2022-07-01' = {
name: 'examplevault123'
...
}
Дополнительные сведения см. в разделе Настройка имени и типа для дочерних ресурсов в Bicep или Настройка имени и типа для дочерних ресурсов в шаблонах ARM.