Latihan - Tambahkan logika kondisional ke templat ARM Anda
Dalam latihan sebelumnya, Anda bekerja dengan komputer virtual Linux. Di sini, Anda sedikit beralih dan fokus pada pengelolaan akun penyimpanan.
Misalkan Anda memiliki tiga lingkungan yang perlu Anda sebarkan: Pengembangan, Pentahapan, dan Produksi.
- Lingkungan Pengembangan adalah tempat pertama untuk mengumpulkan semua yang dibutuhkan aplikasi Anda. Lingkungan ini dapat mencakup server web, penyeimbang beban, dan database.
- Lingkungan Pentahapan adalah tempat pengujian akhir terjadi sebelum fitur aplikasi baru dirilis ke pengguna akhir Anda.
- Lingkungan Produksi adalah tempat pengguna akhir mengakses aplikasi Anda.
Ketika Anda pindah dari Pengembangan ke Produksi, Anda memerlukan infrastruktur tambahan. Contohnya, di Produksi, Anda memerlukan akun penyimpanan tambahan yang tidak Anda perlukan di lingkungan sebelumnya.
Di sini, Anda menggunakan kondisi untuk mengontrol waktu akun penyimpanan disediakan. Melakukannya mengaktifkan Anda untuk mendukung setiap lingkungan infrastruktur Anda dari templat ARM yang sama.
Buat templat ARM
Di sini, Anda membuat templat Azure Resource Manager (ARM) yang menentukan sumber daya akun penyimpanan.
Templat juga menentukan dua parameter:
environment
: nama lingkungan saat ini.storageAccountName
: nama untuk akun penyimpanan.
environment
dapat memiliki salah satu dari tiga nilai: dev
, staging
, atau production
. Kondisi menyediakan akun penyimpanan hanya ketika environment
sama dengan production
.
Di Visual Studio Code, buat file bernama condition.json di direktori yang sama yang memuat azuredeploy.json.
Tambahkan konten ini ke condition.json:
{ "$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": {} }
Di sini Anda akan menyebarkan templat ARM, dengan konsep kondisi, dengan menggunakan PowerShell dan modul Az.
Sediakan lingkungan Pengembangan
Di sini, Anda menyebarkan templat ARM ke lingkungan Pengembangan. Anda melakukannya dengan mengatur parameter templat environment
ke dev
.
Karena kondisi menyediakan akun penyimpanan hanya ketika environment
sama dengan production
, Anda mengharapkan templat untuk tidak menyediakan akun penyimpanan. Dengan kata lain, Anda mengharapkan penyebaran yang tidak memuat sumber daya.
Buat variabel PowerShell yang menyimpan nama akun penyimpanan.
$STORAGE_ACCT_NAME="tailwindsa"+ (Get-Random -COUNT 1 -Maximum 9999999 )
Nama akun penyimpanan harus bersifat unik. Bagian
Get-Random
memastikan bahwa nama akun penyimpanan berakhir dalam serangkaian angka acak.Jalankan perintah
New-AzResourceGroupDeployment
berikut untuk menyebarkan templat ke lingkungan Pengembangan:New-AzResourceGroupDeployment ` -TemplateFile "./condition.json" ` -storageAccountName $STORAGE_ACCT_NAME ` -environment dev
Verifikasi penyebaran ke Pengembangan
Ingat, Anda mengharapkan templat tidak menyediakan akun penyimpanan.
Untuk memverifikasi fakta ini, Anda menjalankan perintah Get-AzStorageAccount
untuk memeriksa apakah nama akun penyimpanan sudah digunakan.
Jalankan Get-AzStorageAccount
perintah:
Get-AzStorageAccount -Name $STORAGE_ACCT_NAME -ResourceGroupName <rgn>sandbox resource group</rgn>
Outputnya menyerupai ini:
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
Hal ini memberi tahu Anda bahwa akun penyimpanan belum disediakan. Anda mengharapkan hal ini karena Anda belum menyebarkan ke lingkungan Produksi.
Sediakan lingkungan Produksi
Di sini, Anda menyebarkan templat ARM ke lingkungan Produksi, mirip dengan cara Anda melakukannya untuk lingkungan Pengembangan.
Sebagai penyegaran, inilah kondisi yang terlihat seperti di templat Anda:
"condition": "[equals(parameters('environment'),'production')]"
Untuk memicu kondisi ini, Anda menetapkan parameter templat environment
ke production
.
Jalankan perintah New-AzResourceGroupDeployment
berikut untuk menyebarkan templat ke lingkungan Produksi:
New-AzResourceGroupDeployment `
-TemplateFile "./condition.json" `
-storageAccountName $STORAGE_ACCT_NAME `
-environment production
Verifikasi penyebaran ke Produksi
Kali ini, Anda mengharapkan templat telah menyediakan akun penyimpanan.
Agar dapat memverifikasi fakta ini, Anda menjalankan perintah Get-AzStorageAccount
lagi untuk memverifikasi bahwa nama akun penyimpanan sedang digunakan.
Jalankan perintah Get-AzStorageAccount
berikut:
Get-AzStorageAccount -Name $STORAGE_ACCT_NAME -ResourceGroupName <rgn>sandbox resource group</rgn>
Kali ini Anda akan mendapatkan output yang berbeda. Daripada pesan kesalahan, hal ini memperlihatkan output tabel ini yang memperlihatkan informasi tentang sumber daya akun penyimpanan Anda:
Outputnya menyerupai ini:
Location Name Type Kind
-------- ---- ---- ----
westus tailwindsa4736629 Microsoft.Storage/storageAccounts StorageV2
Nilai-nilai ini memberi tahu Anda bahwa akun penyimpanan sudah disediakan seperti yang Anda harapkan.
Meskipun ini adalah contoh dasar, Anda melihat cara penyebaran didasarkan pada kondisi.
Dalam praktiknya, lingkungan Pengembangan, Pentahapan, dan Produksi Anda akan memuat sumber daya Azure tambahan untuk mendukung kebutuhan komputasi, jaringan, dan penyimpanan Anda. Setiap lingkungan kemungkinan akan dikelola melalui grup sumber dayanya sendiri agar dapat disediakan dan diperlakukan sebagai satu unit.
Buat templat ARM
Di sini, Anda membuat templat Azure Resource Manager (ARM) yang menentukan sumber daya akun penyimpanan.
Templat juga menentukan dua parameter:
environment
: nama lingkungan saat ini.storageAccountName
: nama untuk akun penyimpanan.
environment
dapat memiliki salah satu dari tiga nilai: dev
, staging
, atau production
. Kondisi menyediakan akun penyimpanan hanya ketika environment
sama dengan production
.
Di Visual Studio Code, buat file bernama condition.json di direktori yang sama yang memuat azuredeploy.json.
Tambahkan konten ini ke condition.json:
{ "$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": {} }
Sediakan lingkungan Pengembangan
Di sini, Anda menyebarkan templat ARM ke lingkungan Pengembangan. Anda melakukannya dengan mengatur parameter templat environment
ke dev
.
Karena kondisi menyediakan akun penyimpanan hanya ketika environment
sama dengan production
, Anda mengharapkan templat untuk tidak menyediakan akun penyimpanan. Dengan kata lain, Anda mengharapkan penyebaran yang tidak memuat sumber daya.
Buat variabel Bash yang menyimpan nama akun penyimpanan.
STORAGE_ACCT_NAME=tailwindsa$RANDOM
Nama akun penyimpanan harus bersifat unik. Bagian
$RANDOM
memastikan bahwa nama akun penyimpanan berakhir dalam serangkaian angka acak.Jalankan perintah
az deployment group create
berikut untuk menyebarkan templat ke lingkungan Pengembangan:az deployment group create \ --template-file condition.json \ --parameters storageAccountName=$STORAGE_ACCT_NAME environment=dev
Verifikasi penyebaran ke Pengembangan
Ingat, Anda mengharapkan templat tidak menyediakan akun penyimpanan.
Untuk memverifikasi fakta ini, Anda menjalankan perintah az storage account check-name
untuk memeriksa apakah nama akun penyimpanan sudah digunakan.
Jalankan perintah az storage account check-name
berikut:
az storage account check-name --name $STORAGE_ACCT_NAME
Anda akan melihat berikut ini:
{
"message": null,
"nameAvailable": true,
"reason": null
}
Nilai untuk nameAvailable
adalah true
, yang berarti bahwa nama akun penyimpanan masih tersedia dan belum disediakan. Anda mengharapkan hal ini karena Anda belum menyebarkan ke lingkungan Produksi.
Sediakan lingkungan Produksi
Di sini, Anda menyebarkan templat ARM ke lingkungan Produksi, mirip dengan cara Anda melakukannya untuk lingkungan Pengembangan.
Sebagai penyegaran, inilah kondisi yang terlihat seperti di templat Anda:
"condition": "[equals(parameters('environment'),'production')]"
Untuk memicu kondisi ini, Anda menetapkan parameter templat environment
ke production
.
Jalankan perintah az deployment group create
berikut untuk menyebarkan templat ke lingkungan Produksi:
az deployment group create \
--template-file condition.json \
--parameters storageAccountName=$STORAGE_ACCT_NAME environment=production
Verifikasi penyebaran ke Produksi
Kali ini, Anda mengharapkan templat telah menyediakan akun penyimpanan.
Agar dapat memverifikasi fakta ini, Anda menjalankan perintah az storage account check-name
lagi untuk memverifikasi bahwa nama akun penyimpanan sedang digunakan.
Jalankan perintah az storage account check-name
berikut:
az storage account check-name --name $STORAGE_ACCT_NAME
Outputnya menyerupai ini:
{
"message": "The storage account named tailwindsa32100 is already taken.",
"nameAvailable": false,
"reason": "AlreadyExists"
}
Nilai-nilai ini memberi tahu Anda bahwa akun penyimpanan sudah disediakan seperti yang Anda harapkan.
Meskipun ini adalah contoh dasar, Anda melihat cara penyebaran didasarkan pada kondisi.
Dalam praktiknya, lingkungan Pengembangan, Pentahapan, dan Produksi Anda akan memuat sumber daya Azure tambahan untuk mendukung kebutuhan komputasi, jaringan, dan penyimpanan Anda. Setiap lingkungan kemungkinan akan dikelola melalui grup sumber dayanya sendiri agar dapat disediakan dan diperlakukan sebagai satu unit.