Esercizio - Aggiungere uno script di distribuzione a un modello di ARM
Importante
Per completare questo esercizio è necessaria una sottoscrizione di Azure propria e potrebbero essere applicati costi. Se non si ha già una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Nell'ambito del processo di distribuzione dell'applicazione, è necessario creare un account di archiviazione e impostare nell'archiviazione BLOB lo staging di un file che verrà letto dall'applicazione. Fino a questo punto, il file è stato copiato manualmente ogni volta che viene configurato un nuovo ambiente. Si decide di usare uno script di distribuzione per automatizzare questo passaggio come parte del processo di creazione dell'ambiente.
In questo esercizio si accetta un modello di Azure Resource Manager (ARM) esistente e si aggiunge un nuovo script di distribuzione.
Durante questo processo, è possibile:
- Creare un modello iniziale.
- Aggiungere i prerequisiti per gli script di distribuzione, tra cui un'identità gestita assegnata dall'utente e un'assegnazione di ruolo.
- Aggiungere uno script di distribuzione.
- Distribuire il modello e verificare il risultato.
Questo esercizio usa gli strumenti di Azure Resource Manager per Visual Studio Code. Assicurarsi di installare questa estensione in Visual Studio Code.
Questo esercizio usa l'estensione Bicep per Visual Studio Code. Assicurarsi di installare questa estensione in Visual Studio Code.
Creare il modello iniziale
Si inizia con un modello esistente che il team sta già usando. Il modello crea l'account di archiviazione, configura i servizi BLOB e le richieste HTTPS, quindi crea il contenitore BLOB per i file di configurazione.
Aprire Visual Studio Code.
Creare un nuovo file denominato azuredeploy.json.
Salvare il file vuoto in modo che Visual Studio Code carichi gli strumenti del modello di ARM.
È possibile selezionare File>Salva con nome o selezionare Ctrl+S in Windows (⌘+S su macOS). Assicurarsi e ricordare dove è stato salvato il file. Ad esempio, è possibile creare una cartella script in cui salvarla.
Copiare il modello iniziale seguente in 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" } } ] }Salvare il modello.
Aprire Visual Studio Code.
Creare un nuovo file denominato main.bicep.
Salvare il file vuoto in modo che Visual Studio Code possa caricare gli strumenti di Bicep.
È possibile selezionare File>Salva con nome o selezionare Ctrl+S in Windows (⌘+S su macOS). Assicurarsi di ricordare dove è stato salvato il file. Ad esempio, è possibile creare una cartella scripts in cui salvarla.
Copiare il modello iniziale seguente in 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' } }Salvare il modello.
Aggiungere un'identità gestita assegnata dall'utente
Successivamente, è necessario creare un'identità gestita assegnata dall'utente. Considerando l'approccio basato su infrastruttura come codice, è possibile creare l'identità nel modello.
Modificare la
variablessezione di azuredeploy.json per includere:"userAssignedIdentityName": "configDeployer",Modificare la
resourcessezione di azuredeploy.json per includere:{ "type": "Microsoft.ManagedIdentity/userAssignedIdentities", "apiVersion": "2018-11-30", "name": "[variables('userAssignedIdentityName')]", "location": "[resourceGroup().location]" }Salvare il modello.
Nelle definizioni delle variabili in main.bicep aggiungere:
var userAssignedIdentityName = 'configDeployer'Nelle definizioni delle risorse aggiungere:
resource userAssignedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2018-11-30' = { name: userAssignedIdentityName location: resourceGroup().location }Salvare il modello.
Impostare il ruolo di collaboratore per l'identità gestita
Ora che è stata definita un'identità gestita, è possibile assegnarle un ruolo con i diritti per il gruppo di risorse. Assegnargli il ruolo Collaboratore. Un ruolo si identifica in base al relativo ID definizione del ruolo, ovvero un GUID. Il ruolo Collaboratore è integrato in Azure in modo che l'ID definizione del ruolo sia documentato.
L'assegnazione del ruolo richiede anche un nome di GUID. È possibile usare la funzione guid per creare un GUID univoco per il gruppo di risorse e il nome del ruolo.
Modificare la
variablessezione di azuredeploy.json per includere:"roleAssignmentName": "[guid(concat(resourceGroup().id, 'contributor'))]", "contributorRoleDefinitionId": "[resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",Modificare la
resourcessezione di azuredeploy.json per includere:{ "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" } }Salvare il modello.
Nelle definizioni delle variabili in main.bicep aggiungere:
var roleAssignmentName = guid(resourceGroup().id, 'contributor') var contributorRoleDefinitionId = resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')Nelle definizioni delle risorse aggiungere:
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = { name: roleAssignmentName properties: { roleDefinitionId: contributorRoleDefinitionId principalId: userAssignedIdentity.properties.principalId principalType: 'ServicePrincipal' } }Salvare il modello.
Creare lo script di distribuzione
A questo punto, sono stati soddisfatti tutti i prerequisiti per lo script di distribuzione. Si inizia con i valori comuni necessari per lo script di distribuzione. Esistono due dipendenze, l'assegnazione di ruolo e il contenitore di archiviazione BLOB. Prima di poter eseguire lo script, è necessario che entrambe queste dipendenze esistano.
Modificare la
variablessezione di azuredeploy.json per includere:"deploymentScriptName": "CopyConfigScript"Modificare la
resourcessezione di azuredeploy.json per includere:{ "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'))]": {} } } }Aggiungere una
propertiessezione alla risorsa che definisce lo script e gli altri valori obbligatori."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" }Salvare il modello.
Nelle definizioni delle variabili in main.bicep aggiungere:
var deploymentScriptName = 'CopyConfigScript'Nelle definizioni delle risorse aggiungere:
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2020-10-01' = { name: deploymentScriptName location: resourceGroup().location kind: 'AzurePowerShell' identity: { type: 'UserAssigned' userAssignedIdentities: { '${userAssignedIdentity.id}': {} } } dependsOn: [ roleAssignment blobContainer ] }Aggiungere una
propertiessezione alla risorsa che definisce lo script e gli altri valori obbligatori.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' }Salvare il modello.
Aggiungere un output del modello
Dopo aver creato uno script di distribuzione che carica un file in Archiviazione BLOB di Azure, può essere necessario fare riferimento alla posizione di tale file in un'automazione successiva. Forse esegui un test per verificare che il file sia dove pensi che dovrebbe essere.
Dopo la sezione resources del modello di ARM, aggiungere un output che fa riferimento all'URI del file indicato dallo script di distribuzione.
"outputs": {
"fileUri": {
"type": "string",
"value": "[reference(variables('deploymentScriptName')).outputs.Uri]"
}
}
Alla fine del file, dopo le definizioni delle risorse, aggiungere un output che fa riferimento all'URI del file indicato dallo script di distribuzione.
output fileUri string = deploymentScript.properties.outputs.Uri
Verificare il modello
Il modello sarà simile al seguente:
{
"$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
In caso contrario, copiare l'esempio oppure modificare il modello in modo che corrisponda all'esempio.
Distribuire il modello
Per distribuire questo modello in Azure, è necessario accedere all'account Azure dal terminale di Visual Studio Code. Assicurarsi di aver installato gli strumenti dell'interfaccia della riga di comando di Azure .
Scegliere Nuovo terminale dal menu Terminale. La finestra del terminale si apre solitamente nella parte inferiore della schermata.
Se la finestra del terminale visualizza bash sul lato destro, significa che la shell corretta è già aperta. In alternativa, se a destra viene visualizzata l'icona di una shell bash, è possibile selezionarla per avviare la shell.
Se viene visualizzata una shell diversa da bash , selezionare la freccia a discesa della shell e quindi selezionare Git Bash.
Nel terminale passare alla directory in cui è stato salvato il modello. Ad esempio, se il modello è stato salvato nella cartella templates , è possibile usare questo comando:
cd templates
Accedere ad Azure usando l'interfaccia della riga di comando di Azure
Nel terminale di Visual Studio Code accedere ad Azure eseguendo il comando seguente:
az loginNel browser visualizzato accedere al proprio account Azure.
Il terminale di Visual Studio Code mostra un elenco delle sottoscrizioni associate a questo account.
Nell'elenco trovare la sottoscrizione da usare per questo esercizio.
Se l'elenco non è stato visualizzato all'accesso, è possibile usare il frammento di codice seguente per elencare di nuovo le sottoscrizioni.
az account list --output tableImpostare la sottoscrizione predefinita per tutti i comandi dell'interfaccia della riga di comando di Azure eseguiti in questa sessione.
az account set --subscription "Your Subscription Name or ID"
Per distribuire questo modello in Azure, è necessario accedere all'account Azure dal terminale di Visual Studio Code. Assicurarsi di aver installato gli strumenti dell'interfaccia della riga di comando di Azure .
Scegliere Nuovo terminale dal menu Terminale. La finestra del terminale si apre solitamente nella parte inferiore della schermata.
Se la finestra del terminale visualizza bash sul lato destro, significa che la shell corretta è già aperta. In alternativa, se a destra viene visualizzata l'icona di una shell bash, è possibile selezionarla per avviare la shell.
Se viene visualizzata una shell diversa da bash , selezionare la freccia a discesa della shell e quindi selezionare Git Bash.
Nel terminale passare alla directory in cui è stato salvato il modello. Ad esempio, se il modello è stato salvato nella cartella templates , è possibile usare questo comando:
cd templates
Installare Bicep
Eseguire il comando seguente per assicurarsi che sia installata la versione più recente di Bicep:
az bicep install && az bicep upgrade
Accedere ad Azure usando l'interfaccia della riga di comando di Azure
Nel terminale di Visual Studio Code accedere ad Azure eseguendo il comando seguente:
az loginNel browser visualizzato accedere al proprio account Azure.
Il terminale di Visual Studio Code mostra un elenco delle sottoscrizioni associate a questo account.
Nell'elenco trovare la sottoscrizione da usare per questo esercizio.
Se l'elenco non è stato visualizzato all'accesso, è possibile usare il frammento di codice seguente per elencare di nuovo le sottoscrizioni.
az account list --output tableImpostare la sottoscrizione predefinita per tutti i comandi dell'interfaccia della riga di comando di Azure eseguiti in questa sessione.
az account set --subscription "Your Subscription Name or ID"
Per distribuire questo modello in Azure, accedere all'account Azure dal terminale di Visual Studio Code. Assicurarsi di aver installato Azure PowerShell e di accedere allo stesso account che ha attivato la sandbox.
Scegliere Nuovo terminale dal menu Terminale. La finestra del terminale si apre solitamente nella parte inferiore della schermata.
Se la finestra del terminale visualizza pwsh o PowerShell sul lato destro, significa che la shell corretta è già aperta. In alternativa, se a destra viene visualizzata l'icona di una shell di PowerShell, è possibile selezionarla per avviare la shell.
Se viene visualizzata una shell diversa da pwsh o PowerShell , selezionare la freccia a discesa della shell e quindi selezionare PowerShell.
Nel terminale passare alla directory in cui è stato salvato il modello. Ad esempio, se il modello è stato salvato nella cartella templates , è possibile usare questo comando:
Set-Location -Path templates
Accedere ad Azure usando Azure PowerShell
Nel terminale di Visual Studio Code accedere ad Azure eseguendo il comando seguente:
Connect-AzAccountNel browser visualizzato accedere al proprio account Azure.
Ottenere l'ID della sottoscrizione da usare per questo esercizio eseguendo il comando seguente:
Get-AzSubscriptionL'ID sottoscrizione è la seconda colonna. Copiare la seconda colonna. Sembra simile a aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.
Impostare la sottoscrizione predefinita per tutti i comandi di Azure PowerShell eseguiti in questa sessione.
Set-AzContext -SubscriptionId {Your subscription ID}
Per distribuire questo modello in Azure, accedere all'account Azure dal terminale di Visual Studio Code. Assicurarsi di aver installato Azure PowerShell.
Scegliere Nuovo terminale dal menu Terminale. La finestra del terminale si apre solitamente nella parte inferiore della schermata.
Se la finestra del terminale visualizza pwsh o PowerShell sul lato destro, significa che la shell corretta è già aperta. In alternativa, se a destra viene visualizzata l'icona di una shell di PowerShell, è possibile selezionarla per avviare la shell.
Se viene visualizzata una shell diversa da pwsh o PowerShell , selezionare la freccia a discesa della shell e quindi selezionare PowerShell.
Nel terminale passare alla directory in cui è stato salvato il modello. Ad esempio, se il modello è stato salvato nella cartella templates , è possibile usare questo comando:
Set-Location -Path templates
Installare l'interfaccia della riga di comando di Bicep
Per usare Bicep da Azure PowerShell, installare l'interfaccia della riga di comando di Bicep.
Accedere ad Azure usando Azure PowerShell
Nel terminale di Visual Studio Code accedere ad Azure eseguendo il comando seguente:
Connect-AzAccountNel browser visualizzato accedere al proprio account Azure.
Ottenere l'ID della sottoscrizione da usare per questo esercizio eseguendo il comando seguente:
Get-AzSubscriptionL'ID sottoscrizione è la seconda colonna. Copiare la seconda colonna. Sembra simile a aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.
Impostare la sottoscrizione predefinita per tutti i comandi di Azure PowerShell eseguiti in questa sessione.
Set-AzContext -SubscriptionId {Your subscription ID}
Successivamente, è necessario creare un gruppo di risorse per contenere le risorse create come parte di questo esercizio. Usando un nuovo gruppo di risorse, si renderà più semplice la pulizia dopo l'esercizio.
Nel terminale di Visual Studio Code eseguire questo comando per creare il gruppo di risorse per questo esercizio:
Creare un gruppo di risorse per l'esercizio
resourceGroupName="learndeploymentscript_exercise_1"
az group create --location eastus --name $resourceGroupName
$resourceGroupName = 'learndeploymentscript_exercise_1'
New-AzResourceGroup -Location eastus -Name $resourceGroupName
Nota
Se si usa un nome diverso per il gruppo di risorse, è necessario assicurarsi di aggiornare lo script. Più avanti in questo modulo, vedrai come evitare di inserire manualmente i nomi dei gruppi di risorse negli script.
Distribuire il modello in Azure
Il codice seguente distribuisce il modello di Azure Resource Manager in Azure. La distribuzione dovrebbe andare a buon fine.
Distribuire il modello usando i comandi dell'interfaccia della riga di comando di Azure nel terminale di 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
Il codice seguente distribuisce il modello di Azure Resource Manager in Azure. La distribuzione dovrebbe andare a buon fine.
Distribuire il modello usando i comandi dell'interfaccia della riga di comando di Azure nel terminale di 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
Il codice seguente distribuisce il modello in Azure. La distribuzione dovrebbe andare a buon fine.
Distribuire il modello usando i comandi di Azure PowerShell nel terminale.
$templateFile = 'azuredeploy.json'
$today = Get-Date -Format 'MM-dd-yyyy'
$deploymentName = "deploymentscript-$today"
New-AzResourceGroupDeployment `
-ResourceGroupName $resourceGroupName `
-Name $deploymentName `
-TemplateFile $templateFile
Il codice seguente distribuisce il modello in Azure. La distribuzione dovrebbe andare a buon fine.
Distribuire il modello usando i comandi di Azure PowerShell nel terminale.
$templateFile = 'main.bicep'
$today = Get-Date -Format 'MM-dd-yyyy'
$deploymentName = "deploymentscript-$today"
New-AzResourceGroupDeployment `
-ResourceGroupName $resourceGroupName `
-Name $deploymentName `
-TemplateFile $templateFile
Esaminare il risultato del modello
Al termine della distribuzione, verrà assegnato un URL che punta al file copiato dallo script di distribuzione in archiviazione BLOB.
Recuperare il file usando l'output dell'URL della distribuzione del modello per verificare che lo script di distribuzione funzioni correttamente.
uri=$(az deployment group show --resource-group $resourceGroupName --name $deploymentName --query 'properties.outputs.fileUri.value' --output tsv) curl $uriIl comando restituisce il codice seguente.
{ "environment": "production", "hostname": "tailwindtraders.com", "Logging": { "LogLevel": { "Default": "Debug" } }, "ApplicationInsights": { "InstrumentationKey": "" }, "AllowedHosts": "*", "CosmosDb": { "Host": "", "Key": "", "Database": "Products" } }Esaminare i log e altri dettagli sulla distribuzione dal portale di Azure. In alternativa, è possibile usare il comando seguente.
az deployment-scripts show-log --resource-group $resourceGroupName --name CopyConfigScript
Recuperare il file usando l'output dell'URL della distribuzione del modello per verificare che lo script di distribuzione funzioni correttamente.
$fileUri = (Get-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -Name $deploymentName).Outputs.fileUri.Value Invoke-RestMethod $fileUriIl comando restituisce il codice seguente.
environment : production hostname : tailwindtraders.com Logging : @{LogLevel=} ApplicationInsights : @{InstrumentationKey=} AllowedHosts : * CosmosDb : @{Host=; Key=; Database=Products}Esaminare i log e altri dettagli sulla distribuzione dal portale di Azure. In alternativa, è possibile usare il comando seguente.
Get-AzDeploymentScriptLog -ResourceGroupName $resourceGroupName -Name CopyConfigScript
Pulire il gruppo di risorse
Dopo aver distribuito correttamente un modello di ARM con uno script di distribuzione, è possibile rimuovere il gruppo di risorse che contiene tutte le risorse e le assegnazioni di ruolo create.
az group delete --name $resourceGroupName
Remove-AzResourceGroup -Name $resourceGroupName