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:

  1. Masuk ke portal.

  2. Dari Gambaran Umum grup sumber daya, pilih tautan untuk riwayat penyebaran.

    Cuplikan layar portal Azure menyoroti tautan ke riwayat penyebaran grup sumber daya di bagian Gambaran Umum.

  3. Untuk Nama penyebaran yang ingin Anda tinjau, pilih Acara terkait.

    Cuplikan layar portal Azure memperlihatkan nama penyebaran dengan tautan Peristiwa terkait disorot dalam riwayat penyebaran.

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

    Cuplikan layar log aktivitas portal Azure menampilkan tiga akun penyimpanan yang disebarkan secara paralel, dengan tanda waktu dan statusnya.

    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.

    Cuplikan layar log aktivitas portal Azure menampilkan tiga akun penyimpanan yang disebarkan secara berurutan, dengan tanda waktu dan statusnya.

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.

Cuplikan layar portal Azure memperlihatkan sumber daya yang dihapus dengan pesan kesalahan 'Tidak ditemukan' di bagian Gambaran Umum sumber daya.

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.