次の方法で共有


リソース名と型の不一致のエラーを解決する

この記事では、リソース名の形式がリソースの種類の形式と一致しない場合のエラーを解決する方法について説明します。

症状

テンプレートをデプロイすると、エラーコード ( InvalidTemplate) のエラーが表示されます。 このメッセージは、リソースの種類と名前が一致しないことを示しています。 これは、名前のセグメント数を固定することを提案しています。

原因

リソースの種類には、リソース プロバイダーの名前空間と、種類の 1 つ以上のセグメントが含まれます。 各セグメントは、リソース階層のレベルを表し、スラッシュで区切られます。

{resource-provider-namespace}/{type-segment-1}/{type-segment-2}

リソース名には、スラッシュで区切られた 1 つ以上のセグメントが含まれています。 セグメントの数は、リソースの種類の数と一致する必要があります。

{name-segment-1}/{name-segment-2}

リソースタイプと名前に含まれるセグメントの数が異なる場合、このエラーが発生します。

解決策

リソースタイプのレベルを理解していることを確認してください。 たとえば、キー コンテナー リソースの完全修飾リソースの種類が Microsoft.KeyVault/vaults であるとします。 リソース プロバイダーの名前空間 (Microsoft.KeyVault) は無視して、種類 (コンテナー) に注目できます。 セグメントは 1 つあります。

キー コンテナー シークレットは、コンテナーの子リソースです。 完全修飾リソースの種類は Microsoft.KeyVault/vaults/secrets です。 このリソース・タイプには、2つのセグメント(ボールト/シークレット)があります。

キー コンテナーの名前を指定するには、セグメントを 1 つだけ指定します (例: examplevault123)。 シークレットの名前を指定するには、 examplevault123/examplesecret のように 2 つのセグメントを指定します。 最初のセグメントは、このシークレットが格納されているキー コンテナーを示します。

次の例は、リソース名の有効な形式を示しています。

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

複数のセグメントに名前を指定すると、 エラー が表示されます。

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 プロパティを使用し、親リソースのシンボリック名を指定します。 親プロパティを使用すると、完全な名前が自動的に構築されるため、子リソース名を 1 つのセグメントとして指定します。

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 テンプレートで子リソースの名前と種類を設定する」を参照してください。