Bagikan melalui


Mengatasi kesalahan untuk sumber daya yang tidak ditemukan

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:

  1. Masuk ke portal.

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

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

  3. Untuk nama penyebaran yang ingin Anda tinjau, pilih Peristiwa terkait.

    Cuplikan layar portal Microsoft Azure yang menunjukkan nama penyebaran dengan tautan Peristiwa terkait yang 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 disebarkan secara paralel. Perhatikan bahwa ketiga penyebaran akun penyimpanan dimulai secara bersamaan.

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

    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.

    Cuplikan layar log aktivitas portal Microsoft Azure yang menampilkan tiga akun penyimpanan yang disebarkan dalam urutan berurutan, dengan stempel 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 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 vmsimbolis , 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.

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

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.