Latihan - Menambahkan skrip penyebaran ke templat ARM

Selesai

Penting

Anda memerlukan langganan Azure Anda sendiri untuk menyelesaikan latihan ini, dan Anda mungkin dikenakan biaya. Jika Anda belum 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 disiapkan. Anda memutuskan untuk menggunakan skrip penyebaran untuk mengotomatiskan langkah ini sebagai bagian dari proses pembuatan lingkungan Anda.

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

Selama proses ini, Anda:

  • 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 Simpan File>Sebagai atau pilih Ctrl+S di Windows (⌘+S di macOS). Pastikan dan ingat di mana Anda menyimpan file. 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": "2023-01-01",
                "tags": {
                    "displayName": "[variables('storageAccountName')]"
                },
                "location": "[resourceGroup().location]",
                "kind": "StorageV2",
                "sku": {
                    "name": "Standard_LRS",
                    "tier": "Standard"
                },
                "properties": {
                    "allowBlobPublicAccess": true,
                    "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 Simpan File>Sebagai atau pilih Ctrl+S di Windows (⌘+S di macOS). Pastikan untuk mengingat di mana Anda menyimpan file. Misalnya, Anda mungkin ingin membuat folder skrip untuk menyimpannya.

  4. Salin templat awal berikut ke main.bicep.

    var storageAccountName = 'storage${uniqueString(resourceGroup().id)}'
    var storageBlobContainerName = 'config'
    
    resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
      name: storageAccountName
      tags: {
        displayName: storageAccountName
      }
      location: resourceGroup().location
      kind: 'StorageV2'
      sku: {
        name: 'Standard_LRS'
        tier: 'Standard'
      }
      properties: {
        allowBlobPublicAccess: true
        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 variablesazuredeploy.json untuk menyertakan:

    "userAssignedIdentityName": "configDeployer",
    
  2. Edit bagian resourcesazuredeploy.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. Tetapkan peran Kontributor. Anda mengidentifikasi peran dengan ID definisi perannya, yang merupakan GUID. Peran Kontributor dibangun ke dalam Azure sehingga ID definisi peran didokumenkan.

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 variablesazuredeploy.json untuk menyertakan:

    "roleAssignmentName": "[guid(concat(resourceGroup().id, 'contributor'))]",
    "contributorRoleDefinitionId": "[resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",
    
  2. Edit bagian resourcesazuredeploy.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 mulai dengan nilai-nilai umum yang diperlukan oleh skrip penyebaran. Ada dua ketergantungan, penetapan peran dan kontainer penyimpanan blob. Skrip Anda memerlukan kedua dependensi ini agar ada sebelum dapat berjalan.

  1. Edit bagian variablesazuredeploy.json untuk menyertakan:

    "deploymentScriptName": "CopyConfigScript"
    
  2. Edit bagian resourcesazuredeploy.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. properties Tambahkan bagian ke sumber daya yang 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. properties Tambahkan bagian ke sumber daya yang 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 menjalankan tes untuk memvalidasi bahwa file berada di tempat yang Anda pikir seharusnya.)

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": "2023-01-01",
            "tags": {
                "displayName": "[variables('storageAccountName')]"
            },
            "location": "[resourceGroup().location]",
            "kind": "StorageV2",
            "sku": {
                "name": "Standard_LRS",
                "tier": "Standard"
            },
            "properties": {
                "allowBlobPublicAccess": true,
                "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@2023-01-01' = {
  name: storageAccountName
  tags: {
    displayName: storageAccountName
  }
  location: resourceGroup().location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
    tier: 'Standard'
  }
  properties: {
    allowBlobPublicAccess: true
    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 jendela terminal menampilkan bash di sisi kanan, itu berarti shell yang benar sudah terbuka. Atau, jika Anda melihat ikon shell bash di sebelah kanan, Anda dapat memilihnya untuk meluncurkan shell.

    Cuplikan layar jendela terminal Visual Studio Code, dengan opsi bash ditampilkan.

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

    Cuplikan layar jendela terminal Visual Studio Code, dengan menu dropdown shell terminal ditampilkan dan Default Git Bash dipilih.

  3. Di terminal, buka direktori tempat Anda menyimpan template. Misalnya, jika Anda menyimpan templat ke folder templat , 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 jendela terminal menampilkan bash di sisi kanan, itu berarti shell yang benar sudah terbuka. Atau, jika Anda melihat ikon shell bash di sebelah kanan, Anda dapat memilihnya untuk meluncurkan shell.

    Cuplikan layar jendela terminal Visual Studio Code, dengan opsi bash ditampilkan.

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

    Cuplikan layar jendela terminal Visual Studio Code, dengan menu dropdown shell terminal ditampilkan dan Default Git Bash dipilih.

  3. Di terminal, buka direktori tempat Anda menyimpan template. Misalnya, jika Anda menyimpan templat ke folder templat , 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 kotak pasir.

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

  2. Jika jendela terminal menampilkan pwsh atau powershell di sisi kanan, itu berarti shell yang benar sudah terbuka. Atau, jika Anda melihat ikon shell PowerShell di sebelah kanan, Anda dapat memilihnya untuk meluncurkan shell.

    Cuplikan layar jendela terminal Visual Studio Code, dengan opsi pwsh ditampilkan di daftar dropdown shell.

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

    Cuplikan layar jendela terminal Visual Studio Code, dengan daftar dropdown shell terminal ditampilkan dan PowerShell dipilih.

  3. Di terminal, buka direktori tempat Anda menyimpan template. Misalnya, jika Anda menyimpan templat di folder templat , 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. Ini terlihat seperti aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e4e.

  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 Azure PowerShell.

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

  2. Jika jendela terminal menampilkan pwsh atau powershell di sisi kanan, itu berarti shell yang benar sudah terbuka. Atau, jika Anda melihat ikon shell PowerShell di sebelah kanan, Anda dapat memilihnya untuk meluncurkan shell.

    Cuplikan layar jendela terminal Visual Studio Code, dengan opsi pwsh ditampilkan di daftar dropdown shell.

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

    Cuplikan layar jendela terminal Visual Studio Code, dengan daftar dropdown shell terminal ditampilkan dan PowerShell dipilih.

  3. Di terminal, buka direktori tempat Anda menyimpan template. Misalnya, jika Anda menyimpan templat di folder templat , 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. Ini terlihat seperti aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e4e.

  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 berisi sumber daya yang Anda buat sebagai bagian dari latihan ini. Dengan menggunakan grup sumber daya baru, membersihkan setelah latihan menjadi 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 perlu memastikan Anda memperbarui skrip. Nanti dalam modul ini, Anda akan melihat cara menghindari penggunaan nama grup sumber daya yang sudah di-hardcode 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. Tinjau log dan detail lainnya tentang penyebaran dari portal Microsoft Azure. Atau, Anda dapat 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. Tinjau log dan detail lainnya tentang penyebaran dari portal Microsoft Azure. Atau, Anda dapat menggunakan 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 yang berisi semua sumber daya dan penetapan peran yang Anda buat.

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