Mengatasi kesalahan untuk sumber daya tidak ditemukan
Artikel ini menjelaskan kesalahan yang Anda lihat saat 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 sumber daya yang tidak ada, Anda akan menerima kesalahan ini.
Gejala
Ada dua kode kesalahan yang menunjukkan sumber daya tidak dapat ditemukan. Kesalahan NotFound
mengembalikan hasil yang mirip dengan:
Code=NotFound;
Message=Cannot find ServerFarm with name exampleplan.
Kesalahan ResourceNotFound
mengembalikan 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 di 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-AzContext atau kumpulan akun 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 Azure App Service, Resource Manager akan 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 simbolik dan properti ID sumber daya.
Misalnya, properti serverFarmId
aplikasi web menggunakan 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 menggunakan dependsOn
untuk membuat dependensi eksplisit.
Hindari pengaturan dependensi yang tidak diperlukan. Dependensi yang tidak diperlukan memperpanjang durasi penyebaran karena sumber daya tidak disebarkan secara paralel. Selain itu, Anda dapat membuat dependensi melingkar yang memblokir penyebaran.
Urutan penyebaran
Ketika Anda melihat masalah ketergantungan, 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 Acara terkait.
Periksa urutan peristiwa untuk setiap sumber daya. Perhatikan status setiap operasi dan stempel waktunya. Misalnya, gambar berikut menunjukkan tiga akun penyimpanan yang digunakan secara paralel. Perhatikan bahwa penyebaran ketiga akun penyimpanan dimulai pada saat yang sama.
Gambar berikutnya menunjukkan tiga akun penyimpanan yang tidak digunakan secara paralel. Akun penyimpanan kedua tergantung pada akun penyimpanan pertama, dan akun penyimpanan ketiga tergantung pada akun penyimpanan kedua. Akun penyimpanan pertama diberi label Dimulai, Diterima, dan Berhasil sebelum akun berikutnya dimulai.
Solusi 3: Dapatkan sumber daya eksternal
Bicep menggunakan nama simbolis untuk membuat dependensi implisit pada sumber daya lain. Kata kunci yang ada merujuk pada sumber daya yang disebarkan. Jika sumber daya yang ada berada dalam grup sumber daya yang berbeda dari sumber daya yang ingin Anda terapkan, sertakan cakupan dan gunakan fungsi resourceGroup.
Dalam contoh ini, aplikasi web disebarkan menggunakan paket App Service yang sudah 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 disebarkan. 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 disebarkan ke mesin virtual. Misalnya, jika sumber daya mesin virtual memiliki nama simbolis vm
, 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 di 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 sebagian besar kasus, fungsi referensi tidak diperlukan.
Contoh berikut ini mereferensikan akun penyimpanan yang ada dalam 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 akan ada waktu tunggu singkat yang memunculkan sumber daya di portal dengan status tidak tersedia. Jika Anda memilih sumber daya, Anda akan mendapatkan kesalahan bahwa sumber daya tersebut Tidak ditemukan.
Refresh portal dan sumber daya yang dihapus harus dihilangkan dari daftar sumber daya yang tersedia. Jika sumber daya yang dihapus tetap ditampilkan sebagai tersedia selama lebih dari beberapa menit, hubungi dukungan.