Übung: Bereitstellen von Erweiterungsressourcen und Verwenden vorhandener Ressourcen

Abgeschlossen

Nachdem Sie die Erstellung der Datenbank für Ihr Forschungs- und Entwicklungsteam nun abgeschlossen haben, müssen Sie sicherstellen, dass der Zugriff auf die Datenbank protokolliert wird. Sie verfügen über einen vorhandenen Log Analytics-Arbeitsbereich, an den diese Protokolle gesendet werden sollen. Sie müssen die Protokolle außerdem aus dem Speicherkonto des Forschungs- und Entwicklungsteams an denselben Log Analytics-Arbeitsbereich senden. In dieser Übung aktualisieren Sie Ihre Bicep-Datei, um diese Anforderungen zu erfüllen.

In dem Prozess gehen Sie wie folgt vor:

  • Erstellen Sie einen Log Analytics-Arbeitsbereich.
  • Aktualisieren Sie Ihre Bicep-Datei, um Ihrem Cosmos DB-Konto Diagnoseeinstellungen hinzuzufügen.
  • Erstellen Sie ein Speicherkonto.
  • Aktualisieren Sie in Ihrer Bicep-Datei die Diagnoseeinstellungen für das Speicherkonto.
  • Stellen Sie die Vorlage bereit, und überprüfen Sie das Ergebnis.

Erstellen eines Log Analytics-Arbeitsbereichs

Erstellen Sie einen Log Analytics-Arbeitsbereich, um zu simulieren, dass in Ihrer Organisation bereits ein Arbeitsbereich erstellt wurde. Verwenden der Azure CLI anstelle von Bicep.

Führen Sie im Terminal den folgenden Azure CLI-Befehl aus:

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

Erstellen Sie einen Log Analytics-Arbeitsbereich, um zu simulieren, dass in Ihrer Organisation bereits ein Arbeitsbereich erstellt wurde. Verwenden von Azure PowerShell anstelle von Bicep.

Führen Sie im Terminal den folgenden Azure PowerShell-Befehl aus:

New-AzOperationalInsightsWorkspace `
  -Name ToyLogs `
  -Location eastus

Hinweis

In diesem Beispiel stellen Sie den Log Analytics-Arbeitsbereich im selben Abonnement und in derselben Ressourcengruppe wie Ihre anderen Ressourcen bereit. In vielen Situationen speichern Sie Log Analytics-Arbeitsbereiche in Ressourcengruppen, die nicht mit denen Ihrer Anwendungsressourcen identisch sind. Bicep kann dennoch darauf verweisen.

Hinzufügen von Diagnoseeinstellungen für Azure Cosmos DB

Ihr Forschungs- und Entwicklungsteam muss alle Anforderungen an das Azure Cosmos DB-Konto protokollieren. Sie entscheiden sich für die Verwendung der Azure Monitor-Integration für Azure Cosmos DB, um das DataPlaneRequests-Protokoll zu erfassen, das Informationen zu Anforderungen an Azure Cosmos DB enthält.

Nachdem Sie nun Ihren simuliert bereits vorhandenen Log Analytics-Arbeitsbereich erstellt haben, können Sie in Ihrer Bicep-Vorlage auf ihn als vorhandene Ressource verweisen. Sie können ihn als Ziel für die Azure Cosmos DB-Protokolle verwenden.

Führen Sie die folgenden Schritte aus, um Diagnoseeinstellungen hinzuzufügen:

  1. Öffnen Sie in Visual Studio Code die Datei main.bicep im Editor, und fügen Sie dann unterhalb der vorhandenen Variablendefinitionen den folgenden Code hinzu:

    var logAnalyticsWorkspaceName = 'ToyLogs'
    var cosmosDBAccountDiagnosticSettingsName = 'route-logs-to-log-analytics'
    
  2. Fügen Sie am Ende der Datei unterhalb der Ressourcendefinitionen folgenden Code hinzu:

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

    Beachten Sie, dass diese Ressourcendefinition das Schlüsselwort existing verwendet und dass Sie absichtlich andere Eigenschaften auslassen, die Sie normalerweise angeben würden, wenn Sie den Log Analytics-Arbeitsbereich über diese Bicep-Vorlage bereitstellten.

  3. Fügen Sie unter dem Code, den Sie gerade hinzugefügt haben, den folgenden Code hinzu:

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

    Beachten Sie, dass mit diesem Code eine Erweiterungsressource bereitgestellt wird. Er verwendet das Schlüsselwort scope, um Bicep anzuweisen, dass die Ressource an das Azure Cosmos DB-Konto angefügt werden soll. Der Code verwendet auch die id-Eigenschaft der vorhandenen logAnalyticsWorkspace-Ressource, sodass Azure erkennt, wohin die Azure Cosmos DB-Protokolle zu senden sind.

Erstellen eines Speicherkontos für Spielzeugdesigndokumente

Erstellen Sie ein Azure-Speicherkonto, um zu simulieren, dass Ihr Forschungs- und Entwicklungsteam bereits eins in Ihrer Organisation erstellt hat. Verwenden der Azure CLI anstelle von Bicep.

Führen Sie im Terminal den folgenden Azure CLI-Befehl aus. Ersetzen Sie {storageaccountname} durch einen Namen, der wahrscheinlich eindeutig ist. Der Name muss vollständig aus Kleinbuchstaben bestehen, maximal 24 Zeichen lang sein und darf keine Leerzeichen oder Sonderzeichen enthalten. Notieren Sie sich den Namen zur späteren Verwendung.

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

