Esercizio - Distribuire le risorse in modo condizionale

Completato

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

  1. Aprire Visual Studio Code.

  2. Creare un nuovo file denominato main.bicep.

  3. 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.

  4. 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 parametri sqlServerAdministratorLogin e sqlServerAdministratorLoginPassword è 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.

  1. 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'
    
  2. 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 denominata take(). 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.

  3. 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

  1. 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 e storageAccountAccessKey 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.

  2. 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.

  1. Dal menu Terminale scegliere Nuovo terminale. La finestra del terminale si apre solitamente nella parte inferiore della schermata.

  2. Se la shell visualizzata sul lato destro della finestra del terminale è bash, significa che è aperta la shell corretta ed è possibile passare alla sezione successiva.

    Screenshot della finestra del terminale di Visual Studio Code con l'opzione bash visualizzata.

  3. Se viene visualizzata una shell diversa da bash, selezionare l'elenco a discesa delle shell e quindi Azure Cloud Shell (Bash).

    Screenshot della finestra del terminale di Visual Studio Code, con l'elenco a discesa della shell del terminale e l'opzione Git Bash (predefinita) selezionata.

  4. Nell'elenco delle shell del terminale selezionare bash.

    Screenshot della finestra del terminale di Visual Studio Code con il terminale bash selezionato.

  5. 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

  1. Nel terminale di Visual Studio Code accedere ad Azure eseguendo il comando seguente:

    az login
    
  2. Nel browser visualizzato accedere al proprio account Azure.

    Il terminale di Visual Studio Code mostra un elenco delle sottoscrizioni associate a questo account.

  3. 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.

  4. Ottenere gli ID della sottoscrizione Concierge Subscription.

     az account list \
       --refresh \
       --query "[?contains(name, 'Concierge Subscription')].id" \
       --output table
    
  5. 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.

  1. Dal menu Terminale scegliere Nuovo terminale. La finestra del terminale si apre solitamente nella parte inferiore della schermata.

  2. Se la shell visualizzata sul lato destro della finestra del terminale è PowerShell o pwsh, la shell corretta è aperta ed è possibile passare alla sezione successiva.

    Screenshot della finestra del terminale di Visual Studio Code con l'opzione pwsh visualizzata nell'elenco a discesa della shell.

  3. Se viene visualizzata una shell diversa da powershell o pwsh, selezionare l'elenco a discesa delle shell e quindi PowerShell.

    Screenshot della finestra del terminale di Visual Studio Code, con l'elenco a discesa della shell del terminale visualizzato e PowerShell selezionato.

  4. Nell'elenco delle shell del terminale selezionare powershell o pwsh.

    Screenshot della finestra del terminale di Visual Studio Code con il terminale PowerShell selezionato.

  5. 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

  1. Nel terminale di Visual Studio Code eseguire il comando seguente:

    Connect-AzAccount
    

    Verrà aperta una finestra del browser per accedere all'account Azure.

  2. 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.

  3. 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.

  4. 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
    
  5. 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 esempio admin o root. 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.

  1. 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.

  2. Nel riquadro sinistro selezionare Gruppi di risorse.

  3. Selezionare [nome gruppo di risorse sandbox].

  4. 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.

    Screenshot del riquadro di panoramica del gruppo di risorse del portale di Azure con una sezione che mostra la corretta esecuzione di una distribuzione.

  5. Accanto a Distribuzioni selezionare 1 Riuscita per visualizzare i dettagli della distribuzione.

    Screenshot del riquadro di panoramica del gruppo di risorse del portale di Azure con dettagli aggiuntivi sulla corretta esecuzione della distribuzione.

  6. 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.

    Screenshot del riquadro di panoramica del gruppo di risorse del portale di Azure per la distribuzione specifica, con un server logico e una risorsa database.

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

  1. 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.

    Screenshot del riquadro di panoramica del gruppo di risorse del portale di Azure che mostra che è stato distribuito un account di archiviazione per il controllo.

  2. Selezionare il server logico (cercare la risorsa con il tipo SQL Server).

  3. Nel campo di ricerca immettere Controllo. In Sicurezza selezionare Controllo.

    Screenshot dell'interfaccia del portale di Azure per il server logico che mostra il campo di ricerca con la parola Controllo.

  4. Verificare che il controllo sia abilitato per il server logico.

    Screenshot dell'interfaccia del portale di Azure per il server logico che mostra che la configurazione di controllo è abilitata.