Alıştırma - ARM şablonunuza koşullu mantık ekleme

Tamamlandı

Önceki alıştırmalarda Linux sanal makineleriyle çalıştınız. Burada biraz vites yükseltip depolama hesaplarını yönetmeye odaklanacaksınız.

Dağıtım yapmanız gereken üç ortamınız olduğunu varsayalım: Geliştirme, Hazırlama ve Üretim.

  • Dev ortamı, uygulamanızın tüm bileşenlerini bir araya getirmeniz gereken ilk yerdir. Bu ortamda web sunucuları, bir yük dengeleyici ve bir veritabanı bulunabilir.
  • Staging ortamı, yeni uygulama özelliklerinin son kullanıcılarınıza sunulmadan önce son kez test edildiği ortamdır.
  • Production ortamı, son kullanıcılarınızın uygulamanıza eriştiği ortamdır.

Dev ortamından Production ortamına geçerken ek altyapıya ihtiyacınız olur. Örneğin Production ortamında, önceki ortamlarda ihtiyaç duymadığınız ek depolama hesabına ihtiyacınız olur.

Burada depolama hesabının sağlanacağı zamanı denetlemek için bir koşul kullanacaksınız. Bu sayede aynı ARM şablonunu tüm altyapı ortamlarınız için kullanabileceksiniz.

ARM şablonunu oluşturma

Bu aşamada depolama hesabı kaynağını tanımlayan bir Azure Resource Manager (ARM) şablonu oluşturacaksınız.

Şablon ayrıca iki parametre de tanımlar:

  • environment: Geçerli ortamın adı.
  • storageAccountName: Depolama hesabının adı.

environment şu üç değerden birine sahip olabilir: dev, staging veya production. Koşul yalnızca environment değeri production olduğunda depolama hesabını sağlar.

  1. Visual Studio Code'da azuredeploy.json dosyasının bulunduğu dizinde condition.json adlı bir dosya oluşturun.

  2. Aşağıdaki içeriği condition.json dosyasına ekleyin:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "environment": {
          "type": "string",
          "defaultValue": "dev",
          "allowedValues": [
            "dev",
            "staging",
            "production"
          ],
          "metadata": {
            "description": "a value that represents the current environment"
          }
        },
        "storageAccountName": {
          "type": "string",
          "metadata": {
            "description": "a name for the account"
          }
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "condition": "[equals(parameters('environment'),'production')]",
          "name": "[parameters('storageAccountName')]",
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2019-06-01",
          "tags": {
            "displayName": "[parameters('storageAccountName')]"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "Premium_LRS",
            "tier": "Premium"
          }
        }
      ],
      "outputs": {}
    }
    

Burada PowerShell’i ve Az modülünü kullanarak condition yapısı içeren bir ARM şablonu dağıtacaksınız.

Dev ortamını sağlama

Burada, ARM şablonunu Dev ortamına dağıtacaksınız. Bunu, environment şablon parametresini dev şeklinde ayarlayarak yaparsınız.

