Kaynak bulunamadı hatalarını düzeltme

Bu makalede, bir işlem sırasında kaynak bulunamadığında gördüğünüz hata açıklanır. Genellikle bir Bicep dosyası veya Azure Resource Manager şablonu (ARM şablonu) ile kaynakları dağıtırken bu hatayı görürsünüz. Ayrıca, yönetim görevlerini yaparken ve Azure Resource Manager gerekli kaynağı bulamadıklarında da bu hatayı görürsünüz. Örneğin, mevcut olmayan bir kaynağa etiket eklemeye çalışırsanız bu hatayı alırsınız.

Belirtiler

Kaynağın bulunamadığını belirten iki hata kodu vardır. Hata şuna NotFound benzer bir sonuç döndürür:

Code=NotFound;
Message=Cannot find ServerFarm with name exampleplan.

Hata şuna ResourceNotFound benzer bir sonuç döndürür:

Code=ResourceNotFound;
Message=The Resource 'Microsoft.Storage/storageAccounts/{storage name}' under resource
group {resource group name} was not found.

Nedeni

Resource Manager'ın bir kaynağın özelliklerini alması gerekir, ancak kaynağı aboneliğinizde bulamıyor.

Çözüm 1: Kaynak özelliklerini denetleme

Yönetim görevi gerçekleştirirken bu hatayı aldığınızda, kaynak için sağladığınız değerleri denetleyin. Şu üç değer denetlenmelidir:

  • Kaynak adı
  • Kaynak grubu adı
  • Abonelik

PowerShell veya Azure CLI kullanıyorsanız, kaynağı içeren abonelikte komut çalıştırıp çalıştırmadığınızı denetleyin. Aboneliği Set-AzContext veya az account set ile değiştirebilirsiniz. Birçok komutta, geçerli bağlamdan farklı bir abonelik belirtmenize olanak tanıyan abonelik parametresi sağlanır.

Özellikleri doğrulayamazsanız Microsoft Azure portalında oturum açın. Kullanmaya çalıştığınız kaynağı bulun ve kaynak adını, kaynak grubunu ve aboneliği inceleyin.

Çözüm 2: Bağımlılıkları ayarlama

Şablon dağıtırken bu hatayı alırsanız bir bağımlılık eklemeniz gerekebilir. Resource Manager, mümkün olduğunda kaynakları paralel olarak oluşturarak dağıtımları iyileştirir.

Örneğin, bir web uygulaması dağıttığınızda App Service planının mevcut olması gerekir. Web uygulamasının App Service planına bağlı olduğunu belirtmediyseniz, Resource Manager her iki kaynağı da aynı anda oluşturur. Web uygulaması, App Service planı kaynağının henüz mevcut olmadığından bulunamadığını belirten bir hatayla başarısız oluyor. Web uygulamasında bir bağımlılık ayarlayarak bu hatayı önlersiniz.

resourceId işlevi yerine örtük bir bağımlılık kullanın. Bağımlılık, kaynağın sembolik adı ve KIMLIK özelliği kullanılarak oluşturulur.

Örneğin, web uygulamasının serverFarmId özelliği App Service planında bağımlılık oluşturmak için kullanır servicePlan.id .

resource webApp 'Microsoft.Web/sites@2022-03-01' = {
  properties: {
    serverFarmId: servicePlan.id
  }
}

