Kaynak bulunamadı hatalarını düzeltme

Bu makalede, işlem sırasında kaynak bulunamasa da gördüğünüz hata açıklanmıştır. Genellikle, kaynakları dağıtırken bu hatayı alırsınız. Ayrıca, yönetim görevleri yaparken ve gerekli Azure Resource Manager bulamıyorum hatasını da görüyorsunuz. Örneğin, mevcut olmayan bir kaynağa etiket eklemeye çalışmanız bu hatayı alırsınız.

Belirti

Kaynağın buluna olmadığını gösteren iki hata kodu vardır. NotFound hatası aşağıdakine benzer bir sonuç döndürür:

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

ResourceNotFound hatası aşağıdakine 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 bir kaynağın özelliklerini alasınız ama aboneliklerinize kaynağı bulamıyorum.

Çözüm 1 - Kaynak özelliklerini denetleme

Bir yönetim görevi yaparken bu hatayı alırsanız kaynak için sağ istediğiniz değerleri kontrol edin. Kontrol etmek için şu üç değer kullanılır:

  • Kaynak adı
  • Kaynak grubu adı
  • Abonelik

PowerShell veya Azure CLI kullanıyorsanız, komutu kaynağı içeren abonelikte çalıştırıp çalıştırmama konusunda bilgi edinin. Set-AzContext veya az account set ile aboneliği değiştirebilirsiniz. Çoğu komut, geçerli bağlamdan farklı bir abonelik belirtmenize olanak sağlayan bir abonelik parametresi de sağlar.

Özellikleri doğrulama konusunda sorun varsa portalda oturum açın. Kullanmaya çalıştığınız kaynağı bulun ve kaynak adını, kaynak grubunu ve aboneliği inceler.

Çözüm 2 - bağımlılıkları ayarlama

Şablon dağıtırken bu hatayı alırsanız bağımlılık eklemeniz gerekir. Resource Manager kaynakları paralel olarak oluşturarak dağıtımı en iyi duruma getirmenizi sağlar. Bir kaynağın başka bir kaynağın ardından dağıtılması gerekirse, şablonunda dependsOn öğesini kullanabilirsiniz. Örneğin, bir web uygulaması dağıtırken, App Service planı mevcut olması gerekir. Web uygulamasının App Service planına bağlı olduğunu Resource Manager iki kaynağı da aynı anda oluşturur. Web uygulamasında özellik ayarlamaya App Service için henüz mevcut olmadığını belirten bir hata alırsınız. Web uygulamasında bağımlılığı ayarerek bu hatayı önlersiniz.

{
  "type": "Microsoft.Web/sites",
  "apiVersion": "2015-08-01",
  "dependsOn": [
    "[variables('hostingPlanName')]"
  ],
  ...
}

Ancak, gerekli olmayan bağımlılıkları ayarlamayı önlemek istiyorsanız. Gereksiz bağımlılıklar olduğunda, birbirine bağımlı olmayan kaynakların paralel olarak dağıtılmasını engelerek dağıtım süresini uzatabilirsiniz. Ayrıca, dağıtımı engellemek için döngüsel bağımlılıklar oluşturabilirsiniz. Başvuru işlevi ve list* işlevleri, kaynak aynı şablonda dağıtıldığında ve adına (kaynak kimliği değil) başvurıldığında başvurulan kaynağa örtülü bir bağımlılık oluşturur. Bu nedenle dependsOn özelliğinde belirtilen bağımlılıklardan daha fazla bağımlılığınız olabilir. resourceId işlevi, örtülü bir bağımlılık oluşturmaz veya kaynağın mevcut olduğunu doğrulamaz. Başvuru işlevi ve liste* işlevleri, kaynağa kaynak kimliği tarafından başvurularak örtülü bir bağımlılık oluşturmaz. Örtülü bağımlılık oluşturmak için, aynı şablonda dağıtılan kaynağın adını girin.

Bağımlılık sorunlarını gördüğünüzde, kaynak dağıtımı sırasıyla ilgili içgörü elde etmek gerekir. Dağıtım işlemlerinin sıralamalarını görüntülemek için:

  1. Kaynak grubunuz için dağıtım geçmişini seçin.

    dağıtım geçmişini seçme

  2. Tarihten bir dağıtım seçin ve Ardından Olaylar'ı seçin.

    dağıtım olaylarını seçme

  3. Her kaynağın olay dizisini inceleme. Her bir işlem durumuna dikkat etmek. Örneğin, aşağıdaki görüntüde paralel olarak dağıtılan üç depolama hesabı yer almaktadır. Üç depolama hesabının aynı anda başlatıldıklarına dikkat olun.

    paralel dağıtım

    Sonraki görüntüde paralel olarak dağıtılan üç depolama hesabı yer almaktadır. İkinci depolama hesabı birinci depolama hesabına, üçüncü depolama hesabı ise ikinci depolama hesabına bağlıdır. İlk depolama hesabı başlatıldı, kabul edildi ve sonraki başlamadan önce tamamlandı.

    sıralı dağıtım

