Latihan - Menambahkan skrip penyebaran ke templat ARM

Selesai

Penting

Anda memerlukan langganan Azure Anda sendiri untuk menjalankan latihan ini, dan Anda mungkin dikenakan biaya. Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum memulai.

Sebagai bagian dari proses penyebaran aplikasi tim Anda, Anda perlu membuat akun penyimpanan dan menggelar file di penyimpanan blob agar aplikasi dapat dibaca. Hingga saat ini, Anda telah menyalin file secara manual setiap kali lingkungan baru telah disiapkan. Anda memutuskan untuk menggunakan skrip penyebaran untuk mengotomatiskan langkah ini sebagai bagian dari proses pembuatan lingkungan Anda.

Dalam latihan ini, Anda akan mengambil templat Azure Resource Manager (ARM) yang sudah ada dan menambahkan skrip penyebaran baru.

Selama proses tersebut, Anda akan:

  • Membuat templat awal.
  • Tambahkan prasyarat untuk skrip penyebaran, termasuk identitas terkelola yang ditetapkan pengguna dan penetapan peran.
  • Tambahkan skrip penyebaran.
  • Sebarkan templat, dan verifikasi hasilnya.

Latihan ini menggunakan Alat Azure Resource Manager untuk Visual Studio Code. Pastikan untuk menginstal ekstensi ini di Visual Studio Code.

Latihan ini menggunakan ekstensi Bicep untuk Visual Studio Code. Pastikan untuk menginstal ekstensi ini di Visual Studio Code.

Membuat template memulai

Anda mulai dengan template yang sudah ada yang telah digunakan tim Anda. Templat membuat akun penyimpanan, mengatur layanan blob dan memerlukan HTTPS, serta membuat kontainer blob untuk file konfigurasi Anda.

  1. Buka Visual Studio Code.

  2. Buat file baru yang disebut azuredeploy.json.

  3. Simpan file kosong agar Visual Studio Code dapat memuat peralatan templat ARM.

    Anda dapat memilih File>Simpan Sebagai atau pilih Ctrl+S untuk Windows (⌘+S untuk macOS). Pastikan Anda mengingat di mana Anda menyimpan file tersebut. Misalnya, Anda mungkin ingin membuat folder skrip untuk menyimpannya.

  4. Salin templat awal berikut ke azuredeploy.json.

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.1",
        "apiProfile": "",
        "parameters": {},
        "variables": {
            "storageAccountName": "[concat('storage', uniqueString(resourceGroup().id))]",
            "storageBlobContainerName": "config"
        },
        "functions": [],
        "resources": [
            {
                "name": "[variables('storageAccountName')]",
                "type": "Microsoft.Storage/storageAccounts",
                "apiVersion": "2019-06-01",
                "tags": {
                    "displayName": "[variables('storageAccountName')]"
                },
                "location": "[resourceGroup().location]",
                "kind": "StorageV2",
                "sku": {
                    "name": "Standard_LRS",
                    "tier": "Standard"
                },
                "properties": {
                    "encryption": {
                        "services": {
                            "blob": {
                                "enabled": true
                            }
                        },
                        "keySource": "Microsoft.Storage"
                    },
                    "supportsHttpsTrafficOnly": true
                }
            },
            {
                "type": "Microsoft.Storage/storageAccounts/blobServices",
                "apiVersion": "2019-04-01",
                "name": "[concat(variables('storageAccountName'), '/default')]",
                "dependsOn": [
                    "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
                ]
            },
            {
                "type": "Microsoft.Storage/storageAccounts/blobServices/containers",
                "apiVersion": "2019-04-01",
                "name": "[concat(variables('storageAccountName'),'/default/',variables('storageBlobContainerName'))]",
                "dependsOn": [
                    "[resourceId('Microsoft.Storage/storageAccounts/blobServices', variables('storageAccountName'), 'default')]",
                    "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
                ],
                "properties": {
                    "publicAccess": "Blob"
                }
            }
        ]
    }
    
  5. Simpan templat.

  1. Buka Visual Studio Code.

  2. Buat file baru yang disebut main.bicep.

  3. Simpan file kosong sehingga Visual Studio Code dapat memuat alat Bicep.

    Anda dapat memilih File>Simpan Sebagai atau pilih Ctrl+S untuk Windows (⌘+S untuk macOS). Pastikan Anda mengingat di mana Anda menyimpan file tersebut. Misalnya, Anda mungkin ingin membuat folder skrip untuk menyimpan file-nya.

  4. Salin templat awal berikut ke main.bicep.

    var storageAccountName = 'storage${uniqueString(resourceGroup().id)}'
    var storageBlobContainerName = 'config'
    
    resource storageAccount 'Microsoft.Storage/storageAccounts@2019-06-01' = {
      name: storageAccountName
      tags: {
        displayName: storageAccountName
      }
      location: resourceGroup().location
      kind: 'StorageV2'
      sku: {
        name: 'Standard_LRS'
        tier: 'Standard'
      }
      properties: {
        encryption: {
          services: {
            blob: {
              enabled: true
            }
          }
          keySource: 'Microsoft.Storage'
        }
        supportsHttpsTrafficOnly: true
      }
    
      resource blobService 'blobServices' existing = {
        name: 'default'
      }
    }
    
    resource blobContainer 'Microsoft.Storage/storageAccounts/blobServices/containers@2019-04-01' = {
      parent: storageAccount::blobService
      name: storageBlobContainerName
      properties: {
        publicAccess: 'Blob'
      }
    }
    
  5. Simpan templat.

