Alıştırma - ARM şablonuna dağıtım betiği ekleme

Tamamlandı

Önemli

Bu alıştırmayı tamamlamak için kendi Azure aboneliğinize ihtiyacınız vardır ve ücret ödemeniz gerekebilir. Mevcut bir Azure aboneliğiniz yoksa başlamadan önce ücretsiz hesap oluşturun.

Ekibinizin uygulama dağıtım işleminin bir parçası olarak, uygulamanın okuması için bir depolama hesabı oluşturmanız ve blob depolamada bir dosya hazırlamanız gerekir. Bu noktaya kadar, her yeni ortam ayarlandığında dosyayı el ile kopyalamış olursunuz. Ortam oluşturma işleminizin bir parçası olarak bu adımı otomatikleştirmek için bir dağıtım betiği kullanmaya karar verirsiniz.

Bu alıştırmada, mevcut bir Azure Resource Manager (ARM) şablonunu alır ve yeni bir dağıtım betiği eklersiniz.

Bu işlem sırasında:

  • Başlangıç şablonu oluşturun.
  • Kullanıcı tarafından atanan yönetilen kimlik ve rol ataması dahil olmak üzere dağıtım betikleri için önkoşulları ekleyin.
  • Dağıtım betiği ekleyin.
  • Şablonu dağıtın ve sonucu doğrulayın.

Bu alıştırmada Visual Studio Code için Azure Resource Manager Araçları kullanılmaktadır. Visual Studio Code’da bu uzantıyı yüklediğinizden emin olun.

Bu alıştırmada Visual Studio Code için Bicep uzantısı kullanılır. Visual Studio Code’da bu uzantıyı yüklediğinizden emin olun.

Başlangıç şablonunu oluşturma

Ekibinizin kullandığı mevcut bir şablonla başlarsınız. Şablon depolama hesabını oluşturur, blob hizmetlerini ayarlar ve HTTPS gerektirir ve yapılandırma dosyalarınız için blob kapsayıcısını oluşturur.

  1. Visual Studio Code'u açın.

  2. azuredeploy.json adlı yeni bir dosya oluşturun.

  3. Visual Studio Code'un ARM şablonu araçlarını yükleyebilmesi için boş dosyayı kaydedin.

    Dosya>veya Windows'ta Ctrl+S (macOS'ta⌘+S) seçeneğini belirleyebilirsiniz. Dosyayı nereye kaydettiğinizden emin olun ve unutmayın. Örneğin, içinde kaydedilecek bir betik klasörü oluşturmak isteyebilirsiniz.

  4. Aşağıdaki başlangıç şablonunu azuredeploy.json kopyalayın.

    {
        "$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. Şablonu kaydedin.

  1. Visual Studio Code'u açın.

  2. main.bicep adlı yeni bir dosya oluşturun.

  3. Visual Studio Code'un Bicep araçlarını yükleyebilmesi için boş dosyayı kaydedin.

    Dosya>veya Windows'ta Ctrl+S (macOS'ta⌘+S) seçeneğini belirleyebilirsiniz. Dosyayı nereye kaydettiğinizi anımsadığınızdan emin olun. Örneğin, dosyayı kaydetmek için bir betik klasörü oluşturmak isteyebilirsiniz.

  4. Aşağıdaki başlangıç şablonunu main.bicep'e kopyalayın.

    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. Şablonu kaydedin.

Kullanıcı tarafından atanan yönetilen kimlik ekleme

Ardından, kullanıcı tarafından atanan bir yönetilen kimlik oluşturmanız gerekir. Kod olarak altyapı yaklaşımı göz önünde bulundurulduğunda, şablonda kimlik oluşturabilirsiniz.

  1. variables azuredeploy.json bölümünü şunları içerecek şekilde düzenleyin:

    "userAssignedIdentityName": "configDeployer",
    
  2. resources azuredeploy.json bölümünü şunları içerecek şekilde düzenleyin:

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

  1. main.bicep dosyasındaki değişken tanımlarının altına şunları ekleyin:

    var userAssignedIdentityName = 'configDeployer'
    
  2. Kaynak tanımlarının altına şunları ekleyin:

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