Koşul, depolama hesabını yalnızca environment değeri production olduğunda sağladığından şablonun depolama hesabını sağlamaması beklenir. Başka bir deyişle dağıtımda sıfır kaynak olması beklenir.

  1. Depolama hesabı adını tutan bir PowerShell değişkeni oluşturun.

    $STORAGE_ACCT_NAME="tailwindsa"+ (Get-Random -COUNT 1 -Maximum 9999999 )
    

    Depolama hesabı adları benzersiz olmalıdır. Get-Random bölümü, depolama hesabı adının sonuna rastgele bir sayı eklenmesini sağlar.

  2. Şablonu Geliştirme ortamına dağıtmak için aşağıdaki New-AzResourceGroupDeployment komutu çalıştırın:

    New-AzResourceGroupDeployment `
      -TemplateFile "./condition.json" `
      -storageAccountName $STORAGE_ACCT_NAME `
      -environment dev
    

Dev dağıtımını doğrulama

Şablonun depolama hesabını sağlamamasının beklendiğini unutmayın.

Bu durumu doğrulamak için Get-AzStorageAccount komutunu çalıştırarak depolama hesabı adının kullanımda olup olmadığını denetleyin.

Get-AzStorageAccount komutunu çalıştırın:

Get-AzStorageAccount -Name $STORAGE_ACCT_NAME -ResourceGroupName <rgn>sandbox resource group</rgn>

Çıkışınız aşağıdakine benzer:

Get-AzStorageAccount: The Resource 'Microsoft.Storage/storageAccounts/tailwindsa4736629' under resource group '<rgn>name of resource group</rgn>' was not found. For more details please go to https://aka.ms/ARMResourceNotFoundFix

Bu değerler, depolama hesabının henüz sağlanmadığını belirtir. Henüz Üretim ortamına dağıtım yapmadığınızdan beklediğiniz sonuç da bu olmalıdır.

Production ortamını sağlama

Burada ARM şablonunu Production ortamına dağıtacaksınız. Bunun için Dev ortamında yaptığınız işlemlere benzer işlemler yapacaksınız.

Hatırlatmak gerekirse koşul, şablonunuzda aşağıdaki gibi görünür:

"condition": "[equals(parameters('environment'),'production')]"

Bu koşulu tetiklemek için environment şablon parametresini production olarak ayarlarsınız.

Şablonu Üretim ortamına dağıtmak için aşağıdaki New-AzResourceGroupDeployment komutu çalıştırın:

New-AzResourceGroupDeployment `
  -TemplateFile "./condition.json" `
  -storageAccountName $STORAGE_ACCT_NAME `
  -environment production

Production dağıtımını doğrulama

Bu kez şablonun depolama hesabını sağlamış olması beklenir.

Bu durumu doğrulamak için yine Get-AzStorageAccount komutunu çalıştırarak depolama hesabı adının kullanımda olduğunu doğrulayın.

Aşağıdaki Get-AzStorageAccount komutunu çalıştırın:

Get-AzStorageAccount -Name $STORAGE_ACCT_NAME -ResourceGroupName <rgn>sandbox resource group</rgn>

Bu kez farklı bir çıkışla karşılaşacaksınız. Hata iletisi yerine depolama hesabı kaynağınızla ilgili bilgilerin yer aldığı bir tablo görüntülenir:

Çıkışınız aşağıdakine benzer:

Location Name              Type                              Kind
-------- ----              ----                              ----
westus   tailwindsa4736629 Microsoft.Storage/storageAccounts StorageV2

Bu değerler, depolama hesabının beklendiği gibi sağlanmış olduğunu ifade eder.

Bu basit bir örnek olsa da koşul tabanlı dağıtımın nasıl yapılacağını net bir şekilde göstermektedir.

Normal şartlarda Dev, Staging ve Production ortamlarınızda işlem, ağ ve depolama gereksinimlerinizi karşılayacak ek Azure kaynakları bulunur. Tek bir birim şeklinde sağlanabilmesi ve kullanılabilmesi için her ortamın kendi kaynak grubu aracılığıyla yönetilmesi gerekir.

ARM şablonunu oluşturma

Bu aşamada depolama hesabı kaynağını tanımlayan bir Azure Resource Manager (ARM) şablonu oluşturacaksınız.

Şablon ayrıca iki parametre de tanımlar:

  • environment: Geçerli ortamın adı.
  • storageAccountName: Depolama hesabının adı.

environment şu üç değerden birine sahip olabilir: dev, staging veya production. Koşul yalnızca environment değeri production olduğunda depolama hesabını sağlar.

  1. Visual Studio Code'da azuredeploy.json dosyasının bulunduğu dizinde condition.json adlı bir dosya oluşturun.

  2. Aşağıdaki içeriği condition.json dosyasına ekleyin:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "environment": {
          "type": "string",
          "defaultValue": "dev",
          "allowedValues": [
            "dev",
            "staging",
            "production"
          ],
          "metadata": {
            "description": "a value that represents the current environment"
          }
        },
        "storageAccountName": {
          "type": "string",
          "metadata": {
            "description": "a name for the account"
          }
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "condition": "[equals(parameters('environment'),'production')]",
          "name": "[parameters('storageAccountName')]",
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2019-06-01",
          "tags": {
            "displayName": "[parameters('storageAccountName')]"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "Premium_LRS",
            "tier": "Premium"
          }
        }
      ],
      "outputs": {}
    }
    