Tambahkan identitas terkelola yang ditetapkan pengguna

Selanjutnya, Anda membuat identitas terkelola yang ditetapkan pengguna. Menggunakan pendekatan infrastruktur sebagai kode, Anda dapat membuat identitas dalam templat.

  1. Edit bagian variables dari azuredeploy.json untuk menyertakan:

    "userAssignedIdentityName": "configDeployer",
    
  2. Edit bagian resources dari azuredeploy.json untuk menyertakan:

    {
        "type": "Microsoft.ManagedIdentity/userAssignedIdentities",
        "apiVersion": "2018-11-30",
        "name": "[variables('userAssignedIdentityName')]",
        "location": "[resourceGroup().location]"
    }
    
  3. Simpan templat.

  1. Di bawah definisi variabel di main.bicep, tambahkan:

    var userAssignedIdentityName = 'configDeployer'
    
  2. Di bawah definisi sumber daya, tambahkan:

    resource userAssignedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2018-11-30' = {
      name: userAssignedIdentityName
      location: resourceGroup().location
    }
    
  3. Simpan templat.

Atur peran kontributor untuk identitas terkelola

Sekarang setelah identitas terkelola ditentukan, Anda dapat menetapkan perannya dengan hak atas grup sumber daya. Anda akan menetapkannya peran Kontributor. Anda mengidentifikasi peran dengan ID definisi perannya, yang merupakan GUID. Peran Kontributor disertakan di Azure, sehingga ID definisi peran didokumentasikan.

Penetapan peran juga membutuhkan nama GUID. Anda dapat menggunakan fungsi guid untuk membuat GUID yang unik untuk grup sumber daya dan nama peran.

  1. Edit bagian variables dari azuredeploy.json untuk menyertakan:

    "roleAssignmentName": "[guid(concat(resourceGroup().id, 'contributor'))]",
    "contributorRoleDefinitionId": "[resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",
    
  2. Edit bagian resources dari azuredeploy.json untuk menyertakan:

    {
        "type": "Microsoft.Authorization/roleAssignments",
        "apiVersion": "2020-04-01-preview",
        "name": "[variables('roleAssignmentName')]",
        "dependsOn": [ "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('userAssignedIdentityName'))]" ],
        "properties": {
            "roleDefinitionId": "[variables('contributorRoleDefinitionId')]",
            "principalId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('userAssignedIdentityName')), '2015-08-31-preview').principalId]",
            "scope": "[resourceGroup().id]",
            "principalType": "ServicePrincipal"
        }
    }
    
  3. Simpan templat.

  1. Di bawah definisi variabel di main.bicep, tambahkan:

    var roleAssignmentName = guid(resourceGroup().id, 'contributor')
    var contributorRoleDefinitionId = resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')
    
  2. Di bawah definisi sumber daya, tambahkan:

    resource roleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = {
      name: roleAssignmentName
      properties: {
        roleDefinitionId: contributorRoleDefinitionId
        principalId: userAssignedIdentity.properties.principalId
        principalType: 'ServicePrincipal'
      }
    }
    
  3. Simpan templat.