Yönetilen kimlik için katkıda bulunan rolünü ayarlama

Artık tanımlanmış bir yönetilen kimliğiniz olduğuna göre, kaynak grubuna haklara sahip bir rol atayabilirsiniz. Katkıda Bulunan rolünü atayın. Bir rolü, GUID olan rol tanımı kimliğine göre tanımlarsınız. Katkıda Bulunan rolü Azure'da yerleşik olarak bulunur ve rol tanımı kimliği belgelenir.

Rol ataması için bir GUID adı da gerekir. işlevini kullanarak guid kaynak grubuna ve rol adına özgü bir GUID oluşturabilirsiniz.

  1. variables azuredeploy.json bölümünü şunları içerecek şekilde düzenleyin:

    "roleAssignmentName": "[guid(concat(resourceGroup().id, 'contributor'))]",
    "contributorRoleDefinitionId": "[resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",
    
  2. resources azuredeploy.json bölümünü şunları içerecek şekilde düzenleyin:

    {
        "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. Şablonu kaydedin.

  1. main.bicep dosyasındaki değişken tanımlarının altına şunları ekleyin:

    var roleAssignmentName = guid(resourceGroup().id, 'contributor')
    var contributorRoleDefinitionId = resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')
    
  2. Kaynak tanımlarının altına şunları ekleyin:

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

Dağıtım betiğini oluşturma

Artık dağıtım betiği için tüm önkoşullara sahipsiniz. Dağıtım betiğinin ihtiyaç duyduğu ortak değerlerle başlarsınız. Rol ataması ve blob depolama kapsayıcısı olarak iki bağımlılık vardır. Betiğinizin çalıştırılabilmesi için bu bağımlılıkların her ikisinin de mevcut olması gerekir.

  1. variables azuredeploy.json bölümünü şunları içerecek şekilde düzenleyin:

    "deploymentScriptName": "CopyConfigScript"
    
  2. resources azuredeploy.json bölümünü şunları içerecek şekilde düzenleyin:

    {
        "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. Kaynağa betiği ve diğer gerekli değerleri tanımlayan bir properties bölüm ekleyin.

    "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. Şablonu kaydedin.

  1. main.bicep dosyasındaki değişken tanımlarının altına şunları ekleyin:

    var deploymentScriptName = 'CopyConfigScript'
    
  2. Kaynak tanımlarının altına şunları ekleyin:

    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. Kaynağa betiği ve diğer gerekli değerleri tanımlayan bir properties bölüm ekleyin.

    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. Şablonu kaydedin.

Şablon çıkışı ekleme

Artık Azure Blob Depolama'a dosya yükleyen bir dağıtım betiğiniz olduğuna göre, daha sonra otomasyonda bu dosya konumuna başvurmanız gerekebilir. (Dosyanın olması gerektiğini düşündüğünüz yerde olduğunu doğrulamak için bir test çalıştırabilirsiniz.)

ARM şablonunun resources bölümünden sonra, dağıtım betiği tarafından bildirilen dosyanın URI'sine başvuran bir çıkış ekleyin.

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

Dosyanın alt kısmında, kaynak tanımlarından sonra, dağıtım betiği tarafından bildirilen dosyanın URI'sine başvuran bir çıkış ekleyin.

output fileUri string = deploymentScript.properties.outputs.Uri

Şablonunuzu doğrulama

Şablonunuz şöyle görünmelidir:

{
    "$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

Aksi takdirde, örneği kopyalayın veya şablonunuzu örnekle eşleşecek şekilde ayarlayın.

Şablonu dağıtma

Bu şablonu Azure’a dağıtmak için, Visual Studio Code terminalinden Azure hesabınızda oturum açmanız gerekir. Azure CLI araçlarını yüklediğinizden emin olun.

  1. Terminal menüsünde Yeni Terminal’i seçin. Terminal penceresi genellikle ekranınızın alt yarısında açılır.

  2. Terminal penceresinde sağ tarafta bash görüntüleniyorsa, doğru kabuk zaten açık demektir. Alternatif olarak, sağ tarafta bir bash kabuğu simgesi görürseniz kabuğu başlatmak için bunu seçebilirsiniz.

    Bash seçeneğinin gösterildiği Visual Studio Code terminal penceresinin ekran görüntüsü.

    Bash dışında bir kabuk görüntülenirse, kabuk açılan okunu ve ardından Git Bash'i seçin.

    Terminal kabuğu açılan listesinin gösterildiği ve Git Bash Varsayılanı'nın seçili olduğu Visual Studio Code terminal penceresinin ekran görüntüsü.

  3. Terminalde, şablonunuzu kaydettiğiniz dizine gidin. Örneğin, şablonunuzu templates klasörüne kaydettiyseniz şu komutu kullanabilirsiniz:

    cd templates
    

Azure CLI kullanarak Azure'da oturum açma

  1. Visual Studio Code terminalinde aşağıdaki komutu çalıştırarak Azure'da oturum açın:

    az login
    
  2. Açılan tarayıcıda Azure hesabınızda oturum açın.

    Visual Studio Code terminali, bu hesapla ilişkili aboneliklerin listesini görüntüler.

  3. Listede, bu alıştırma için kullanmak istediğiniz aboneliği bulun.

    Oturum açma listesinden listeyi kaçırdıysanız, aboneliklerinizi yeniden listelemek için aşağıdaki kod parçacığını kullanabilirsiniz.

    az account list --output table
    
  4. Bu oturumda çalıştırdığınız tüm Azure CLI komutları için varsayılan aboneliği ayarlayın.

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

Bu şablonu Azure’a dağıtmak için, Visual Studio Code terminalinden Azure hesabınızda oturum açmanız gerekir. Azure CLI araçlarını yüklediğinizden emin olun.

  1. Terminal menüsünde Yeni Terminal’i seçin. Terminal penceresi genellikle ekranınızın alt yarısında açılır.

  2. Terminal penceresinde sağ tarafta bash görüntüleniyorsa, doğru kabuk zaten açık demektir. Alternatif olarak, sağ tarafta bir bash kabuğu simgesi görürseniz kabuğu başlatmak için bunu seçebilirsiniz.

    Bash seçeneğinin gösterildiği Visual Studio Code terminal penceresinin ekran görüntüsü.

    Bash dışında bir kabuk görüntülenirse, kabuk açılan okunu ve ardından Git Bash'i seçin.

    Terminal kabuğu açılan listesinin gösterildiği ve Git Bash Varsayılanı'nın seçili olduğu Visual Studio Code terminal penceresinin ekran görüntüsü.

  3. Terminalde, şablonunuzu kaydettiğiniz dizine gidin. Örneğin, şablonunuzu templates klasörüne kaydettiyseniz şu komutu kullanabilirsiniz:

    cd templates
    

Bicep'i yükleme

Bicep'in en son sürümüne sahip olduğunuzdan emin olmak için aşağıdaki komutu çalıştırın:

az bicep install && az bicep upgrade

Azure CLI kullanarak Azure'da oturum açma

  1. Visual Studio Code terminalinde aşağıdaki komutu çalıştırarak Azure'da oturum açın:

    az login
    
  2. Açılan tarayıcıda Azure hesabınızda oturum açın.

    Visual Studio Code terminali, bu hesapla ilişkili aboneliklerin listesini görüntüler.

  3. Listede, bu alıştırma için kullanmak istediğiniz aboneliği bulun.

    Oturum açma listesinden listeyi kaçırdıysanız, aboneliklerinizi yeniden listelemek için aşağıdaki kod parçacığını kullanabilirsiniz.

    az account list --output table
    
  4. Bu oturumda çalıştırdığınız tüm Azure CLI komutları için varsayılan aboneliği ayarlayın.

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

Bu şablonu Azure'a dağıtmak için Visual Studio Code terminalinden Azure hesabınızda oturum açın. Azure PowerShell'i yüklediğinizden emin olun ve korumalı alanı etkinleştiren hesapta oturum açın.

  1. Terminal menüsünde Yeni Terminal’i seçin. Terminal penceresi genellikle ekranınızın alt yarısında açılır.

  2. Terminal penceresinde pwsh veya powershell sağ tarafta görüntüleniyorsa, doğru kabuğun zaten açık olduğu anlamına gelir. Alternatif olarak, sağ tarafta bir PowerShell kabuğu simgesi görürseniz kabuğu başlatmak için bunu seçebilirsiniz.

    Kabuk açılan listesinde pwsh seçeneğinin görüntülendiği Visual Studio Code terminal penceresinin ekran görüntüsü.

    pwsh veya powershell dışında bir kabuk görünürse, kabuk açılan okunu ve ardından PowerShell'i seçin.

    Terminal kabuğu açılan listesinin gösterildiği ve PowerShell'in seçili olduğu Visual Studio Code terminal penceresinin ekran görüntüsü.

  3. Terminalde, şablonunuzu kaydettiğiniz dizine gidin. Örneğin, şablonunuzu templates klasörüne kaydettiyseniz şu komutu kullanabilirsiniz:

    Set-Location -Path templates
    

Azure PowerShell kullanarak Azure’da oturum açma

  1. Visual Studio Code terminalinde aşağıdaki komutu çalıştırarak Azure'da oturum açın:

    Connect-AzAccount
    
  2. Açılan tarayıcıda Azure hesabınızda oturum açın.

  3. Aşağıdaki komutu çalıştırarak bu alıştırmada kullanmak istediğiniz aboneliğin kimliğini alın:

    Get-AzSubscription
    

    Abonelik kimliği, ikinci sütundur. İkinci sütunu kopyalayın. aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e4e gibi görünür.

  4. Bu oturumda çalıştırdığınız tüm Azure PowerShell komutları için varsayılan aboneliği ayarlayın.

    Set-AzContext -SubscriptionId {Your subscription ID}
    

Bu şablonu Azure'a dağıtmak için Visual Studio Code terminalinden Azure hesabınızda oturum açın. Azure PowerShell'i yüklediğinizden emin olun.

  1. Terminal menüsünde Yeni Terminal’i seçin. Terminal penceresi genellikle ekranınızın alt yarısında açılır.

  2. Terminal penceresinde pwsh veya powershell sağ tarafta görüntüleniyorsa, doğru kabuğun zaten açık olduğu anlamına gelir. Alternatif olarak, sağ tarafta bir PowerShell kabuğu simgesi görürseniz kabuğu başlatmak için bunu seçebilirsiniz.

    Kabuk açılan listesinde pwsh seçeneğinin görüntülendiği Visual Studio Code terminal penceresinin ekran görüntüsü.

    pwsh veya powershell dışında bir kabuk görünürse, kabuk açılan okunu ve ardından PowerShell'i seçin.

    Terminal kabuğu açılan listesinin gösterildiği ve PowerShell'in seçili olduğu Visual Studio Code terminal penceresinin ekran görüntüsü.

  3. Terminalde, şablonunuzu kaydettiğiniz dizine gidin. Örneğin, şablonunuzu templates klasörüne kaydettiyseniz şu komutu kullanabilirsiniz:

    Set-Location -Path templates
    

Bicep CLI'yi yükleme

Azure PowerShell'den Bicep'i kullanmak için Bicep CLI'yı yükleyin.

Azure PowerShell kullanarak Azure’da oturum açma

  1. Visual Studio Code terminalinde aşağıdaki komutu çalıştırarak Azure'da oturum açın:

    Connect-AzAccount
    
  2. Açılan tarayıcıda Azure hesabınızda oturum açın.

  3. Aşağıdaki komutu çalıştırarak bu alıştırmada kullanmak istediğiniz aboneliğin kimliğini alın:

    Get-AzSubscription
    

    Abonelik kimliği, ikinci sütundur. İkinci sütunu kopyalayın. aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e4e gibi görünür.

  4. Bu oturumda çalıştırdığınız tüm Azure PowerShell komutları için varsayılan aboneliği ayarlayın.

    Set-AzContext -SubscriptionId {Your subscription ID}
    

Ardından, bu alıştırmanın bir parçası olarak oluşturduğunuz kaynakları içerecek bir kaynak grubu oluşturmanız gerekir. Yeni bir kaynak grubu kullanarak, alıştırmadan sonra temizlemeyi daha kolay hale getireceksiniz.

Visual Studio Code'daki terminalden şu komutu çalıştırarak bu alıştırmanın kaynak grubunu oluşturun:

Alıştırma için kaynak grubu oluşturma

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

Not

Kaynak grubunuz için farklı bir ad kullanıyorsanız betiği güncelleştirdiğinizden emin olmanız gerekir. Bu modülün ilerleyen bölümlerinde, betiklerinizde kaynak grubu adlarının sabit kodlu olmasını önlemeyi göreceksiniz.

Şablonu Azure’a dağıtma

Aşağıdaki kod ARM şablonunu Azure'a dağıtır. Başarılı bir dağıtım görmelisiniz.

Visual Studio Code terminalinde Azure CLI komutlarını kullanarak şablonu dağıtın.

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

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

Aşağıdaki kod ARM şablonunu Azure'a dağıtır. Başarılı bir dağıtım görmelisiniz.

Visual Studio Code terminalinde Azure CLI komutlarını kullanarak şablonu dağıtın.

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

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

Aşağıdaki kod şablonu Azure'a dağıtır. Başarılı bir dağıtım görmelisiniz.

Terminalde Azure PowerShell komutlarını kullanarak şablonu dağıtın.

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

Aşağıdaki kod şablonu Azure'a dağıtır. Başarılı bir dağıtım görmelisiniz.

Terminalde Azure PowerShell komutlarını kullanarak şablonu dağıtın.

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

Şablonunuzun sonucunu gözden geçirin

Dağıtım tamamlandıktan sonra, dağıtım betiğinizin blob depolamaya kopyaladığınız dosyayı gösteren bir URL verilir.

  1. Dağıtım betiğinin düzgün çalıştığını onaylamak için şablon dağıtımındaki URL çıkışını kullanarak bu dosyayı alın.

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

    komutu aşağıdaki kodu döndürür.

    {
      "environment": "production",
      "hostname": "tailwindtraders.com",
      "Logging": {
        "LogLevel": {
          "Default": "Debug"
        }
      },
      "ApplicationInsights": {
        "InstrumentationKey": ""
      },
      "AllowedHosts": "*",
      "CosmosDb": {
        "Host": "",
        "Key": "",
        "Database": "Products"
      }
    }
    
  2. Azure portalından günlükleri ve dağıtımla ilgili diğer ayrıntıları gözden geçirin. Veya aşağıdaki komutu kullanabilirsiniz.

    az deployment-scripts show-log --resource-group $resourceGroupName --name CopyConfigScript
    
  1. Dağıtım betiğinin düzgün çalıştığını onaylamak için şablon dağıtımındaki URL çıkışını kullanarak bu dosyayı alın.

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

    komutu aşağıdaki kodu döndürür.

    environment         : production
    hostname            : tailwindtraders.com
    Logging             : @{LogLevel=}
    ApplicationInsights : @{InstrumentationKey=}
    AllowedHosts        : *
    CosmosDb            : @{Host=; Key=; Database=Products}
    
  2. Azure portalından günlükleri ve dağıtımla ilgili diğer ayrıntıları gözden geçirin. Veya aşağıdaki komutu kullanabilirsiniz.

    Get-AzDeploymentScriptLog -ResourceGroupName $resourceGroupName -Name CopyConfigScript
    

Kaynak grubunu temizleme

Bir ARM şablonunu dağıtım betiğiyle başarıyla dağıttığınız için, oluşturduğunuz tüm kaynakları ve rol atamalarını içeren kaynak grubunu kaldırabilirsiniz.

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