Alıştırma - ARM şablonunuza koşullu mantık ekleme
Ö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.
Visual Studio Code'da azuredeploy.json dosyasının bulunduğu dizinde condition.json adlı bir dosya oluşturun.
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.
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.Ş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.
Visual Studio Code'da azuredeploy.json dosyasının bulunduğu dizinde condition.json adlı bir dosya oluşturun.
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.
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.Ş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.