Buat skrip penyebaran

Sekarang, Anda memiliki semua prasyarat untuk skrip penyebaran. Anda akan mulai dengan nilai umum yang dibutuhkan skrip penyebaran. Ada dua ketergantungan, penetapan peran dan kontainer penyimpanan blob. Skrip Anda membutuhkan keduanya untuk ada sebelum dapat berjalan.

  1. Edit bagian variables dari azuredeploy.json untuk menyertakan:

    "deploymentScriptName": "CopyConfigScript"
    
  2. Edit bagian resources dari azuredeploy.json untuk menyertakan:

    {
        "type": "Microsoft.Resources/deploymentScripts",
        "apiVersion": "2020-10-01",
        "name": "[variables('deploymentScriptName')]",
        "location": "[resourceGroup().location]",
        "kind": "AzurePowerShell",
        "dependsOn": [
            "[resourceId('Microsoft.Authorization/roleAssignments', variables('roleAssignmentName'))]",
            "[resourceId('Microsoft.Storage/storageAccounts/blobServices/containers', variables('storageAccountName'), 'default', variables('storageBlobContainerName'))]"
        ],
        "identity": {
            "type": "UserAssigned",
            "userAssignedIdentities": {
                "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities',variables('userAssignedIdentityName'))]": {}
            }
        }
    }
    
  3. Tambahkan bagian properties ke sumber daya untuk menentukan skrip dan nilai lain yang diperlukan.

    "properties": {
        "azPowerShellVersion": "3.0",
        "scriptContent": "
            Invoke-RestMethod -Uri 'https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/mslearn-arm-deploymentscripts-sample/appsettings.json' -OutFile 'appsettings.json'
            $storageAccount = Get-AzStorageAccount -ResourceGroupName 'learndeploymentscript_exercise_1' | Where-Object { $_.StorageAccountName -like 'storage*' }
            $blob = Set-AzStorageBlobContent -File 'appsettings.json' -Container 'config' -Blob 'appsettings.json' -Context $StorageAccount.Context
            $DeploymentScriptOutputs = @{}
            $DeploymentScriptOutputs['Uri'] = $blob.ICloudBlob.Uri
            $DeploymentScriptOutputs['StorageUri'] = $blob.ICloudBlob.StorageUri
        ",
        "retentionInterval": "P1D"
    }
    
  4. Simpan templat.

  1. Di bawah definisi variabel di main.bicep, tambahkan:

    var deploymentScriptName = 'CopyConfigScript'
    
  2. Di bawah definisi sumber daya, tambahkan:

    resource deploymentScript 'Microsoft.Resources/deploymentScripts@2020-10-01' = {
      name: deploymentScriptName
      location: resourceGroup().location
      kind: 'AzurePowerShell'
      identity: {
        type: 'UserAssigned'
        userAssignedIdentities: {
          '${userAssignedIdentity.id}': {}
        }
      }
      dependsOn: [
        roleAssignment
        blobContainer
      ]
    }
    
  3. Tambahkan bagian properties ke sumber daya untuk menentukan skrip dan nilai lain yang diperlukan.

    properties: {
      azPowerShellVersion: '3.0'
      scriptContent: '''
        Invoke-RestMethod -Uri 'https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/mslearn-arm-deploymentscripts-sample/appsettings.json' -OutFile 'appsettings.json'
        $storageAccount = Get-AzStorageAccount -ResourceGroupName 'learndeploymentscript_exercise_1' | Where-Object { $_.StorageAccountName -like 'storage*' }
        $blob = Set-AzStorageBlobContent -File 'appsettings.json' -Container 'config' -Blob 'appsettings.json' -Context $storageAccount.Context
        $DeploymentScriptOutputs = @{}
        $DeploymentScriptOutputs['Uri'] = $blob.ICloudBlob.Uri
        $DeploymentScriptOutputs['StorageUri'] = $blob.ICloudBlob.StorageUri
      '''
      retentionInterval: 'P1D'
    }
    
  4. Simpan templat.

Tambahkan output templat

Sekarang, setelah Anda memiliki skrip penyebaran yang mengunggah file ke Azure Blob Storage, Anda mungkin perlu mereferensikan lokasi file tersebut di otomatisasi nanti. (Mungkin Anda akan menjalankan tes untuk memvalidasi bahwa tempat file tersebut sudah sesuai.)

