Ćwiczenie — wdrażanie zasobów rozszerzenia i używanie istniejących zasobów

Ukończone

Teraz, po zakończeniu tworzenia bazy danych dla zespołu ds. analizy i wdrażania, musisz upewnić się, że dostęp do bazy danych jest rejestrowany. Masz istniejący obszar roboczy usługi Log Analytics, do którego mają być wysyłane te dzienniki. Należy również wysłać dzienniki z konta magazynu zespołu R&D do tego samego obszaru roboczego usługi Log Analytics. W tym ćwiczeniu zaktualizujesz plik Bicep, aby spełnić te wymagania.

Podczas tego procesu wykonasz następujące czynności:

  • Utworzenie obszaru roboczego usługi Log Analytics.
  • Zaktualizuj plik Bicep, aby dodać ustawienia diagnostyczne do konta usługi Cosmos DB.
  • Create a storage account (Tworzenie konta magazynu).
  • W pliku Bicep zaktualizuj ustawienia diagnostyczne dla konta magazynu.
  • Wdróż szablon i sprawdź wynik.

Tworzenie obszaru roboczego usługi Log Analytics

Utwórz obszar roboczy usługi Log Analytics, aby symulować utworzenie go już w organizacji. Użyj interfejsu wiersza polecenia platformy Azure zamiast Bicep.

W terminalu uruchom następujące polecenie interfejsu wiersza polecenia platformy Azure:

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

Utwórz obszar roboczy usługi Log Analytics, aby symulować utworzenie go już w organizacji. Użyj programu Azure PowerShell zamiast Bicep.

W terminalu uruchom następujące polecenie programu Azure PowerShell:

New-AzOperationalInsightsWorkspace `
  -Name ToyLogs `
  -Location eastus

Uwaga

W tym przykładzie wdrażasz obszar roboczy usługi Log Analytics w tej samej subskrypcji i grupie zasobów co inne zasoby. W wielu sytuacjach obszary robocze usługi Log Analytics będą przechowywane w grupach zasobów, które nie są takie same jak zasoby aplikacji. Bicep nadal może się do nich odwoływać.

Dodawanie ustawień diagnostycznych dla usługi Azure Cosmos DB

Twój zespół ds. analizy danych musi rejestrować wszystkie żądania na koncie usługi Azure Cosmos DB. Postanawiasz użyć integracji usługi Azure Monitor dla usługi Azure Cosmos DB do zbierania dziennika DataPlaneRequests , który zawiera informacje o żądaniach do usługi Azure Cosmos DB.

Po utworzeniu symulowanego wstępnie istniejącego obszaru roboczego usługi Log Analytics możesz odwoływać się do niego z poziomu szablonu Bicep jako istniejącego zasobu. Można go użyć jako miejsca docelowego dzienników usługi Azure Cosmos DB.

Aby dodać ustawienia diagnostyki, wykonaj następujące kroki:

  1. W programie Visual Studio Code otwórz plik main.bicep w edytorze, a następnie poniżej istniejących definicji zmiennych dodaj następujący kod:

    var logAnalyticsWorkspaceName = 'ToyLogs'
    var cosmosDBAccountDiagnosticSettingsName = 'route-logs-to-log-analytics'
    
  2. W dolnej części pliku poniżej definicji zasobów dodaj następujący kod:

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

    Zwróć uwagę, że ta definicja zasobu używa słowa kluczowego existing i że celowo pomijasz inne właściwości, które zwykle należy określić, jeśli wdrażasz obszar roboczy usługi Log Analytics za pomocą tego szablonu Bicep.

  3. Poniżej właśnie dodanego kodu dodaj następujący kod:

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

    Zwróć uwagę, że ten kod wdraża zasób rozszerzenia. Używa słowa kluczowego scope , aby poinformować Bicep, że zasób powinien być dołączony do konta usługi Azure Cosmos DB. Kod używa id również właściwości istniejącego logAnalyticsWorkspace zasobu, aby platforma Azure zrozumiała, gdzie wysyłać dzienniki usługi Azure Cosmos DB.

Tworzenie konta magazynu dla dokumentów projektu toy

Utwórz konto usługi Azure Storage, aby zasymulować już utworzone konto zespołu ds. analizy danych w organizacji. Użyj interfejsu wiersza polecenia platformy Azure zamiast Bicep.

W terminalu uruchom następujące polecenie interfejsu wiersza polecenia platformy Azure. Zastąp {storageaccountname} ciąg nazwą, która prawdopodobnie będzie unikatowa. Nazwa musi zawierać tylko małe litery, zawierać 24 lub mniej znaków i nie ma spacji ani znaków specjalnych. Zanotuj nazwę do późniejszego użycia.

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

