この記事では、操作中にリソースが見つからない場合に表示されるエラーについて説明します。 通常、このエラーは、Bicep ファイルまたは Azure Resource Manager テンプレート (ARM テンプレート) を使用してリソースをデプロイするときに表示されます。 このエラーは、管理タスクを実行し、Azure Resource Manager が必要なリソースを見つけられないときにも表示されます。 たとえば、存在しないリソースにタグを追加しようとすると、このエラーが表示されます。
症状
リソースが見つからないことを示す 2 つのエラー コードがあります。
NotFound
エラーは、次のような結果を返します。
Code=NotFound;
Message=Cannot find ServerFarm with name exampleplan.
ResourceNotFound
エラーは、次のような結果を返します。
Code=ResourceNotFound;
Message=The Resource 'Microsoft.Storage/storageAccounts/{storage name}' under resource
group {resource group name} was not found.
原因
Resource Manager はリソースのプロパティを取得する必要がありますが、サブスクリプションでリソースが見つかりません。
解決策 1: リソースのプロパティを確認する
管理タスクの実行中にこのエラーが発生した場合は、リソースに指定した値を確認してください。 次の 3 つの値を確認します。
- リソース名
- リソース グループ名
- サブスクリプション
PowerShell または Azure CLI を使用している場合は、リソースを含むサブスクリプションでコマンドを実行していることを確認します。 サブスクリプションは、 Set-AzContext または az account set を使用して変更できます。 多くのコマンドで、現在のコンテキストとは異なるサブスクリプションを指定できるサブスクリプション パラメーターが用意されています。
プロパティを確認できない場合は、 Microsoft Azure ポータルにサインインします。 使用しようとしているリソースを検索し、リソース名、リソース グループ、およびサブスクリプションを調べます。
解決策 2: 依存関係を設定する
テンプレートのデプロイ時にこのエラーが発生した場合は、依存関係の追加が必要な場合があります。 Resource Manager は、可能な場合はリソースを並列に作成することでデプロイを最適化します。
たとえば、Web アプリをデプロイするときは、App Service プランが存在する必要があります。 Web アプリが App Service プランに依存するように指定していない場合、Resource Manager は両方のリソースを同時に作成します。 Web アプリは、App Service プランのリソースがまだ存在しないために見つからないというエラーで失敗します。 このエラーを防ぐには、Web アプリで依存関係を設定します。
resourceId 関数ではなく、暗黙的な依存関係を使用します。 依存関係は、リソースの シンボリック名と ID プロパティを使用して作成されます。
たとえば、Web アプリの serverFarmId
プロパティでは、 servicePlan.id
を使用して App Service プランへの依存関係を作成します。
resource webApp 'Microsoft.Web/sites@2022-03-01' = {
properties: {
serverFarmId: servicePlan.id
}
}
resource servicePlan 'Microsoft.Web/serverfarms@2022-03-01' = {
name: hostingPlanName
...
ほとんどのデプロイでは、dependsOn
を作成するために を使用する必要はありません。
不要な依存関係の設定は避けてください。 不要な依存関係があると、リソースが並列にデプロイされないため、デプロイの期間が長くなります。 また、デプロイメントをブロックする循環依存関係を作成する場合もあります。
デプロイ順序
依存関係の問題が見つかった場合は、リソースのデプロイ順序について洞察を得る必要があります。 ポータルを使用して、デプロイ操作の順序を表示できます。
ポータルにサインイン します。
リソース グループの [概要] から、デプロイ履歴のリンクを選択します。
確認する デプロイ名 として、 [ 関連イベント] を選択します。
各リソースのイベントのシーケンスを調べます。 各操作のステータスとそのタイムスタンプに注意してください。 たとえば、次の図は、並列にデプロイされた 3 つのストレージ アカウントを示しています。 3 つのストレージ アカウントのデプロイが同時に開始されたことに注意してください。
次の図は、並列にデプロイされていない 3 つのストレージ アカウントを示しています。 2 番目のストレージ アカウントは最初のストレージ アカウントに依存し、3 番目のストレージ アカウントは 2 番目のストレージ アカウントに依存します。 最初のストレージ アカウントには、次のストレージ アカウントが開始される前に、 開始済み、 承諾済み、 成功という ラベルが付けられます。
解決策 3: 外部リソースを取得する
Bicep では、シンボリック名を使用して、別のリソースへの 暗黙的な依存関係 を作成します。 既存のキーワードは、デプロイされたリソースを参照します。 既存のリソースがデプロイするリソースとは異なるリソース グループにある場合は、 scope を含め、 resourceGroup 関数を使用します。
この例では、別のリソース グループの既存の App Service プランを使用する Web アプリがデプロイされます。
resource servicePlan 'Microsoft.Web/serverfarms@2022-03-01' existing = {
name: hostingPlanName
scope: resourceGroup(rgname)
}
resource webApp 'Microsoft.Web/sites@2022-03-01' = {
name: siteName
properties: {
serverFarmId: servicePlan.id
}
}
解決策 4: リソースからマネージド ID を取得する
マネージド ID を使用してリソースをデプロイする場合は、そのリソースがデプロイされるまで待ってから、マネージド ID の値を取得する必要があります。 ID が適用されるリソースの 暗黙的な依存関係 を使用します。 このアプローチにより、Resource Manager が依存関係を使用する前に、リソースとマネージド ID がデプロイされます。
仮想マシンに適用されるマネージド ID のプリンシパル ID とテナント ID を取得できます。 たとえば、仮想マシン リソースのシンボリック名が vm
の場合は、次の構文を使用します。
vm.identity.principalId
vm.identity.tenantId
解決策5:チェック機能
リソースのシンボリック名を使用して、リソースから値を取得できます。 同じリソース グループまたは別のリソース グループ内のストレージ アカウントは、シンボリック名を使用して参照できます。 デプロイされたリソースから値を取得するには、 既存の キーワードを使用します。 リソースが別のリソース グループにある場合は、scope
関数と共に を使用します。 ほとんどの場合、 reference 関数は必要ありません。
次の例では、別のリソース グループ内の既存のストレージ アカウントを参照しています。
resource stgAcct 'Microsoft.Storage/storageAccounts@2022-05-01' existing = {
name: stgname
scope: resourceGroup(rgname)
}
解決策6:リソースを削除した後
リソースを削除すると、リソースがポータルに表示されても使用できなくなる時間が短くなる可能性があります。 リソースを選択すると、リソースが 見つからないというエラーが表示されます。
ポータルを更新すると、削除されたリソースが使用可能なリソースの一覧から削除されます。 削除されたリソースが数分以上使用可能と表示される場合は、 サポートにお問い合わせください。