Alıştırma - ARM şablonuna dağıtım betiği ekleme
Ö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.
Visual Studio Code'u açın.
azuredeploy.json adlı yeni bir dosya oluşturun.
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.
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" } } ] }Şablonu kaydedin.
Visual Studio Code'u açın.
main.bicep adlı yeni bir dosya oluşturun.
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.
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' } }Ş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.
variablesazuredeploy.json bölümünü şunları içerecek şekilde düzenleyin:"userAssignedIdentityName": "configDeployer",resourcesazuredeploy.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]" }Şablonu kaydedin.
main.bicep dosyasındaki değişken tanımlarının altına şunları ekleyin:
var userAssignedIdentityName = 'configDeployer'Kaynak tanımlarının altına şunları ekleyin:
resource userAssignedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2018-11-30' = { name: userAssignedIdentityName location: resourceGroup().location }Ş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.
variablesazuredeploy.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')]",resourcesazuredeploy.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" } }Şablonu kaydedin.
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')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' } }Ş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.
variablesazuredeploy.json bölümünü şunları içerecek şekilde düzenleyin:"deploymentScriptName": "CopyConfigScript"resourcesazuredeploy.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'))]": {} } } }Kaynağa betiği ve diğer gerekli değerleri tanımlayan bir
propertiesbö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" }Şablonu kaydedin.
main.bicep dosyasındaki değişken tanımlarının altına şunları ekleyin:
var deploymentScriptName = 'CopyConfigScript'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 ] }Kaynağa betiği ve diğer gerekli değerleri tanımlayan bir
propertiesbö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' }Ş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.
Terminal menüsünde Yeni Terminal’i seçin. Terminal penceresi genellikle ekranınızın alt yarısında açılır.
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 dışında bir kabuk görüntülenirse, kabuk açılan okunu ve ardından Git Bash'i seçin.
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
Visual Studio Code terminalinde aşağıdaki komutu çalıştırarak Azure'da oturum açın:
az loginAçı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.
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 tableBu 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.
Terminal menüsünde Yeni Terminal’i seçin. Terminal penceresi genellikle ekranınızın alt yarısında açılır.
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 dışında bir kabuk görüntülenirse, kabuk açılan okunu ve ardından Git Bash'i seçin.
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
Visual Studio Code terminalinde aşağıdaki komutu çalıştırarak Azure'da oturum açın:
az loginAçı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.
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 tableBu 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.
Terminal menüsünde Yeni Terminal’i seçin. Terminal penceresi genellikle ekranınızın alt yarısında açılır.
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.
pwsh veya powershell dışında bir kabuk görünürse, kabuk açılan okunu ve ardından PowerShell'i seçin.
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
Visual Studio Code terminalinde aşağıdaki komutu çalıştırarak Azure'da oturum açın:
Connect-AzAccountAçılan tarayıcıda Azure hesabınızda oturum açın.
Aşağıdaki komutu çalıştırarak bu alıştırmada kullanmak istediğiniz aboneliğin kimliğini alın:
Get-AzSubscriptionAbonelik kimliği, ikinci sütundur. İkinci sütunu kopyalayın. aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e4e gibi görünür.
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.
Terminal menüsünde Yeni Terminal’i seçin. Terminal penceresi genellikle ekranınızın alt yarısında açılır.
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.
pwsh veya powershell dışında bir kabuk görünürse, kabuk açılan okunu ve ardından PowerShell'i seçin.
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
Visual Studio Code terminalinde aşağıdaki komutu çalıştırarak Azure'da oturum açın:
Connect-AzAccountAçılan tarayıcıda Azure hesabınızda oturum açın.
Aşağıdaki komutu çalıştırarak bu alıştırmada kullanmak istediğiniz aboneliğin kimliğini alın:
Get-AzSubscriptionAbonelik kimliği, ikinci sütundur. İkinci sütunu kopyalayın. aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e4e gibi görünür.
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.
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 $urikomutu 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" } }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
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 $fileUrikomutu aşağıdaki kodu döndürür.
environment : production hostname : tailwindtraders.com Logging : @{LogLevel=} ApplicationInsights : @{InstrumentationKey=} AllowedHosts : * CosmosDb : @{Host=; Key=; Database=Products}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