Bağımlılıkları belirterek dağıtım sırasını denetleme

Tamamlandı

Azure'a bir dizi kaynak dağıtmak istediğinizi ancak bunun için başka bir kaynağın dağıtılmış olması şartını aradığınızı düşünelim. Bunun için bir kaynağın başka bir kaynağa bağımlı olduğunu şablonda belirtmeniz gerekir.

Göz önünde bulundurmanız gereken noktalar şunlardır:

  • Başka bir şeyin dağıtılabilmesi için bir şeyin var olması gerekir.

    Örneğin, sanal makineye yüklemeniz gereken gizli dizileri getirmek için Azure Key Vault’taki bir anahtar kasasına ihtiyaç duyduğunuzu varsayalım. Aynı şablon içinde anahtar kasasını dağıtırken aynı zamanda içindeki gizli diziyi de dağıtabilirsiniz. Ancak anahtar kasasının gizli diziden önce dağıtılması gerekir. Bu nedenle, gizli dizi, anahtar kasasının var olmasına bağlıdır. Aralarındaki bağımlılık nedeniyle anahtar kasası ve gizli dizi, önce anahtar kasası olacak şekilde sırayla dağıtılır.

  • Azure Resource Manager ile yürütülen sürece güvenebilir miyim?

    Başka bir kaynağın var olup olmadığını denetleme konusunda aklınıza gelen ilk çözüm, Azure PowerShell’i veya Azure CLI’yı kullanmak olabilir. Resource Manager'ın yerleşik bir kez etkili olma özelliği sayesinde daha otomatik bir çözüm sunulur. Resource Manager, şablonda tanımlanmış bir kaynağın bulutta var olduğunu tespit ettiğinde onu yeniden dağıtmaz. Bunun geçerli bir yaklaşım olabilmesi için Resource Manager'ın denetimi nasıl gerçekleştirdiğini anlamanız gerekir.

    Dekont

    Mevcut kaynak kimlikleri, bir şablonda tanımlı bir şeyle eşleşiyorsa Azure Resource Manager, özellikleri karşılaştırır. Özellikler tam olarak eşleşiyorsa, kaynak tek başına bırakılır. Özellikler eşleşmiyorsa altyapı gerekli değişiklikleri yapar ve büyük olasılıkla kaynağı yeniden dağıtır.

  • Kaynakları başka bir kaynağın içine yerleştirebilirsiniz.

    Azure Resource Manager şablonlarınızda kaynakları başka bir kaynağın içine yerleştirebilirsiniz. Bu sayede iç içe yerleştirilmiş kaynaklarla üst kaynak arasında bir ilişki tanımlayabilirsiniz.

Azure kaynakları arasında bağımlılık nasıl tanımlanır?

Depolama hesabı gibi bir kaynağın ona bağımlı bir kaynaktan önce dağıtıldığından emin olmayı istediğinizi düşünelim. Bağımlı depolama hesabının var olup olmadığını nasıl denetleyebilirsiniz?

Depolama hesabının var olup olmadığını denetleme amacıyla Azure PowerShell veya Azure CLI komutlarını çalıştırarak dağıtımınızın geçerli durumunu inceleyerek başlayabilirsiniz. Ayrıca bu denetimi gerçekleştirmenizi sağlayan bir Resource Manager yapısı olup olmadığını da denetleyebilirsiniz.

Resource Manager’da bulunan dependsOn adlı yapı, bu işlemi gerçekleştirmenizi sağlar. Bu yapıyı kullanarak kaynakların, belirtilen diğer kaynağın dağıtımının tamamlanmasını beklemesini sağlayabilirsiniz.

dependsOn yapısı nedir?

Bu yapı, kaynaklar arasındaki dağıtım sırasını tanımlamanızı sağlayan bir anahtar-değer çiftidir. Bazen bir kaynağın başka bir kaynaktan önce oluşturulduğundan emin olmanız gerekir. Örneğin, bir veritabanının uygulamadan önce mevcut olması, bir gizli dizi kaynağının anahtar kasasından önce mevcut olması gerekebilir.

dependsOn yapısını öncelikle başka kaynakların dağıtılmasına gerektiren bir kaynağa yerleştirin. Bir kaynak, birden fazla kaynağa bağımlı olabilir. Bu nedenle yapıya değer olarak bağımlı kaynakların listesini geçirmeniz gerekir.

Aşağıdaki örnekte bu tür bir bağımlılığı ARM şablonunuzun içinde JSON olarak nasıl ifade edebileceğiniz gösterilmiştir:

"resources": [
  {
    "name": "<name of resource that needs to exist first>"
  },
  {
    "name": "someResource",
    "dependsOn": [
      "<name of resource that needs to exist first>"
    ]
  }
]

Bu örnekte kaynağın bağımlı olduğu diğer kaynağı belirtmek için kaynağın adı kullanılmıştır. Ancak aynı adı kullanan birden fazla kaynak olabilir. Bu karşılaştırmanın istediğiniz sonucu vermesi için resourceId() yapısını kullanarak benzersiz kaynak tanımlayıcısını alabilirsiniz:

"dependsOn": [
  "resourceId('Microsoft.Network/loadBalancers', variables('nameOfLoadBalancer')))"
]

Yukarıdaki JSON kodu ad alanını, türü ve değişken adını birleştirerek benzersiz bir kimlik oluşturur. Bu sayede doğru bağımlı kaynağın belirtildiğinden emin olabilirsiniz.

Alt kaynak nedir?

Alt kaynak yalnızca başka bir kaynağın bağlamında var olan bir kaynaktır. Buna örnek olarak var olması bir sanal makineye bağlı olan sanal makine uzantıları verilebilir.

Şablon içindeki üst-alt ilişkisini gösteren kod genellikle şöyle görünür:

"resources": [
  {
    "name": "parent-resource",
    "resources": [{
      "name": "child-resource"
    }]
  }
]

Bu üst-alt bağımlılığı, otomatik olarak üst öğenin alt öğeden önce dağıtıldığı bir bağımlılık oluşturmaz. Bağımlılığı açıkça belirtmeniz gerekir.

Bu nedenle, böyle bir ilişkiyi ifade ederken aşağıdaki gibi bir dependsOn yapı eklediğinizden emin olun:

"resources": [
  {
    "name": "parent-resource",
    "resources": [{
      "dependsOn": ["parent-resource"],
      "name": "child resource"
    }]
  }
]