Dev ortamını sağlama

Burada, ARM şablonunu Dev ortamına dağıtacaksınız. Bunu, environment şablon parametresini dev şeklinde ayarlayarak yaparsınız.

Koşul, depolama hesabını yalnızca environment değeri production olduğunda sağladığından şablonun depolama hesabını sağlamaması beklenir. Başka bir deyişle dağıtımda sıfır kaynak olması beklenir.

  1. Depolama hesabı adını tutan bir Bash değişkeni oluşturun.

    STORAGE_ACCT_NAME=tailwindsa$RANDOM
    

    Depolama hesabı adları benzersiz olmalıdır. $RANDOM bölümü, depolama hesabı adının sonuna rastgele bir sayı eklenmesini sağlar.

  2. Şablonu Geliştirme ortamına dağıtmak için aşağıdaki az deployment group create komutu çalıştırın:

    az deployment group create \
      --template-file condition.json \
      --parameters storageAccountName=$STORAGE_ACCT_NAME environment=dev
    

Dev dağıtımını doğrulama

Şablonun depolama hesabını sağlamamasının beklendiğini unutmayın.

Bu durumu doğrulamak için az storage account check-name komutunu çalıştırarak depolama hesabı adının kullanımda olup olmadığını denetleyin.

Aşağıdaki az storage account check-name komutunu çalıştırın:

az storage account check-name --name $STORAGE_ACCT_NAME

Şunu görürsünüz:

{
  "message": null,
  "nameAvailable": true,
  "reason": null
}

nameAvailable değeri true şeklindedir ve bu da depolama hesabı adının kullanılabilir durumda olduğunu, dolayısıyla henüz sağlanmadığını belirtir. Henüz Üretim ortamına dağıtım yapmadığınızdan beklediğiniz sonuç da bu olmalıdır.

Production ortamını sağlama

Burada ARM şablonunu Geliştirme ortamı için yaptığınız gibi Üretim ortamına dağıtacaksınız.

Hatırlatmak gerekirse koşul, şablonunuzda aşağıdaki gibi görünür:

"condition": "[equals(parameters('environment'),'production')]"

Bu koşulu tetiklemek için environment şablon parametresini production olarak ayarlarsınız.

Şablonu Üretim ortamına dağıtmak için aşağıdaki az deployment group create komutu çalıştırın:

az deployment group create \
  --template-file condition.json \
  --parameters storageAccountName=$STORAGE_ACCT_NAME environment=production

Production dağıtımını doğrulama

Bu kez şablonun depolama hesabını sağlamış olması beklenir.

Bu durumu doğrulamak için yine az storage account check-name komutunu çalıştırarak depolama hesabı adının kullanımda olduğunu doğrulayın.

Aşağıdaki az storage account check-name komutunu çalıştırın:

az storage account check-name --name $STORAGE_ACCT_NAME

Çıkışınız aşağıdakine benzer:

{
  "message": "The storage account named tailwindsa32100 is already taken.",
  "nameAvailable": false,
  "reason": "AlreadyExists"
}

Bu değerler, depolama hesabının beklendiği gibi sağlanmış olduğunu ifade eder.

Bu basit bir örnek olsa da koşul tabanlı dağıtımın nasıl yapılacağını net bir şekilde göstermektedir.

Normal şartlarda Dev, Staging ve Production ortamlarınızda işlem, ağ ve depolama gereksinimlerinizi karşılayacak ek Azure kaynakları bulunur. Tek bir birim şeklinde sağlanabilmesi ve kullanılabilmesi için her ortamın kendi kaynak grubu aracılığıyla yönetilmesi gerekir.