Esercizio - Distribuire le risorse in modo condizionale
Nota
La prima volta che si attiva una sandbox e si accettano le condizioni, l'account Microsoft viene associato a una nuova directory di Azure denominata Microsoft Learn Sandbox. Si viene aggiunti anche a una sottoscrizione speciale denominata Concierge Subscription.
È necessario distribuire le risorse dell'azienda giocattolo in diversi ambienti e si desidera utilizzare parametri e condizioni per controllare ciò che viene distribuito in ciascun ambiente.
In questo esercizio verranno creati un database e un server logico Azure SQL. Si aggiungeranno quindi le impostazioni di controllo per assicurarsi che il controllo sia abilitato, facendo però in modo di abilitarlo solo quando si esegue la distribuzione in un ambiente di produzione. Ai fini del controllo, è necessario avere un account di archiviazione, che verrà anch'esso distribuito solo quando si distribuiscono le risorse in un ambiente di produzione.
Durante il processo, si eseguiranno queste operazioni:
- Creare un file Bicep che definisce un server logico con un database.
- Aggiungere un account di archiviazione e impostazioni di controllo SQL, ognuna delle quali viene distribuita con una condizione.
- Configurare un'infrastruttura per l'ambiente di sviluppo e quindi verificare il risultato.
- Ridistribuire l'infrastruttura nell'ambiente di produzione e quindi esaminare le modifiche.
In questo esercizio viene usata l'estensione Bicep per Visual Studio Code. Assicurarsi di installare questa estensione in Visual Studio Code.
Creare un modello Bicep con un server logico e un database
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 oppure premere CTRL+S in Windows (⌘+S in macOS). Assicurarsi di ricordare dove è stato salvato il file. Ad esempio, è possibile creare una cartella templates in cui salvarlo.
Per definire un server logico e un database, aggiungere il contenuto seguente al file, insieme ai parametri e alle variabili necessari per le risorse. Immettere il contenuto manualmente anziché copiarlo e incollarlo, in modo da sperimentare in prima persona l'ausilio offerto dagli strumenti quando si scrivono file Bicep.
@description('The Azure region into which the resources should be deployed.') param location string @secure() @description('The administrator login username for the SQL server.') param sqlServerAdministratorLogin string @secure() @description('The administrator login password for the SQL server.') param sqlServerAdministratorLoginPassword string @description('The name and tier of the SQL database SKU.') param sqlDatabaseSku object = { name: 'Standard' tier: 'Standard' } var sqlServerName = 'teddy${location}${uniqueString(resourceGroup().id)}' var sqlDatabaseName = 'TeddyBear' resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = { name: sqlServerName location: location properties: { administratorLogin: sqlServerAdministratorLogin administratorLoginPassword: sqlServerAdministratorLoginPassword } } resource sqlDatabase 'Microsoft.Sql/servers/databases@2023-08-01-preview' = { parent: sqlServer name: sqlDatabaseName location: location sku: sqlDatabaseSku }
Si noti che tutti i parametri includono elementi Decorator
@description
, che ne semplificano l'uso. Si noti anche che ai parametrisqlServerAdministratorLogin
esqlServerAdministratorLoginPassword
è applicato l'elemento Decorator@secure
. Ciò indica a Bicep che i valori dei parametri sono sensibili. Azure non stampa i valori sensibili nei log.
Aggiungere un account di archiviazione
Nelle impostazioni di controllo per i server logici è necessario specificare un account di archiviazione per i dati di controllo. Si aggiornerà il file Bicep per creare l'account di archiviazione, ma solo per i casi in cui il controllo è abilitato.
Sotto le dichiarazioni di parametri aggiungere i parametri seguenti:
@description('The name of the environment. This must be Development or Production.') @allowed([ 'Development' 'Production' ]) param environmentName string = 'Development' @description('The name of the audit storage account SKU.') param auditStorageAccountSkuName string = 'Standard_LRS'
Sotto le dichiarazioni di variabili aggiungere le variabili seguenti:
var auditingEnabled = environmentName == 'Production' var auditStorageAccountName = take('bearaudit${location}${uniqueString(resourceGroup().id)}', 24)
Si noti che si sta creando una variabile denominata
auditingEnabled
, che verrà usata come condizione per la distribuzione delle risorse di controllo. Quando si crea una variabile di questo tipo, si rende il codice Bicep più chiaro e più facile da leggere. Chiunque guardi le condizioni nelle risorse comprenderà cosa sta accadendo.Si noti anche che la variabile
auditStorageAccountName
usa una funzione denominatatake()
. I nomi degli account di archiviazione hanno una lunghezza massima di 24 caratteri, quindi questa funzione taglia la parte finale della stringa per fare in modo che il nome sia valido.Nella parte inferiore del file, sotto le risorse, aggiungere la definizione di risorsa seguente per l'account di archiviazione:
resource auditStorageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = if (auditingEnabled) { name: auditStorageAccountName location: location sku: { name: auditStorageAccountSkuName } kind: 'StorageV2' }
Si noti che le definizioni per l'account di archiviazione includono la parola chiave
if
, che specifica una condizione di distribuzione.
Aggiungere impostazioni di controllo
Sotto la risorsa account di archiviazione appena aggiunta aggiungere quanto segue:
resource sqlServerAudit 'Microsoft.Sql/servers/auditingSettings@2023-08-01-preview' = if (auditingEnabled) { parent: sqlServer name: 'default' properties: { state: 'Enabled' storageEndpoint: environmentName == 'Production' ? auditStorageAccount.properties.primaryEndpoints.blob : '' storageAccountAccessKey: environmentName == 'Production' ? listKeys(auditStorageAccount.id, auditStorageAccount.apiVersion).keys[0].value : '' } }
Si noti che la definizione include la stessa condizione
if
dell'account di archiviazione. Le proprietàstorageEndpoint
estorageAccountAccessKey
usano inoltre l'operatore ternario punto interrogativo (?
) per assicurare che i relativi valori siano sempre validi. In caso contrario, Azure Resource Manager valuta i valori dell'espressione prima della condizione di distribuzione della risorsa e restituisce un errore, perché non è possibile trovare l'account di archiviazione.Salvare le modifiche apportate al file.
Verificare il file Bicep
Al termine di tutte le modifiche precedenti, il file Bicep avrà un aspetto simile al seguente:
@description('The Azure region into which the resources should be deployed.')
param location string
@secure()
@description('The administrator login username for the SQL server.')
param sqlServerAdministratorLogin string
@secure()
@description('The administrator login password for the SQL server.')
param sqlServerAdministratorLoginPassword string
@description('The name and tier of the SQL database SKU.')
param sqlDatabaseSku object = {
name: 'Standard'
tier: 'Standard'
}
@description('The name of the environment. This must be Development or Production.')
@allowed([
'Development'
'Production'
])
param environmentName string = 'Development'
@description('The name of the audit storage account SKU.')
param auditStorageAccountSkuName string = 'Standard_LRS'
var sqlServerName = 'teddy${location}${uniqueString(resourceGroup().id)}'
var sqlDatabaseName = 'TeddyBear'
var auditingEnabled = environmentName == 'Production'
var auditStorageAccountName = take('bearaudit${location}${uniqueString(resourceGroup().id)}', 24)
resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = {
name: sqlServerName
location: location
properties: {
administratorLogin: sqlServerAdministratorLogin
administratorLoginPassword: sqlServerAdministratorLoginPassword
}
}
resource sqlDatabase 'Microsoft.Sql/servers/databases@2023-08-01-preview' = {
parent: sqlServer
name: sqlDatabaseName
location: location
sku: sqlDatabaseSku
}
resource auditStorageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = if (auditingEnabled) {
name: auditStorageAccountName
location: location
sku: {
name: auditStorageAccountSkuName
}
kind: 'StorageV2'
}
resource sqlServerAudit 'Microsoft.Sql/servers/auditingSettings@2023-08-01-preview' = if (auditingEnabled) {
parent: sqlServer
name: 'default'
properties: {
state: 'Enabled'
storageEndpoint: environmentName == 'Production' ? auditStorageAccount.properties.primaryEndpoints.blob : ''
storageAccountAccessKey: environmentName == 'Production' ? listKeys(auditStorageAccount.id, auditStorageAccount.apiVersion).keys[0].value : ''
}
}
In caso contrario, copiare l'esempio oppure modificare il modello in modo che corrisponda all'esempio.
Distribuire il modello Bicep in Azure
Per distribuire questo modello in Azure, è necessario accedere all'account Azure dal terminale di Visual Studio Code. Assicurarsi che sia installata l'interfaccia della riga di comando di Azure e ricordarsi di accedere con lo stesso account usato per attivare la sandbox.
Dal menu Terminale scegliere Nuovo terminale. La finestra del terminale si apre solitamente nella parte inferiore della schermata.
Se la shell visualizzata sul lato destro della finestra del terminale è bash, significa che è aperta la shell corretta ed è possibile passare alla sezione successiva.
Se viene visualizzata una shell diversa da bash, selezionare l'elenco a discesa delle shell e quindi Azure Cloud Shell (Bash).
Nell'elenco delle shell del terminale selezionare bash.
Nel terminale passare alla directory in cui è stato salvato il modello. Se, ad esempio, il salvataggio del modello è stato eseguito 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
Nel terminale di Visual Studio Code accedere ad Azure eseguendo il comando seguente:
az login
Nel browser visualizzato accedere al proprio account Azure.
Il terminale di Visual Studio Code mostra un elenco delle sottoscrizioni associate a questo account.
Impostare la sottoscrizione predefinita per tutti i comandi dell'interfaccia della riga di comando di Azure eseguiti in questa sessione.
az account set --subscription "Concierge Subscription"
Nota
Se di recente sono state usate più sandbox, il terminale potrebbe mostrare più istanze di Concierge Subscription. In questo caso, attenersi ai due passaggi seguenti per impostarne una come predefinita. Se il comando precedente ha avuto esito positivo ed è elencata una sola Concierge Subscription, ignorare i due passaggi successivi.
Ottenere gli ID della sottoscrizione Concierge Subscription.
az account list \ --refresh \ --query "[?contains(name, 'Concierge Subscription')].id" \ --output table
Impostare la sottoscrizione predefinita usando l'ID sottoscrizione. Sostituire {your subscription ID} con l'ID della sottoscrizione Concierge Subscription più recente.
az account set --subscription {your subscription ID}
Impostare il gruppo di risorse predefinito
Se si usa l'interfaccia della riga di comando di Azure, in questo esercizio è possibile impostare il gruppo di risorse predefinito e omettere il parametro dal resto dei comandi dell'interfaccia della riga di comando di Azure. Impostare come gruppo di risorse predefinito quello creato nell'ambiente sandbox.
az configure --defaults group="<rgn>[sandbox resource group name]</rgn>"
Distribuire il modello in Azure usando l'interfaccia della riga di comando di Azure
Nel terminale di Visual Studio Code distribuire il modello Bicep in Azure eseguendo il codice seguente. Si noti che il parametro location
viene impostato in modo esplicito su westus3
.
az deployment group create --template-file main.bicep --parameters location=westus3
Per distribuire questo modello in Azure, accedere all'account Azure dal terminale di Visual Studio Code. Assicurarsi che sia stato installato Azure PowerShell e di accedere allo stesso account con cui è stata attivata la sandbox.
Dal menu Terminale scegliere Nuovo terminale. La finestra del terminale si apre solitamente nella parte inferiore della schermata.
Se la shell visualizzata sul lato destro della finestra del terminale è PowerShell o pwsh, la shell corretta è aperta ed è possibile passare alla sezione successiva.
Se viene visualizzata una shell diversa da powershell o pwsh, selezionare l'elenco a discesa delle shell e quindi PowerShell.
Nell'elenco delle shell del terminale selezionare powershell o pwsh.
Nel terminale passare alla directory in cui è stato salvato il modello. Se, ad esempio, il salvataggio del modello è stato eseguito 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 eseguire il comando seguente:
Connect-AzAccount
Verrà aperta una finestra del browser per accedere all'account Azure.
Una volta effettuato l'accesso ad Azure, il terminale mostra un elenco delle sottoscrizioni associate all'account.
Se è stata attivata la sandbox, viene visualizzata una sottoscrizione denominata Concierge Subscription. Usarla nella parte rimanente dell'esercizio.
Impostare la sottoscrizione predefinita per tutti i comandi di Azure PowerShell eseguiti in questa sessione.
$context = Get-AzSubscription -SubscriptionName 'Concierge Subscription' Set-AzContext $context
Nota
Se di recente sono state usate più sandbox, il terminale potrebbe mostrare più istanze di Concierge Subscription. In questo caso, attenersi ai due passaggi seguenti per impostarne una come predefinita. Se il comando precedente ha avuto esito positivo ed è elencata una sola Concierge Subscription, ignorare i due passaggi successivi.
Ottenere l'ID sottoscrizione. Eseguendo il comando seguente vengono elencate le sottoscrizioni e i rispettivi ID. Cercare
Concierge Subscription
e quindi copiare l'ID dalla seconda colonna. Il risultato sarà simile a:aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
.Get-AzSubscription
Modificare la sottoscrizione attiva impostandola su Concierge Subscription. Assicurarsi di sostituire {Your subscription ID} con l'ID copiato.
$context = Get-AzSubscription -SubscriptionId {Your subscription ID} Set-AzContext $context
Impostare il gruppo di risorse predefinito
In questo esercizio è possibile impostare il gruppo di risorse predefinito e omettere il parametro dal resto dei comandi di Azure PowerShell. Impostare come predefinito il gruppo di risorse creato automaticamente nell'ambiente sandbox.
Set-AzDefault -ResourceGroupName <rgn>[sandbox resource group name]</rgn>
Distribuire il modello in Azure usando Azure PowerShell
Nel terminale di Visual Studio Code distribuire il modello in Azure eseguendo il comando di Azure PowerShell seguente. Il processo può richiedere alcuni minuti, dopo i quali la distribuzione sarà completata.
New-AzResourceGroupDeployment -TemplateFile main.bicep -location westus3
Quando si esegue la distribuzione, viene richiesto di immettere i valori per i parametri sqlServerAdministratorLogin
e sqlServerAdministratorLoginPassword
.
Suggerimento
Quando si immettono i parametri protetti, i valori scelti devono seguire determinate regole:
sqlServerAdministratorLogin
non deve essere un nome di accesso facile da indovinare, ad esempioadmin
oroot
. Può contenere solo caratteri alfanumerici e deve iniziare con una lettera.sqlServerAdministratorLoginPassword
deve contenere almeno otto caratteri e includere lettere minuscole e maiuscole, numeri e simboli. Per altre informazioni sulla complessità delle password, vedere i criteri password di SQL Azure.
Se i valori dei parametri non soddisfano i requisiti, Azure SQL non distribuirà il server logico.
Assicurarsi anche di prendere nota dell'account di accesso e della password immessi. Queste informazioni verranno usate di nuovo a breve.
Poiché non è stato specificato un valore per il parametro environmentName
, viene usato il valore predefinito Development
.
Attendere il completamento della distribuzione. Se la distribuzione ha esito negativo con un messaggio che indica che una località non accetta la creazione di nuovi server di database SQL di Microsoft Azure, selezionare un'area diversa come eastus
o eastus2
.
Verificare la distribuzione
Usare il portale di Azure per esaminare le risorse distribuite e i risultati di ogni distribuzione.
Passare al portale di Azure e verificare di trovarsi nella sottoscrizione sandbox seguendo questa procedura:
a. Selezionare l'avatar in alto a destra.
b. Selezionare Cambia directory. Nell'elenco selezionare la directory Microsoft Learn Sandbox.Nel riquadro sinistro selezionare Gruppi di risorse.
Selezionare
[nome gruppo di risorse sandbox] .Nella sezione Panoramica è possibile osservare che una distribuzione è stata completata. È anche possibile vedere che sono stati distribuiti un server logico e un database SQL, mentre l'account di archiviazione per il controllo non è stato distribuito.
Nota
L'account di archiviazione con un nome che inizia con
cloudshell
non è correlato alla distribuzione ed è stato creato dalla sandbox di Learn.Accanto a Distribuzioni selezionare 1 Riuscita per visualizzare i dettagli della distribuzione.
Selezionare la distribuzione denominata main per visualizzare le risorse distribuite e quindi selezionare Dettagli della distribuzione per espanderla.
In questo caso, vengono distribuiti un server logico e un database SQL. Si noti che l'account di archiviazione e le impostazioni di controllo non sono presenti nell'elenco delle risorse.
Lasciare aperta la pagina nel browser. Le distribuzioni verranno controllate di nuovo in un momento successivo.
Eseguire di nuovo la distribuzione per l'ambiente di produzione
Nella distribuzione precedente è stato usato il valore predefinito per il parametro environmentName
, ovvero Development
.
Si imposterà ora il valore del parametro in modo esplicito su Production
. Si prevede che, apportando questa modifica, verrà distribuito l'account di archiviazione a scopo di controllo e il controllo verrà abilitato nel server logico.
Distribuire il modello per l'ambiente di produzione
Nel terminale di Visual Studio Code distribuire il modello Bicep in Azure eseguendo il codice seguente:
az deployment group create --template-file main.bicep --parameters environmentName=Production location=westus3
Nel terminale di Visual Studio Code distribuire il modello in Azure eseguendo il comando di Azure PowerShell seguente:
New-AzResourceGroupDeployment -TemplateFile main.bicep -environmentName Production -location westus3
Attenzione
Assicurarsi di usare lo stesso account di accesso e la stessa password usati in precedenza o la distribuzione non verrà completata correttamente.
Dopo uno o due minuti, la distribuzione verrà completata.
Verificare la nuova distribuzione
Per completare questo esercizio, verificare che la nuova distribuzione sia stata completata correttamente e che il controllo sia stato abilitato.
Tornare al portale di Azure e passare al gruppo di risorse. Se il gruppo di risorse è già aperto, selezionare Aggiorna.
Si noterà che è stato distribuito un account di archiviazione aggiuntivo a scopo di controllo.
Selezionare il server logico (cercare la risorsa con il tipo SQL Server).
Nel campo di ricerca immettere Controllo. In Sicurezza selezionare Controllo.
Verificare che il controllo sia abilitato per il server logico.