Erstellen Sie ein Azure-Speicherkonto, um zu simulieren, dass Ihr Forschungs- und Entwicklungsteam bereits eins in Ihrer Organisation erstellt hat. Verwenden von Azure PowerShell anstelle von Bicep.

Führen Sie im Terminal den folgenden Azure PowerShell-Befehl aus. Ersetzen Sie {storageaccountname} durch einen Namen, der wahrscheinlich eindeutig ist. Der Name muss vollständig aus Kleinbuchstaben bestehen, maximal 24 Zeichen lang sein und darf keine Leerzeichen oder Sonderzeichen enthalten.

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

Hinzufügen von Diagnoseeinstellungen für das Speicherkonto

Ihr Forschungs- und Entwicklungsteam möchte, dass Sie alle erfolgreichen Anforderungen in dem von ihm erstellten Speicherkonto protokollieren. Sie entscheiden sich für die Verwendung der Azure Storage-Integration mit Azure Monitor-Protokollen, um dieses Ziel zu erreichen. Sie entscheiden sich, alle Lese-, Schreib- und Löschaktivitäten im Blobspeicher im Speicherkonto des Forschungs- und Entwicklungsteams zu protokollieren.

Sie müssen Ihre Bicep-Vorlage aktualisieren, um auf das Speicherkonto zu verweisen, das Sie im vorherigen Schritt erstellt haben.

  1. Fügen Sie am Anfang der Datei main.bicep unterhalb der Parameterdefinitionen die folgende Parameterdefinition hinzu:

    param storageAccountName string
    
  2. Fügen Sie unter den Variablendefinitionen die folgende Variablendefinition hinzu:

    var storageAccountBlobDiagnosticSettingsName = 'route-logs-to-log-analytics'
    
  3. Fügen Sie am Ende der Datei unter den Ressourcendefinitionen folgende Definition hinzu:

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

    Beachten Sie, dass beide Ressourcen das Schlüsselwort existing verwenden.

  4. Fügen Sie unten in der Datei unter der Definition des Speicherkontos, die Sie im vorherigen Schritt hinzugefügt haben, den folgenden Code hinzu:

    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
          }
        ]
      }
    }
    

    Beachten Sie, dass der scope dieser Erweiterungsressource auf die geschachtelte vorhandene Ressource festgelegt ist. Bicep erkennt, dass die Erweiterungsressource an die untergeordnete Ressource blobServices angefügt werden soll.

    Wenn Sie fertig sind, sollte Ihre vollständige Bicep-Vorlage wie folgt aussehen:

    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. Speichern Sie die Änderungen in der Datei.

Bereitstellen der Vorlage in Azure

Führen Sie im Terminal den folgenden Azure CLI-Befehl aus. Ersetzen Sie {storageaccountname} durch den Namen des Speicherkontos, das Sie früher in dieser Übung erstellt haben.

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

Führen Sie im Terminal den folgenden Azure PowerShell-Befehl aus. Ersetzen Sie {storageaccountname} durch den Namen des Speicherkontos, das Sie früher in dieser Übung erstellt haben.

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

Überprüfen Ihrer Bereitstellung

  1. Navigieren Sie in Ihrem Browser zum Azure-Portal zurück. Wechseln Sie zu Ihrer Ressourcengruppe. Es wird noch immer eine erfolgreiche Bereitstellung angezeigt, da diese denselben Namen wie die erste Bereitstellung verwendet hat.

  2. Wählen Sie den Link 1 Succeeded (1 erfolgreich) aus.

  3. Wählen Sie die Bereitstellung mit dem Namen main aus, und wählen Sie dann Bereitstellungsdetails aus, um die Liste der bereitgestellten Ressourcen zu erweitern.

    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.

    Beachten Sie, dass zwei Ressourcen mit dem Typ Microsoft.Insights/diagnosticSettings aufgelistet sind. Diese Ressourcen sind die Erweiterungsressourcen, die Sie bereitgestellt haben. Eine der Ressourcen wurde an das Speicherkonto und die andere an das Azure Cosmos DB-Konto angefügt. Nun können Sie überprüfen, ob die Azure Cosmos DB-Diagnoseeinstellungen ordnungsgemäß konfiguriert sind.

  4. Wählen Sie die Azure Cosmos DB-Kontoressource aus. Das Portal wird mit dem Azure Cosmos DB-Konto geöffnet.

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

  5. Geben Sie im Suchfeld links oben Diagnoseeinstellungen ein, und wählen Sie das Menüelement Diagnoseeinstellungen aus.

    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. Möglicherweise werden Sie im Azure-Portal aufgefordert, die Unterstützung von Volltextabfragen für die Protokollierung zu aktivieren. Sie benötigen sie für diese Übung nicht und können daher Nicht jetzt auswählen.

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

  7. Beachten Sie, dass es eine Diagnoseeinstellung namens route-logs-to-log-analytics gibt, die so konfiguriert ist, dass die Protokolle an den ToyLogs-Arbeitsbereich weitergeleitet werden.

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

    Wenn Sie möchten, können Sie auch überprüfen, ob für das Speicherkonto eine ähnliche Diagnoseeinstellung für Blob Storage aktiviert ist.