Udostępnij za pośrednictwem


Usuwanie błędów dotyczących nazwy zasobu i niezgodności typów

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 otrzymujesz błąd z kodem InvalidTemplate. Komunikat wskazuje, że typ zasobu i nazwa nie są zgodne. Sugeruje skorygowanie 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 rozumiesz poziom typu zasobu. Na przykład zasób magazynu kluczy ma w pełni kwalifikowany typ zasobu Microsoft.KeyVault/vaults. Możesz zignorować przestrzeń nazw dostawcy zasobów (Microsoft.KeyVault) i skoncentrować się na typie (sejfy). Ma jeden segment.

Tajemnica kluczowego magazynu to zasób podrzędny magazynu. Ma w pełni kwalifikowany typ zasobu Microsoft.KeyVault/vaults/secrets. Ten typ zasobu ma dwa segmenty (skarbiec/sekrety).

Aby określić nazwę magazynu kluczy, wprowadź jedną część, taką jak examplevault123. Aby określić nazwę sekretu, podaj dwa segmenty, takie jak examplevault123/examplesecret. Pierwszy segment wskazuje magazyn kluczy, w którym przechowywana jest ta tajemnica.

W poniższym przykładzie przedstawiono prawidłowy format nazwy zasobu.

resource kv 'Microsoft.KeyVault/vaults@2022-07-01' = {
  name: 'examplevault123'
  ...
}

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'
  ...
}

W przypadku zagnieżdżania zasobu podrzędnego 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 skorzystaj z właściwości parent i podaj symboliczną nazwę zasobu nadrzędnego. Korzystając z właściwości rodzica, pełna nazwa jest tworzona dla Ciebie, więc podajesz nazwę zasobu podrzędnego jako pojedynczy element.

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 Ustawianie nazwy i typu zasobów podrzędnych w Bicep lub Ustawianie nazwy i typu zasobów podrzędnych w szablonach usługi ARM.