Utwórz konto usługi Azure Storage, aby zasymulować już utworzone konto zespołu ds. analizy danych w organizacji. Użyj programu Azure PowerShell zamiast Bicep.

W terminalu uruchom następujące polecenie programu Azure PowerShell. Zastąp {storageaccountname} ciąg nazwą, która prawdopodobnie będzie unikatowa. Nazwa musi zawierać tylko małe litery, zawierać 24 lub mniej znaków i nie ma spacji ani znaków specjalnych.

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

Dodawanie ustawień diagnostycznych dla konta magazynu

Twój zespół ds. ściągnięcia chce zarejestrować wszystkie pomyślnie utworzone żądania do konta magazynu. Postanawiasz użyć integracji usługi Azure Storage z dziennikami usługi Azure Monitor, aby osiągnąć ten cel. Decydujesz się rejestrować wszystkie działania odczytu, zapisu i usuwania w usłudze Blob Storage na koncie magazynu zespołu ds.

Musisz zaktualizować szablon Bicep, aby odwoływać się do konta magazynu utworzonego w poprzednim kroku.

  1. W górnej części pliku main.bicep poniżej definicji parametrów dodaj następującą definicję parametru:

    param storageAccountName string
    
  2. W obszarze definicji zmiennych dodaj następującą definicję zmiennej:

    var storageAccountBlobDiagnosticSettingsName = 'route-logs-to-log-analytics'
    
  3. W dolnej części pliku w obszarze definicji zasobów dodaj następującą definicję:

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

    Zwróć uwagę, że oba te zasoby używają słowa kluczowego existing .

  4. W dolnej części pliku poniżej definicji konta magazynu dodanej w poprzednim kroku dodaj następujący kod:

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

    Zwróć uwagę, że ten zasób rozszerzenia ma ustawiony scope na zagnieżdżony istniejący zasób. Bicep rozumie, że powinien dołączyć zasób rozszerzenia do zasobu podrzędnego blobServices .

    Po zakończeniu kompletny szablon Bicep powinien wyglądać następująco:

    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-11-15' = {
      name: cosmosDBAccountName
      location: location
      properties: {
        databaseAccountOfferType: 'Standard'
        locations: [
          {
            locationName: location
          }
        ]
      }
    }
    
    resource cosmosDBDatabase 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases@2024-11-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. Zapisz zmiany w pliku.

Wdrażanie szablonu na platformie Azure

W terminalu uruchom następujące polecenie interfejsu wiersza polecenia platformy Azure. Zastąp {storageaccountname} ciąg nazwą konta magazynu utworzonego wcześniej w tym ćwiczeniu.

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

W terminalu uruchom następujące polecenie programu Azure PowerShell. Zastąp {storageaccountname} ciąg nazwą konta magazynu utworzonego wcześniej w tym ćwiczeniu.

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

Sprawdzanie wdrożenia

  1. W przeglądarce wróć do witryny Azure Portal. Przejdź do grupy zasobów. Nadal widzisz jedno pomyślne wdrożenie, ponieważ wdrożenie używało tej samej nazwy co pierwsze wdrożenie.

  2. Wybierz link 1 Powodzenie.

  3. Wybierz wdrożenie o nazwie main, a następnie wybierz pozycję Szczegóły wdrożenia, aby rozwinąć listę wdrożonych zasobów.

    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.

    Zwróć uwagę, że na liście znajdują się dwa zasoby o typie Microsoft.Insights/diagnosticSettings. Te zasoby to wdrożone zasoby rozszerzenia. Jeden z zasobów został dołączony do konta magazynu, a drugi został dołączony do konta usługi Azure Cosmos DB. Teraz możesz sprawdzić, czy ustawienia diagnostyczne usługi Azure Cosmos DB są poprawnie skonfigurowane.

  4. Wybierz zasób konta usługi Azure Cosmos DB. Portal zostanie otwarty na koncie usługi Azure Cosmos DB.

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

  5. W polu Wyszukaj w lewym górnym rogu wprowadź ustawienia diagnostyczne i wybierz element menu Ustawienia diagnostyczne.

    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. Witryna Azure Portal może monitować o włączenie obsługi zapytań pełnotekstowych na potrzeby rejestrowania. Nie potrzebujesz go w tym ćwiczeniu, więc wybierz pozycję Nie teraz.

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

  7. Zwróć uwagę, że istnieje ustawienie diagnostyczne o nazwie route-logs-to-log-analytics, które jest skonfigurowane do kierowania dzienników do obszaru roboczego ToyLogs .

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

    Jeśli chcesz, możesz również sprawdzić, czy konto magazynu ma podobne ustawienie diagnostyczne włączone dla magazynu obiektów blob.