Esercizio: Distribuire le risorse di estensione e usare le risorse esistenti

Completato

Dopo aver completato la creazione del database da usare per il team R&D, è necessario assicurarsi che l'accesso al database venga registrato. È presente un'area di lavoro Log Analytics esistente a cui si vuole inviare questi log. È anche necessario inviare i log dall'account di archiviazione del team Ricerca e sviluppo alla stessa area di lavoro Log Analytics. In questo esercizio si aggiorna il file Bicep per soddisfare questi requisiti.

Durante il processo, si eseguiranno queste operazioni:

  • Creare un'area di lavoro Log Analytics.
  • Aggiornare il file Bicep per aggiungere le impostazioni di diagnostica all'account Cosmos DB.
  • Creare un account di archiviazione.
  • Nel file Bicep aggiornare le impostazioni di diagnostica per l'account di archiviazione.
  • Distribuire il modello e verificare il risultato.

Creare un'area di lavoro Log Analytics

Creare un'area di lavoro Log Analytics per simulare che ne sia già stata creata una nell'organizzazione. Usare l'interfaccia della riga di comando di Azure anziché Bicep.

Nel terminale eseguire il comando dell'interfaccia della riga di comando di Azure seguente:

az monitor log-analytics workspace create \
  --workspace-name ToyLogs \
  --location eastus

Creare un'area di lavoro Log Analytics per simulare che ne sia già stata creata una nell'organizzazione. Usare Azure PowerShell anziché Bicep.

Nel terminale, eseguire il comando di Azure PowerShell seguente:

New-AzOperationalInsightsWorkspace `
  -Name ToyLogs `
  -Location eastus

Nota

In questo esempio si distribuisce l'area di lavoro Log Analytics nella stessa sottoscrizione e nello stesso gruppo di risorse delle altre risorse. In molte situazioni le aree di lavoro Log Analytics verranno archiviate in gruppi di risorse diversi da quelli delle risorse dell'applicazione. Bicep può comunque fare riferimento a essi.

Aggiungere le impostazioni di diagnostica per Azure Cosmos DB

Il team Ricerca e sviluppo deve registrare tutte le richieste all'account Azure Cosmos DB. Si decide di usare l'integrazione Monitoraggio di Azure per Azure Cosmos DB per raccogliere il log DataPlaneRequests che contiene informazioni sulle richieste ad Azure Cosmos DB.

Dopo aver creato l'area di lavoro Log Analytics preesistente simulata, è possibile farvi riferimento dall'interno del modello Bicep come risorsa esistente. È possibile usarla come destinazione per i log Azure Cosmos DB.

Per aggiungere le impostazioni di diagnostica, seguire questa procedura:

  1. In Visual Studio Code aprire il file main.bicep nell’editor e quindi, sotto le definizioni delle variabili esistenti, aggiungere il codice seguente:

    var logAnalyticsWorkspaceName = 'ToyLogs'
    var cosmosDBAccountDiagnosticSettingsName = 'route-logs-to-log-analytics'
    
  2. Nella parte inferiore del file, sotto le definizioni delle risorse, aggiungere il codice seguente:

    resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2023-09-01' existing = {
      name: logAnalyticsWorkspaceName
    }
    

    Si noti che questa definizione di risorsa usa la parola chiave existing e che si stanno omettendo di proposito altre proprietà che normalmente vengono specificate se si distribuisce l'area di lavoro Log Analytics tramite questo modello Bicep.

  3. Sotto il codice appena aggiunto aggiungere il codice seguente:

    resource cosmosDBAccountDiagnostics 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = {
      scope: cosmosDBAccount
      name: cosmosDBAccountDiagnosticSettingsName
      properties: {
        workspaceId: logAnalyticsWorkspace.id
        logs: [
          {
            category: 'DataPlaneRequests'
            enabled: true
          }
        ]
      }
    }
    

    Si noti che questo codice distribuisce una risorsa di estensione. Usa la parola chiave scope per indicare a Bicep che la risorsa deve essere collegata all'account Azure Cosmos DB. Il codice usa anche la proprietà id della risorsa esistente logAnalyticsWorkspace in modo da indicare ad Azure dove inviare i log Azure Cosmos DB.

Creare un account di archiviazione per i documenti di progettazione dei giochi

Creare un account di archiviazione di Azure per simulare che il team Ricerca e sviluppo abbia già creato un account di archiviazione nell'organizzazione. Usare l'interfaccia della riga di comando di Azure anziché Bicep.