Setelah bagian resources templat ARM, tambahkan output yang merujuk URI untuk file seperti yang dilaporkan skrip penyebaran.

"outputs": {
    "fileUri": {
        "type": "string",
        "value": "[reference(variables('deploymentScriptName')).outputs.Uri]"
    }
}

Di bagian bawah file, setelah definisi sumber daya, tambahkan output yang merujuk URI untuk file seperti yang dilaporkan skrip penyebaran.

output fileUri string = deploymentScript.properties.outputs.Uri

Verifikasi templat Anda

Templat Anda akan terlihat seperti ini:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.1",
    "apiProfile": "",
    "parameters": {},
    "variables": {
        "storageAccountName": "[concat('storage', uniqueString(resourceGroup().id))]",
        "storageBlobContainerName": "config",
        "userAssignedIdentityName": "configDeployer",
        "roleAssignmentName": "[guid(concat(resourceGroup().id, 'contributor'))]",
        "contributorRoleDefinitionId": "[resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",
        "deploymentScriptName": "CopyConfigScript"
    },
    "functions": [],
    "resources": [
        {
            "name": "[variables('storageAccountName')]",
            "type": "Microsoft.Storage/storageAccounts",
            "apiVersion": "2019-06-01",
            "tags": {
                "displayName": "[variables('storageAccountName')]"
            },
            "location": "[resourceGroup().location]",
            "kind": "StorageV2",
            "sku": {
                "name": "Standard_LRS",
                "tier": "Standard"
            },
            "properties": {
                "encryption": {
                    "services": {
                        "blob": {
                            "enabled": true
                        }
                    },
                    "keySource": "Microsoft.Storage"
                },
                "supportsHttpsTrafficOnly": true
            }
        },
        {
            "type": "Microsoft.Storage/storageAccounts/blobServices",
            "apiVersion": "2019-04-01",
            "name": "[concat(variables('storageAccountName'), '/default')]",
            "dependsOn": [
                "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
            ]
        },
        {
            "type": "Microsoft.Storage/storageAccounts/blobServices/containers",
            "apiVersion": "2019-04-01",
            "name": "[concat(variables('storageAccountName'),'/default/',variables('storageBlobContainerName'))]",
            "dependsOn": [
                "[resourceId('Microsoft.Storage/storageAccounts/blobServices', variables('storageAccountName'), 'default')]",
                "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
            ],
            "properties": {
                "publicAccess": "Blob"
            }
        },
        {
            "type": "Microsoft.ManagedIdentity/userAssignedIdentities",
            "apiVersion": "2018-11-30",
            "name": "[variables('userAssignedIdentityName')]",
            "location": "[resourceGroup().location]"
        },
        {
            "type": "Microsoft.Authorization/roleAssignments",
            "apiVersion": "2020-04-01-preview",
            "name": "[variables('roleAssignmentName')]",
            "dependsOn": [ "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('userAssignedIdentityName'))]" ],
            "properties": {
                "roleDefinitionId": "[variables('contributorRoleDefinitionId')]",
                "principalId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('userAssignedIdentityName')), '2015-08-31-preview').principalId]",
                "scope": "[resourceGroup().id]",
                "principalType": "ServicePrincipal"
            }
        },
        {
            "type": "Microsoft.Resources/deploymentScripts",
            "apiVersion": "2020-10-01",
            "name": "[variables('deploymentScriptName')]",
            "location": "[resourceGroup().location]",
            "kind": "AzurePowerShell",
            "dependsOn": [
                "[resourceId('Microsoft.Authorization/roleAssignments', variables('roleAssignmentName'))]",
                "[resourceId('Microsoft.Storage/storageAccounts/blobServices/containers', variables('storageAccountName'), 'default', variables('storageBlobContainerName'))]"
            ],
            "identity": {
                "type": "UserAssigned",
                "userAssignedIdentities": {
                    "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities',variables('userAssignedIdentityName'))]": {}
                }
            },
            "properties": {
                "azPowerShellVersion": "3.0",
                "scriptContent": "
                    Invoke-RestMethod -Uri 'https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/mslearn-arm-deploymentscripts-sample/appsettings.json' -OutFile 'appsettings.json'
                    $storageAccount = Get-AzStorageAccount -ResourceGroupName 'learndeploymentscript_exercise_1' | Where-Object { $_.StorageAccountName -like 'storage*' }
                    $blob = Set-AzStorageBlobContent -File 'appsettings.json' -Container 'config' -Blob 'appsettings.json' -Context $StorageAccount.Context
                    $DeploymentScriptOutputs = @{}
                    $DeploymentScriptOutputs['Uri'] = $blob.ICloudBlob.Uri
                    $DeploymentScriptOutputs['StorageUri'] = $blob.ICloudBlob.StorageUri
                ",
                "retentionInterval": "P1D"
            }
        }
    ],
    "outputs": {
        "fileUri": {
            "type": "string",
            "value": "[reference(variables('deploymentScriptName')).outputs.Uri]"
        }
    }
}
var storageAccountName = 'storage${uniqueString(resourceGroup().id)}'
var storageBlobContainerName = 'config'
var userAssignedIdentityName = 'configDeployer'
var roleAssignmentName = guid(resourceGroup().id, 'contributor')
var contributorRoleDefinitionId = resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')
var deploymentScriptName = 'CopyConfigScript'

