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:
Portalda oturum açın.
Kaynak grubunun Genel Bakış sayfasından dağıtım geçmişinin bağlantısını seçin.
Gözden geçirmek istediğiniz Dağıtım adı için İlgili olaylar'ı seçin.
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.
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.
Çö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 vm
sembolik 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.
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.