Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menjelaskan kesalahan yang Anda lihat ketika sumber daya tidak dapat ditemukan selama operasi. Biasanya, Anda melihat kesalahan ini saat menyebarkan sumber daya dengan file Bicep atau templat Azure Resource Manager (templat ARM). Anda juga melihat kesalahan ini saat melakukan tugas manajemen dan Azure Resource Manager tidak dapat menemukan sumber daya yang diperlukan. Misalnya, jika Anda mencoba menambahkan tag ke resource yang tidak ada, Anda akan menerima error ini.
Gejala
Ada dua kode kesalahan yang menunjukkan sumber daya tidak dapat ditemukan. Kesalahan mengembalikan NotFound
hasil yang mirip dengan:
Code=NotFound;
Message=Cannot find ServerFarm with name exampleplan.
Kesalahan mengembalikan ResourceNotFound
hasil yang mirip dengan:
Code=ResourceNotFound;
Message=The Resource 'Microsoft.Storage/storageAccounts/{storage name}' under resource
group {resource group name} was not found.
Penyebab
Resource Manager perlu mengambil properti untuk sumber daya, tetapi tidak dapat menemukan sumber daya dalam langganan Anda.
Solusi 1: Periksa properti sumber daya
Ketika Anda menerima kesalahan ini saat melakukan tugas manajemen, periksa nilai yang Anda berikan untuk sumber daya. Tiga nilai yang perlu diperiksa adalah:
- Nama sumber daya
- Nama grup sumber daya
- Langganan
Jika Anda menggunakan PowerShell atau Azure CLI, periksa apakah Anda menjalankan perintah dalam langganan yang berisi sumber daya. Anda dapat mengubah langganan dengan set akun Set-AzContext atau az. Banyak perintah menyediakan parameter langganan yang memungkinkan Anda menentukan langganan yang berbeda dari konteks saat ini.
Jika Anda tidak dapat memverifikasi properti, masuk ke portal Microsoft Azure. Temukan sumber daya yang coba Anda gunakan dan periksa nama sumber daya, grup sumber daya, dan langganan.
Solusi 2: Atur dependensi
Jika Anda mendapatkan kesalahan ini saat menyebarkan templat, Anda mungkin perlu menambahkan dependensi. Resource Manager mengoptimalkan penyebaran dengan membuat sumber daya secara paralel, jika memungkinkan.
Misalnya, saat Anda menyebarkan aplikasi web, paket App Service harus ada. Jika Anda belum menentukan bahwa aplikasi web bergantung pada paket App Service, Resource Manager membuat kedua sumber daya secara bersamaan. Aplikasi web gagal dengan kesalahan bahwa sumber daya paket App Service tidak dapat ditemukan karena belum ada. Anda mencegah kesalahan ini dengan mengatur dependensi di aplikasi web.
Gunakan dependensi implisit daripada fungsi resourceId . Dependensi dibuat menggunakan nama simbolis dan properti ID sumber daya.
Misalnya, properti aplikasi serverFarmId
web digunakan servicePlan.id
untuk membuat dependensi pada paket App Service.
resource webApp 'Microsoft.Web/sites@2022-03-01' = {
properties: {
serverFarmId: servicePlan.id
}
}
resource servicePlan 'Microsoft.Web/serverfarms@2022-03-01' = {
name: hostingPlanName
...
Untuk sebagian besar penyebaran, tidak perlu digunakan dependsOn
untuk membuat dependensi eksplisit.
Hindari mengatur dependensi yang tidak diperlukan. Dependensi yang tidak perlu memperpanjang durasi penyebaran karena sumber daya tidak disebarkan secara paralel. Selain itu, Anda dapat membuat dependensi melingkar yang memblokir penyebaran.
Urutan penyebaran
Saat Anda melihat masalah dependensi, Anda perlu mendapatkan wawasan tentang urutan penyebaran sumber daya. Anda dapat menggunakan portal untuk melihat urutan operasi penyebaran:
Masuk ke portal.
Dari Gambaran Umum grup sumber daya, pilih tautan untuk riwayat penyebaran.
Untuk nama penyebaran yang ingin Anda tinjau, pilih Peristiwa terkait.
Periksa urutan peristiwa untuk setiap sumber daya. Perhatikan status setiap operasi dan stempel waktunya. Misalnya, gambar berikut menunjukkan tiga akun penyimpanan yang disebarkan secara paralel. Perhatikan bahwa ketiga penyebaran akun penyimpanan dimulai secara bersamaan.
Gambar berikutnya menunjukkan tiga akun penyimpanan yang tidak disebarkan secara paralel. Akun penyimpanan kedua bergantung pada akun penyimpanan pertama, dan akun penyimpanan ketiga bergantung pada akun penyimpanan kedua. Akun penyimpanan pertama diberi label Dimulai, Diterima, dan Berhasil sebelum akun penyimpanan berikutnya dimulai.
Solusi 3: Dapatkan sumber daya eksternal
Bicep menggunakan nama simbolis untuk membuat dependensi implisit pada sumber daya lain. Kata kunci yang ada mereferensikan sumber daya yang disebarkan. Jika sumber daya yang ada berada dalam grup sumber daya yang berbeda dari sumber daya yang ingin Anda sebarkan, sertakan cakupan dan gunakan fungsi resourceGroup .
Dalam contoh ini, aplikasi web disebarkan yang menggunakan paket App Service yang ada dari grup sumber daya lain.
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
}
}
Solusi 4: Dapatkan identitas terkelola dari sumber daya
Jika Anda menyebarkan sumber daya dengan identitas terkelola, Anda harus menunggu hingga sumber daya tersebut disebarkan sebelum mengambil nilai pada identitas terkelola. Gunakan dependensi implisit untuk sumber daya tempat identitas diterapkan. Pendekatan ini memastikan sumber daya dan identitas terkelola disebarkan sebelum Resource Manager menggunakan dependensi.
Anda bisa mendapatkan ID utama dan ID penyewa untuk identitas terkelola yang diterapkan ke komputer virtual. Misalnya, jika sumber daya komputer virtual memiliki nama vm
simbolis , gunakan sintaks berikut:
vm.identity.principalId
vm.identity.tenantId
Solusi 5: Periksa fungsi
Anda dapat menggunakan nama simbolis sumber daya untuk mendapatkan nilai dari sumber daya. Anda dapat mereferensikan akun penyimpanan dalam grup sumber daya yang sama atau grup sumber daya lain menggunakan nama simbolis. Untuk mendapatkan nilai dari sumber daya yang disebarkan, gunakan kata kunci yang ada . Jika sumber daya berada dalam grup sumber daya yang berbeda, gunakan scope
dengan fungsi resourceGroup . Untuk kebanyakan kasus, fungsi referensi tidak diperlukan.
Contoh berikut mereferensikan akun penyimpanan yang ada di grup sumber daya yang berbeda.
resource stgAcct 'Microsoft.Storage/storageAccounts@2022-05-01' existing = {
name: stgname
scope: resourceGroup(rgname)
}
Solusi 6: Setelah menghapus sumber daya
Saat Anda menghapus sumber daya, mungkin ada waktu singkat ketika sumber daya muncul di portal tetapi tidak tersedia. Jika Anda memilih sumber daya, Anda akan mendapatkan kesalahan bahwa sumber daya tidak ditemukan.
Segarkan portal dan sumber daya yang dihapus harus dihapus dari daftar sumber daya yang tersedia. Jika sumber daya yang dihapus terus ditampilkan sebagai tersedia selama lebih dari beberapa menit, hubungi dukungan.