Nel terminale eseguire il comando dell'interfaccia della riga di comando di Azure seguente. Sostituire {storageaccountname} con un nome che probabilmente sarà univoco. Il nome deve essere tutto minuscolo, contenere un massimo di 24 caratteri e non contenere spazi o caratteri speciali. Prendere nota del nome per un utilizzo successivo.

az storage account create \
  --name {storageaccountname} \
  --location eastus

Creare un account di archiviazione di Azure per simulare che il team Ricerca e sviluppo abbia già creato un account di archiviazione nell'organizzazione. Usare Azure PowerShell anziché Bicep.

Nel terminale, eseguire il comando di Azure PowerShell seguente. Sostituire {storageaccountname} con un nome che probabilmente sarà univoco. Il nome deve essere tutto minuscolo, contenere un massimo di 24 caratteri e non contenere spazi o caratteri speciali.

New-AzStorageAccount `
  -Name {storageaccountname} `
  -Location eastus `
  -SkuName Standard_LRS

Aggiungere le impostazioni di diagnostica per l'account di archiviazione

Il team R&D vuole registrare tutte le richieste riuscite all'account di archiviazione creato. Si decide di usare l'integrazione Archiviazione di Azure con i log di Monitoraggio di Azure per raggiungere questo obiettivo. Si decide di registrare tutte le attività di lettura, scrittura ed eliminazione all'interno dell'archivio BLOB nell'account di archiviazione del team Ricerca e sviluppo.

È necessario aggiornare il modello Bicep per fare riferimento all'account di archiviazione creato nel passaggio precedente.

  1. Nella parte superiore del file main.bicep, sotto le definizioni dei parametri, aggiungere la definizione di parametro seguente:

    param storageAccountName string
    
  2. Nelle definizioni delle variabili aggiungere la definizione di variabile seguente:

    var storageAccountBlobDiagnosticSettingsName = 'route-logs-to-log-analytics'
    
  3. Nella parte inferiore del file, sotto le definizioni delle risorse, aggiungere la definizione seguente:

    resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' existing = {
      name: storageAccountName
    
      resource blobService 'blobServices' existing = {
        name: 'default'
      }
    }
    

    Si noti che entrambe queste risorse usano la parola chiave existing.

  4. Nella parte inferiore del file, sotto la definizione dell'account di archiviazione aggiunta nel passaggio precedente, aggiungere il codice seguente:

    resource storageAccountBlobDiagnostics 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = {
      scope: storageAccount::blobService
      name: storageAccountBlobDiagnosticSettingsName
      properties: {
        workspaceId: logAnalyticsWorkspace.id
        logs: [
          {
            category: 'StorageRead'
            enabled: true
          }
          {
            category: 'StorageWrite'
            enabled: true
          }
          {
            category: 'StorageDelete'
            enabled: true
          }
        ]
      }
    }
    

    Si noti che per questa risorsa di estensione scope è impostato sulla risorsa esistente annidata. Bicep individua che la risorsa di estensione deve essere collegata alla risorsa figlio blobServices.

    Al termine, il modello Bicep completo sarà simile al seguente:

    param cosmosDBAccountName string = 'toyrnd-${uniqueString(resourceGroup().id)}'
    param cosmosDBDatabaseThroughput int = 400
    param location string = resourceGroup().location
    param storageAccountName string
    
    var cosmosDBDatabaseName = 'FlightTests'
    var cosmosDBContainerName = 'FlightTests'
    var cosmosDBContainerPartitionKey = '/droneId'
    var logAnalyticsWorkspaceName = 'ToyLogs'
    var cosmosDBAccountDiagnosticSettingsName = 'route-logs-to-log-analytics'
    var storageAccountBlobDiagnosticSettingsName = 'route-logs-to-log-analytics'
    
    resource cosmosDBAccount 'Microsoft.DocumentDB/databaseAccounts@2024-05-15' = {
      name: cosmosDBAccountName
      location: location
      properties: {
        databaseAccountOfferType: 'Standard'
        locations: [
          {
            locationName: location
          }
        ]
      }
    }
    
    resource cosmosDBDatabase 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases@2024-05-15' = {
      parent: cosmosDBAccount
      name: cosmosDBDatabaseName
      properties: {
        resource: {
          id: cosmosDBDatabaseName
        }
        options: {
          throughput: cosmosDBDatabaseThroughput
        }
      }
    
      resource container 'containers' = {
        name: cosmosDBContainerName
        properties: {
          resource: {
            id: cosmosDBContainerName
            partitionKey: {
              kind: 'Hash'
              paths: [
                cosmosDBContainerPartitionKey
              ]
            }
          }
          options: {}
        }
      }
    }
    
    resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2023-09-01' existing = {
      name: logAnalyticsWorkspaceName
    }
    
    resource cosmosDBAccountDiagnostics 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = {
      scope: cosmosDBAccount
      name: cosmosDBAccountDiagnosticSettingsName
      properties: {
        workspaceId: logAnalyticsWorkspace.id
        logs: [
          {
            category: 'DataPlaneRequests'
            enabled: true
          }
        ]
      }
    }
    
    resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' existing = {
      name: storageAccountName
    
      resource blobService 'blobServices' existing = {
        name: 'default'
      }
    }
    
    resource storageAccountBlobDiagnostics 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = {
      scope: storageAccount::blobService
      name: storageAccountBlobDiagnosticSettingsName
      properties: {
        workspaceId: logAnalyticsWorkspace.id
        logs: [
          {
            category: 'StorageRead'
            enabled: true
          }
          {
            category: 'StorageWrite'
            enabled: true
          }
          {
            category: 'StorageDelete'
            enabled: true
          }
        ]
      }
    }
    
  5. Salvare le modifiche apportate al file.

Distribuire il modello in Azure

Nel terminale eseguire il comando dell'interfaccia della riga di comando di Azure seguente. Sostituire {storageaccountname} con il nome dell'account di archiviazione creato in precedenza in questo esercizio.

az deployment group create \
  --template-file main.bicep \
  --parameters storageAccountName={storageaccountname}

Nel terminale, eseguire il comando di Azure PowerShell seguente. Sostituire {storageaccountname} con il nome dell'account di archiviazione creato in precedenza in questo esercizio.

New-AzResourceGroupDeployment `
  -TemplateFile main.bicep `
  -storageAccountName {storageaccountname}

Controllare la distribuzione

  1. Nel browser tornare al portale di Azure. Passare al gruppo di risorse in uso. Viene comunque visualizzata una distribuzione corretta, perché la distribuzione ha usato lo stesso nome della prima distribuzione.

  2. Selezionare il collegamento 1 Completata.

  3. Selezionare la distribuzione denominata main e quindi scegliere Dettagli della distribuzione per espandere l'elenco delle risorse distribuite.

    Screenshot of the Azure portal interface for the specific deployment, with the Azure Cosmos DB resources as well as two resources with type Microsoft.Insights/diagnosticSettings.

    Si noti che sono elencate due risorse con tipo Microsoft.Insights/diagnosticSettings. Queste risorse sono le risorse di estensione distribuite. Una delle risorse è stata collegata all'account di archiviazione e l'altra è stata collegata all'account Azure Cosmos DB. È ora possibile verificare che le impostazioni di diagnostica di Azure Cosmos DB siano configurate correttamente.

  4. Selezionare la risorsa account Azure Cosmos DB. Il portale si apre all'account Azure Cosmos DB.

    Screenshot of the Azure portal interface for the specific deployment, with the Azure Cosmos DB account highlighted.

  5. Nella casella Cerca in alto a sinistra immettere impostazioni di diagnostica e selezionare la voce di menu Impostazioni di diagnostica.

    Screenshot of the Azure portal interface for the Azure Cosmos DB account, showing the search field with 'Diagnostic settings' entered and the 'Diagnostic settings' menu item highlighted.

  6. Il portale di Azure potrebbe richiedere di abilitare il supporto di query full-text per la registrazione. Poiché non è necessario per questo esercizio, selezionare Non ora.

    Screenshot of the Azure portal interface for the Azure Cosmos DB account showing Diagnostic settings page with prompt to enable full-text query.

  7. Si noti che è presente un'impostazione di diagnostica denominata route-logs-to-log-analytics, configurata per indirizzare i log all'area di lavoro ToyLogs .

    Screenshot of the Azure portal interface for the Azure Cosmos DB account, showing the diagnostic settings.

    Se si vuole, è anche possibile verificare che l'account di archiviazione abbia un'impostazione di diagnostica simile abilitata per l'archiviazione BLOB.