resource servicePlan 'Microsoft.Web/serverfarms@2022-03-01' = {
  name: hostingPlanName
  ...

Çoğu dağıtımda, açık bir bağımlılık oluşturmak için kullanılması dependsOn gerekmez.

Gerekli olmayan bağımlılıkları ayarlamaktan kaçının. Kaynaklar paralel olarak dağıtılmadığından gereksiz bağımlılıklar dağıtımın süresini uzatır. Ayrıca dağıtımı engelleyen döngüsel bağımlılıklar oluşturabilirsiniz.

Dağıtım sırası

Bağımlılık sorunları gördüğünüzde, kaynak dağıtımının sırası hakkında içgörü edinmeniz gerekir. Dağıtım işlemlerinin sırasını görüntülemek için portalı kullanabilirsiniz:

  1. Portalda oturum açın.

  2. Kaynak grubunun Genel Bakış sayfasından dağıtım geçmişinin bağlantısını seçin.

    Genel Bakış bölümünde kaynak grubunun dağıtım geçmişinin bağlantısını vurgulayan Azure portalı ekran görüntüsü.

  3. Gözden geçirmek istediğiniz Dağıtım adı için İlgili olaylar'ı seçin.

    Dağıtım geçmişinde İlgili olaylar bağlantısının vurgulandığı dağıtım adını gösteren Azure portalı ekran görüntüsü.

  4. Her kaynak için olay sırasını inceleyin. Her işlemin durumuna ve zaman damgasına dikkat edin. Örneğin, aşağıdaki görüntüde paralel olarak dağıtılan üç depolama hesabı gösterilmektedir. Üç depolama hesabı dağıtımının aynı anda başladığına dikkat edin.

    Zaman damgaları ve durumlarıyla birlikte paralel olarak dağıtılan üç depolama hesabını görüntüleyen Azure portalı etkinlik günlüğünün ekran görüntüsü.

    Sonraki görüntüde paralel olarak dağıtılmamış üç depolama hesabı gösterilmektedir. İkinci depolama hesabı ilk depolama hesabına, üçüncü depolama hesabı ise ikinci depolama hesabına bağlıdır. İlk depolama hesabı, bir sonraki başlatılmadan önce Başlatıldı, Kabul Edildi ve Başarılı olarak etiketlenmiştir.

    Zaman damgaları ve durumlarıyla birlikte sıralı olarak dağıtılan üç depolama hesabını gösteren Azure portalı etkinlik günlüğünün ekran görüntüsü.

Çözüm 3: Dış kaynak alma

Bicep, başka bir kaynakta örtük bağımlılık oluşturmak için sembolik adı kullanır. Mevcut anahtar sözcük dağıtılan bir kaynağa başvurur. Mevcut bir kaynak dağıtmak istediğiniz kaynaktan farklı bir kaynak grubundaysa kapsamı dahil edin ve resourceGroup işlevini kullanın.

Bu örnekte, başka bir kaynak grubundaki mevcut App Service planını kullanan bir web uygulaması dağıtılır.

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
  }
}

Çözüm 4: Kaynaktan yönetilen kimlik alma

Yönetilen kimliğe sahip bir kaynak dağıtıyorsanız, yönetilen kimlik üzerindeki değerleri almadan önce kaynağın dağıtılması için beklemeniz gerekir. Kimliğin uygulandığı kaynak için örtük bir bağımlılık kullanın. Bu yaklaşım, Resource Manager bağımlılığı kullanmadan önce kaynağın ve yönetilen kimliğin dağıtılmasını sağlar.

Sanal makineye uygulanan yönetilen kimliğin asıl kimliğini ve kiracı kimliğini alabilirsiniz. Örneğin, bir sanal makine kaynağının vmsembolik adı varsa aşağıdaki söz dizimini kullanın:

vm.identity.principalId

vm.identity.tenantId

Çözüm 5: İşlevleri denetleme

Kaynaktan değer almak için kaynağın sembolik adını kullanabilirsiniz. Sembolik bir ad kullanarak aynı kaynak grubundaki veya başka bir kaynak grubundaki bir depolama hesabına başvurabilirsiniz. Dağıtılan bir kaynaktan değer almak için mevcut anahtar sözcüğünü kullanın. Kaynak farklı bir kaynak grubundaysa resourceGroup işleviyle kullanınscope. Çoğu durumda başvuru işlevi gerekli değildir.

Aşağıdaki örnek, farklı bir kaynak grubundaki mevcut depolama hesabına başvurur.

resource stgAcct 'Microsoft.Storage/storageAccounts@2022-05-01' existing = {
  name: stgname
  scope: resourceGroup(rgname)
}

Çözüm 6: Kaynağı sildikten sonra

Bir kaynağı sildiğinizde, kaynağın portalda göründüğü ancak kullanılamayacağı kısa bir süre olabilir. Kaynağı seçerseniz, kaynağın bulunamadı olduğuna ilişkin bir hata alırsınız.

Kaynağın Genel Bakış bölümünde 'Bulunamadı' hata iletisini içeren silinmiş bir kaynağı gösteren Azure portalı ekran görüntüsü.

Portalı yenilediğinizde silinen kaynak kullanılabilir kaynaklar listenizden kaldırılmalıdır. Silinen bir kaynak birkaç dakikadan daha uzun süre kullanılabilir olarak gösterilmeye devam ederse desteğe başvurun.