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 InvalidTemplatebłę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/vaultszasobu . 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/secretszasobu . 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.

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

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).