resource storageAccount 'Microsoft.Storage/storageAccounts@2019-06-01' = {
  name: storageAccountName
  tags: {
    displayName: storageAccountName
  }
  location: resourceGroup().location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
    tier: 'Standard'
  }
  properties: {
    encryption: {
      services: {
        blob: {
          enabled: true
        }
      }
      keySource: 'Microsoft.Storage'
    }
    supportsHttpsTrafficOnly: true
  }

  resource blobService 'blobServices' existing = {
    name: 'default'
  }
}

resource blobContainer 'Microsoft.Storage/storageAccounts/blobServices/containers@2019-04-01' = {
  parent: storageAccount::blobService
  name: storageBlobContainerName
  properties: {
    publicAccess: 'Blob'
  }
}

resource userAssignedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2018-11-30' = {
  name: userAssignedIdentityName
  location: resourceGroup().location
}

resource roleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = {
  name: roleAssignmentName
  properties: {
    roleDefinitionId: contributorRoleDefinitionId
    principalId: userAssignedIdentity.properties.principalId
    principalType: 'ServicePrincipal'
  }
}

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2020-10-01' = {
  name: deploymentScriptName
  location: resourceGroup().location
  kind: 'AzurePowerShell'
  identity: {
    type: 'UserAssigned'
    userAssignedIdentities: {
      '${userAssignedIdentity.id}': {}
    }
  }
  properties: {
    azPowerShellVersion: '3.0'
    scriptContent: '''
      Invoke-RestMethod -Uri 'https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/mslearn-arm-deploymentscripts-sample/appsettings.json' -OutFile 'appsettings.json'
      $storageAccount = Get-AzStorageAccount -ResourceGroupName 'learndeploymentscript_exercise_1' | Where-Object { $_.StorageAccountName -like 'storage*' }
      $blob = Set-AzStorageBlobContent -File 'appsettings.json' -Container 'config' -Blob 'appsettings.json' -Context $storageAccount.Context
      $DeploymentScriptOutputs = @{}
      $DeploymentScriptOutputs['Uri'] = $blob.ICloudBlob.Uri
      $DeploymentScriptOutputs['StorageUri'] = $blob.ICloudBlob.StorageUri
    '''
    retentionInterval: 'P1D'
  }
  dependsOn: [
    roleAssignment
    blobContainer
  ]
}

output fileUri string = deploymentScript.properties.outputs.Uri

Jika tidak, salin contoh atau sesuaikan templat Anda agar sesuai dengan contoh.

Menyebarkan templat