Çözüm 3 - Dış kaynak al

Şablon dağıtırken ve farklı bir abonelikte veya kaynak grubunda var olan bir kaynağı alamanız gerekirken resourceId işlevini kullanın. Bu işlev, kaynağın tam adını almak için döndürür.

resourceId işlevinde abonelik ve kaynak grubu parametreleri isteğe bağlıdır. Bunları sağlayamazsanız, bunlar varsayılan olarak geçerli abonelik ve kaynak grubu olur. Farklı bir kaynak grubunda veya abonelikte bulunan bir kaynakla çalışırken, bu değerleri sağlarken emin olun.

Aşağıdaki örnek, farklı bir kaynak grubunda mevcut olan bir kaynağın kaynak kimliğini alır.

"properties": {
  "name": "[parameters('siteName')]",
  "serverFarmId": "[resourceId('plangroup', 'Microsoft.Web/serverfarms', parameters('hostingPlanName'))]"
}

Çözüm 4 - Yönetilen kimliği kaynaktan al

Örtülü olarak yönetilen kimlik oluşturan bir kaynak dağıtıyorsanız, yönetilen kimlikte değerleri almadan önce bu kaynağın dağıtılmasını beklemelisiniz. Yönetilen kimlik adını başvuru işlevine iletirsiniz, Resource Manager ve kimlik dağıtıldıktan sonra başvuru çözümlemeye çalışır. Bunun yerine, kimliğin uygulandığı kaynağın adını girin. Bu yaklaşım, başvuru işlevini çözümlemeden önce kaynağın ve yönetilen Resource Manager dağıtılmasını sağlar.

Başvuru işlevinde, yönetilen Full kimlik de dahil olmak üzere tüm özellikleri almak için kullanın.

Desen şöyledir:

"[reference(resourceId(<resource-provider-namespace>, <resource-name>), <API-version>, 'Full').Identity.propertyName]"

Önemli

Şu deseni kullanmayın:

"[reference(concat(resourceId(<resource-provider-namespace>, <resource-name>),'/providers/Microsoft.ManagedIdentity/Identities/default'),<API-version>).principalId]"

Şablonunuz başarısız olur.

Örneğin, bir sanal makineye uygulanan yönetilen kimliğin asıl kimliğini almak için şunları kullanın:

"[reference(resourceId('Microsoft.Compute/virtualMachines', variables('vmName')),'2019-12-01', 'Full').identity.principalId]",

Veya bir sanal makine ölçek kümesine uygulanan yönetilen kimliğin kiracı kimliğini almak için şunları kullanın:

"[reference(resourceId('Microsoft.Compute/virtualMachineScaleSets',  variables('vmNodeType0Name')), 2019-12-01, 'Full').Identity.tenantId]"

Çözüm 5 - işlevleri denetleme

Şablon dağıtırken başvuru veya listKeys işlevlerini kullanan ifadeleri bulun. Sizin sağlarsınız değerleri kaynağın aynı şablonda, kaynak grubunda ve abonelikte olup olmadığı temel alınarak değişir. Senaryo için gerekli parametre değerlerini s sağlamayı kontrol edin. Kaynak farklı bir kaynak grubunda ise tam kaynak kimliğini girin. Örneğin, başka bir kaynak grubunda yer alan bir depolama hesabına başvuru yapmak için şunları kullanın:

"[reference(resourceId('exampleResourceGroup', 'Microsoft.Storage/storageAccounts', 'myStorage'), '2017-06-01')]"

Çözüm 6 - kaynağı sildikten sonra

Bir kaynağı silebilirsiniz; kaynağın portalda hala görünür olduğu ancak gerçekte kullanılabilir olmadığınız kısa bir süre olabilir. Kaynağı seçersiniz, kaynağın buluna olmadığını söyleyen bir hata alırsınız. En son görünümü almak için portalı yenileyin.

Sorun kısa bir beklemeden sonra devam ederse dehaya başvurun.