Latihan - Tambahkan logika kondisional ke templat ARM Anda

Selesai

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.

  1. Di Visual Studio Code, buat file bernama condition.json di direktori yang sama yang memuat azuredeploy.json.

  2. 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.

  1. 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.

  2. 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.

  1. Di Visual Studio Code, buat file bernama condition.json di direktori yang sama yang memuat azuredeploy.json.

  2. 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.

  1. 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.

  2. 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.