Untuk menyebarkan templat ini ke Azure, Anda harus masuk ke akun Azure Anda dari terminal Visual Studio Code. Pastikan Anda telah menginstal alat Azure CLI.

  1. Pada menu Terminal, pilih Terminal Baru. Jendela terminal biasanya terbuka di bagian bawah layar Anda.

  2. Jika shell yang ditampilkan di sisi kanan jendela terminal adalah bash, shell yang benar terbuka dan Anda dapat melompat ke bagian berikutnya.

    Screenshot of the Visual Studio Code terminal window, with the bash option shown.

  3. Jika shell selain bash muncul, pilih panah dropdown shell, lalu pilih Git Bash.

    Screenshot of the Visual Studio Code terminal window, with the terminal shell dropdown shown and Git Bash Default selected.

  4. Dalam daftar shell terminal, pilih bash.

    Screenshot of the Visual Studio Code terminal window, with the bash terminal selected.

  5. Di terminal, buka direktori tempat Anda menyimpan template. Misalnya, jika Anda menyimpan template ke folder template, Anda dapat menggunakan perintah ini:

    cd templates
    

Masuk ke Azure menggunakan Azure CLI

  1. Pada terminal Visual Studio Code, masuk ke Azure dengan menjalankan perintah berikut:

    az login
    
  2. Masuk ke akun Azure Anda melalui browser yang terbuka.

    Terminal Visual Studio Code menampilkan daftar langganan yang terkait dengan akun ini.

  3. Dalam daftar, temukan langganan yang ingin Anda gunakan untuk latihan ini.

    Jika Anda melewatkan daftar dari rincian masuk, Anda dapat menggunakan cuplikan berikut untuk mencantumkan langganan Anda lagi.

    az account list --output table
    
  4. Tetapkan langganan default untuk semua perintah Azure CLI yang Anda jalankan dalam sesi ini.

    az account set --subscription "Your Subscription Name or ID"
    

Untuk menyebarkan templat ini ke Azure, Anda harus masuk ke akun Azure Anda dari terminal Visual Studio Code. Pastikan Anda telah menginstal alat Azure CLI.

  1. Pada menu Terminal, pilih Terminal Baru. Jendela terminal biasanya terbuka di bagian bawah layar Anda.

  2. Jika shell yang ditampilkan di sisi kanan jendela terminal adalah bash, shell yang benar terbuka dan Anda dapat melompat ke bagian berikutnya.

    Screenshot of the Visual Studio Code terminal window, with the bash option shown.

  3. Jika shell selain bash muncul, pilih panah dropdown shell, lalu pilih Git Bash.

    Screenshot of the Visual Studio Code terminal window, with the terminal shell dropdown shown and Git Bash Default selected.

  4. Dalam daftar shell terminal, pilih bash.

    Screenshot of the Visual Studio Code terminal window, with the bash terminal selected.

  5. Di terminal, buka direktori tempat Anda menyimpan template. Misalnya, jika Anda menyimpan template ke folder template, Anda dapat menggunakan perintah ini:

    cd templates
    

Menginstal Bisep

Jalankan perintah berikut untuk memastikan Anda memiliki Bicep versi terbaru:

az bicep install && az bicep upgrade

Masuk ke Azure menggunakan Azure CLI

  1. Pada terminal Visual Studio Code, masuk ke Azure dengan menjalankan perintah berikut:

    az login
    
  2. Masuk ke akun Azure Anda melalui browser yang terbuka.

    Terminal Visual Studio Code menampilkan daftar langganan yang terkait dengan akun ini.

  3. Dalam daftar, temukan langganan yang ingin Anda gunakan untuk latihan ini.

    Jika Anda melewatkan daftar dari rincian masuk, Anda dapat menggunakan cuplikan berikut untuk mencantumkan langganan Anda lagi.

    az account list --output table
    
  4. Tetapkan langganan default untuk semua perintah Azure CLI yang Anda jalankan dalam sesi ini.

    az account set --subscription "Your Subscription Name or ID"
    

Untuk menyebarkan template ini ke Azure, masuk ke akun Azure dari terminal Visual Studio Code. Pastikan Anda telah menginstal Azure PowerShell, dan masuk ke akun yang sama yang mengaktifkan ko.

  1. Pada menu Terminal, pilih Terminal Baru. Jendela terminal biasanya terbuka di bagian bawah layar Anda.

  2. Jika shell yang ditampilkan di sisi kanan jendela terminal adalah powershell atau pwsh, shell yang benar terbuka, dan Anda dapat melompat ke bagian berikutnya.

    Screenshot of the Visual Studio Code terminal window, with the pwsh option displayed in the shell dropdown list.

  3. Jika shell selain powershell atau pwsh muncul, pilih panah dropdown shell, lalu pilih PowerShell.

    Screenshot of the Visual Studio Code terminal window, with the terminal shell dropdown list shown and PowerShell selected.

  4. Dalam daftar shell terminal, pilih powershell atau pwsh.

    Screenshot of the Visual Studio Code terminal window, with the PowerShell terminal selected.

  5. Di terminal, buka direktori tempat Anda menyimpan template. Misalnya, jika Anda menyimpannya ke folder template, Anda dapat menggunakan perintah ini:

    Set-Location -Path templates
    

