Rozwiązywanie błędów dotyczących nazwy zasobu i niezgodności typu
W tym artykule opisano sposób rozwiązywania błędu, gdy format nazwy zasobu nie jest zgodny z formatem typu zasobu.
Objaw
Podczas wdrażania szablonu występuje błąd z kodem InvalidTemplate
błędu . Komunikat wskazuje, że typ zasobu i nazwa nie są zgodne. Sugeruje to ustalenie liczby segmentów w nazwie.
Przyczyna
Typ zasobu zawiera przestrzeń nazw dostawcy zasobów i co najmniej jeden segment typów. Każdy segment reprezentuje poziom w hierarchii zasobów i jest oddzielony ukośnikiem.
{resource-provider-namespace}/{type-segment-1}/{type-segment-2}
Nazwa zasobu zawiera co najmniej jeden segment oddzielony ukośnikami. Liczba segmentów musi być zgodna z liczbą w typie zasobu.
{name-segment-1}/{name-segment-2}
Jeśli typ zasobu i nazwa zawierają inną liczbę segmentów, zostanie wyświetlony ten błąd.
Rozwiązanie
Upewnij się, że znasz poziom typu zasobu. Na przykład zasób magazynu kluczy ma w pełni kwalifikowany typ Microsoft.KeyVault/vaults
zasobu . Możesz zignorować przestrzeń nazw dostawcy zasobów (Microsoft.KeyVault) i skoncentrować się na typie (magazynach). Ma jeden segment.
Wpis tajny magazynu kluczy to zasób podrzędny magazynu. Ma w pełni kwalifikowany typ Microsoft.KeyVault/vaults/secrets
zasobu . Ten typ zasobu ma dwa segmenty (magazyny/wpisy tajne).
Aby określić nazwę magazynu kluczy, podaj tylko jeden segment, na przykład examplevault123
. Aby określić nazwę wpisu tajnego, podaj dwa segmenty, takie jak examplevault123/examplesecret
. Pierwszy segment wskazuje magazyn kluczy, w którym jest przechowywany ten wpis tajny.
W poniższym przykładzie przedstawiono prawidłowy format nazwy zasobu.
Jeśli podano nazwę z więcej niż jednym segmentem, zostanie wyświetlony błąd .
resource kv 'Microsoft.KeyVault/vaults@2022-07-01' = {
name: 'contoso/examplevault123'
...
}
Gdy zagnieżdżasz zasób podrzędny w ramach zasobu nadrzędnego, podaj tylko dodatkowy segment. Pełny typ zasobu i nazwa nadal zawierają wartości z zasobu nadrzędnego, ale są one tworzone dla Ciebie. W poniższym przykładzie typ to secrets
, a nazwa to examplesecret
.
resource kv 'Microsoft.KeyVault/vaults@2022-07-01' = {
name: 'examplevault123'
...
resource kvsecret 'secrets' = {
name: 'examplesecret'
properties: {
value: secretValue
}
}
}
Podczas definiowania zasobu podrzędnego poza elementem nadrzędnym podaj pełny typ zasobu. W przypadku formatu JSON podaj pełną nazwę zasobu.
W przypadku Bicep użyj parent
właściwości i podaj symboliczną nazwę zasobu nadrzędnego. W przypadku korzystania z właściwości nadrzędnej pełna nazwa jest tworzona, dlatego należy podać nazwę zasobu podrzędnego jako pojedynczy segment.
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'
...
}
Aby uzyskać więcej informacji, zobacz Set name and type for child resources in Bicep or Set name and type for child resources in ARM templates (Ustawianie nazwy i typu dla zasobów podrzędnychw szablonach usługi ARM).