Masuk ke Azure menggunakan Azure PowerShell

  1. Pada terminal Visual Studio Code, masuk ke Azure dengan menjalankan perintah berikut:

    Connect-AzAccount
    
  2. Masuk ke akun Azure Anda melalui browser yang terbuka.

  3. Dapatkan ID langganan yang ingin Anda gunakan untuk latihan ini dengan menjalankan perintah berikut:

    Get-AzSubscription
    

    ID langganan adalah kolom kedua. Salin kolom kedua. Akan terlihat seperti cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0.

  4. Tetapkan langganan default untuk semua perintah Microsoft Azure PowerShell yang dijalankan dalam sesi ini.

    Set-AzContext -SubscriptionId {Your subscription ID}
    

Untuk menyebarkan template ini ke Azure, masuk ke akun Azure dari terminal Visual Studio Code. Pastikan Anda telah menginstal Microsoft Azure PowerShell.

  1. Pada menu Terminal, pilih Terminal Baru. Jendela terminal biasanya terbuka di bagian bawah layar Anda.

  2. Jika shell yang ditampilkan di sisi kanan jendela terminal adalah powershell atau pwsh, shell yang benar terbuka, dan Anda dapat melompat ke bagian berikutnya.

    Screenshot of the Visual Studio Code terminal window, with the pwsh option displayed in the shell dropdown list.

  3. Jika shell selain powershell atau pwsh muncul, pilih panah dropdown shell, lalu pilih PowerShell.

    Screenshot of the Visual Studio Code terminal window, with the terminal shell dropdown list shown and PowerShell selected.

  4. Dalam daftar shell terminal, pilih powershell atau pwsh.

    Screenshot of the Visual Studio Code terminal window, with the PowerShell terminal selected.

  5. Di terminal, buka direktori tempat Anda menyimpan template. Misalnya, jika Anda menyimpannya ke folder template, Anda dapat menggunakan perintah ini:

    Set-Location -Path templates
    

Menginstal Bicep CLI

Untuk menggunakan Bicep dari Azure PowerShell, instal Bicep CLI.

Masuk ke Azure menggunakan Azure PowerShell

  1. Pada terminal Visual Studio Code, masuk ke Azure dengan menjalankan perintah berikut:

    Connect-AzAccount
    
  2. Masuk ke akun Azure Anda melalui browser yang terbuka.

  3. Dapatkan ID langganan yang ingin Anda gunakan untuk latihan ini dengan menjalankan perintah berikut:

    Get-AzSubscription
    

    ID langganan adalah kolom kedua. Salin kolom kedua. Akan terlihat seperti cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0.

  4. Tetapkan langganan default untuk semua perintah Microsoft Azure PowerShell yang dijalankan dalam sesi ini.

    Set-AzContext -SubscriptionId {Your subscription ID}
    

Selanjutnya, Anda perlu membuat grup sumber daya untuk menampung sumber daya yang akan Anda buat sebagai bagian dari latihan ini. Dengan menggunakan grup sumber daya baru, pembersihan setelah latihan menjadi jauh lebih mudah.

Dari terminal di Visual Studio Code, jalankan perintah ini untuk membuat grup sumber daya untuk latihan ini:

Membuat grup sumber daya untuk latihan

resourceGroupName="learndeploymentscript_exercise_1"
az group create --location eastus --name $resourceGroupName
$resourceGroupName = 'learndeploymentscript_exercise_1'
New-AzResourceGroup -Location eastus -Name $resourceGroupName

Catatan

Jika Anda menggunakan nama yang berbeda untuk grup sumber daya, Anda harus memastikan anda memperbarui skrip. Nanti dalam modul ini, Anda akan melihat cara menghindari nama grup sumber daya hard-coding dalam skrip Anda.

Menyebarkan templat ke Azure

Kode berikut menyebarkan templat ARM ke Azure. Anda akan melihat penyebaran yang berhasil.

Menerapkan templat menggunakan perintah Azure CLI di terminal Visual Studio Code.

templateFile="azuredeploy.json"
today=$(date +"%d-%b-%Y")
deploymentName="deploymentscript-"$today

az deployment group create \
    --resource-group $resourceGroupName \
    --name $deploymentName \
    --template-file $templateFile

Kode berikut menyebarkan templat ARM ke Azure. Anda akan melihat penyebaran yang berhasil.

Menerapkan templat menggunakan perintah Azure CLI di terminal Visual Studio Code.

templateFile="main.bicep"
today=$(date +"%d-%b-%Y")
deploymentName="deploymentscript-"$today

az deployment group create \
    --resource-group $resourceGroupName \
    --name $deploymentName \
    --template-file $templateFile

Kode berikut menyebarkan templat ke Azure. Anda akan melihat penyebaran yang berhasil.

Menyebarkan templat menggunakan perintah Azure PowerShell di terminal.

$templateFile = 'azuredeploy.json'
$today = Get-Date -Format 'MM-dd-yyyy'
$deploymentName = "deploymentscript-$today"
New-AzResourceGroupDeployment `
  -ResourceGroupName $resourceGroupName `
  -Name $deploymentName `
  -TemplateFile $templateFile

Kode berikut menyebarkan templat ke Azure. Anda akan melihat penyebaran yang berhasil.

Menyebarkan templat menggunakan perintah Azure PowerShell di terminal.

$templateFile = 'main.bicep'
$today = Get-Date -Format 'MM-dd-yyyy'
$deploymentName = "deploymentscript-$today"
New-AzResourceGroupDeployment `
  -ResourceGroupName $resourceGroupName `
  -Name $deploymentName `
  -TemplateFile $templateFile

Tinjau hasil templat Anda

Setelah penyebaran selesai, Anda akan diberikan URL yang menunjuk ke file yang disalin skrip penyebaran Anda ke penyimpanan blob.

  1. Ambil file itu dengan menggunakan output URL dari penyebaran template untuk mengonfirmasi bahwa skrip penyebaran berfungsi dengan baik.

    uri=$(az deployment group show --resource-group $resourceGroupName --name $deploymentName --query 'properties.outputs.fileUri.value' --output tsv)
    curl $uri
    

    Perintah ini mengembalikan kode berikut.

    {
      "environment": "production",
      "hostname": "tailwindtraders.com",
      "Logging": {
        "LogLevel": {
          "Default": "Debug"
        }
      },
      "ApplicationInsights": {
        "InstrumentationKey": ""
      },
      "AllowedHosts": "*",
      "CosmosDb": {
        "Host": "",
        "Key": "",
        "Database": "Products"
      }
    }
    
  2. Anda juga dapat meninjau log (dan detail lain tentang penyebaran) dari portal Microsoft Azure, atau dengan menggunakan perintah berikut.

    az deployment-scripts show-log --resource-group $resourceGroupName --name CopyConfigScript
    
  1. Ambil file itu dengan menggunakan output URL dari penyebaran template untuk mengonfirmasi bahwa skrip penyebaran berfungsi dengan baik.

    $fileUri = (Get-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -Name $deploymentName).Outputs.fileUri.Value
    Invoke-RestMethod $fileUri
    

    Perintah ini mengembalikan kode berikut.

    environment         : production
    hostname            : tailwindtraders.com
    Logging             : @{LogLevel=}
    ApplicationInsights : @{InstrumentationKey=}
    AllowedHosts        : *
    CosmosDb            : @{Host=; Key=; Database=Products}
    
  2. Anda juga dapat meninjau log (dan detail lain tentang penyebaran) dari portal Microsoft Azure, atau dengan menggunakan baris perintah berikut.

    Get-AzDeploymentScriptLog -ResourceGroupName $resourceGroupName -Name CopyConfigScript
    

Bersihkan grup sumber daya

Setelah berhasil menyebarkan templat ARM dengan skrip penyebaran, Anda dapat menghapus grup sumber daya berisi semua sumber daya dan penetapan peran yang telah Anda buat.

az group delete --name $resourceGroupName
Remove-AzResourceGroup -Name $resourceGroupName