Exercício - Implantar recursos de extensão e usar recursos existentes

Concluído

Agora que terminaste de criar o banco de dados para a tua equipa de&D usar, precisas garantir que o acesso ao banco de dados seja monitorado. Você tem um espaço de trabalho existente do Log Analytics para o qual deseja que esses logs sejam enviados. Você também precisa enviar os logs da conta de armazenamento da equipe de R&D para o mesmo espaço de trabalho do Log Analytics. Neste exercício, você atualiza seu arquivo Bicep para atender a esses requisitos.

Durante o processo, você:

  • Crie um espaço de trabalho do Log Analytics.
  • Atualize seu arquivo Bicep para adicionar configurações de diagnóstico à sua conta do Azure Cosmos DB.
  • Crie uma conta de armazenamento.
  • No arquivo Bicep, atualize as configurações de diagnóstico para a conta de armazenamento.
  • Implante seu modelo e verifique o resultado.

Criar um espaço de trabalho do Log Analytics

Crie um espaço de trabalho do Log Analytics para simular ter um existente na sua organização. Use a CLI do Azure em vez do Bicep.

No terminal, execute o seguinte comando da CLI do Azure:

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

Crie um espaço de trabalho do Log Analytics para simular ter um existente na sua organização. Use o Azure PowerShell em vez do Bicep.

No terminal, execute o seguinte comando do Azure PowerShell:

New-AzOperationalInsightsWorkspace `
  -Name ToyLogs `
  -Location eastus

Observação

Neste exemplo, você implanta o espaço de trabalho do Log Analytics no mesmo grupo de assinaturas e recursos que seus outros recursos. Em muitas situações, você armazenará espaços de trabalho do Log Analytics em grupos de recursos que não são os mesmos daqueles em que os recursos do aplicativo estão. O Bíceps ainda pode fazer referência a eles.

Adicionar configurações de diagnóstico para o Azure Cosmos DB

Sua equipe de R&D precisa registrar todas as solicitações na conta do Azure Cosmos DB. Você decide usar a integração do Azure Monitor para o Azure Cosmos DB para coletar o log DataPlaneRequests , que contém informações sobre solicitações ao Azure Cosmos DB.

Agora que você criou seu espaço de trabalho simulado preexistente do Log Analytics, pode fazer referência a ele de dentro do seu modelo Bicep como um recurso existente. Você pode usá-lo como destino para os logs do Azure Cosmos DB.

Para adicionar configurações de diagnóstico, use as seguintes etapas:

  1. No Visual Studio Code, abra o arquivo main.bicep no editor. Abaixo das definições de variáveis existentes, adicione o seguinte código:

    var logAnalyticsWorkspaceName = 'ToyLogs'
    var cosmosDBAccountDiagnosticSettingsName = 'route-logs-to-log-analytics'
    
  2. Na parte inferior do arquivo, abaixo das definições de recurso, adicione o seguinte código:

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

    Observe que essa definição de recurso usa a palavra-chave existing e que você está omitindo intencionalmente outras propriedades que normalmente especificaria se estivesse implantando o espaço de trabalho do Log Analytics por meio desse modelo Bicep.

  3. Abaixo do código que você acabou de adicionar, adicione o seguinte código:

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

    Observe que esse código implanta um recurso de extensão. Ele usa a palavra-chave scope para informar ao Bicep que o recurso deve ser anexado à conta do Azure Cosmos DB. O código também usa a id propriedade do recurso existente logAnalyticsWorkspace para que o Azure saiba para onde enviar os logs do Azure Cosmos DB.

Criar uma conta de armazenamento para documentos de design de brinquedos

Crie uma conta de armazenamento do Azure para simular uma que sua equipe de P&D já criou em sua organização. Use a CLI do Azure em vez do Bicep.

No terminal, execute o seguinte comando da CLI do Azure. Substitua {storageaccountname} por um nome que provavelmente seja exclusivo. O nome deve ser todo minúsculo, conter 24 ou menos caracteres e não ter espaços ou caracteres especiais. Anote o nome. Você precisará dele mais tarde.

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

Crie uma conta de armazenamento do Azure para simular uma que sua equipe de P&D já criou em sua organização. Use o Azure PowerShell em vez do Bicep.

No terminal, execute o seguinte comando do Azure PowerShell. Substitua {storageaccountname} por um nome que provavelmente seja exclusivo. O nome deve ser todo minúsculo, conter 24 ou menos caracteres e não ter espaços ou caracteres especiais.

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

Adicionar configurações de diagnóstico para a conta de armazenamento

Sua equipe de R&D deseja que você registre todas as solicitações bem-sucedidas na conta de armazenamento que eles criaram. Você decide usar a integração do Armazenamento do Azure com os logs do Azure Monitor para atingir essa meta. Você decide registar todas as atividades de leitura, escrita e eliminação no armazenamento de blobs na conta de armazenamento da equipa de P&D.

Você precisa atualizar seu modelo Bicep para fazer referência à conta de armazenamento que você criou na etapa anterior.

  1. Perto do topo do arquivo main.bicep , abaixo das definições de parâmetros, adicione a seguinte definição de parâmetro:

    param storageAccountName string
    
  2. Nas definições de variáveis, adicione a seguinte definição de variável:

    var storageAccountBlobDiagnosticSettingsName = 'route-logs-to-log-analytics'
    
  3. Na parte inferior do arquivo, sob as definições de recurso, adicione a seguinte definição:

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

    Observe que ambos os recursos usam a palavra-chave existing.

  4. Na parte inferior do arquivo, abaixo da definição de conta de armazenamento que você adicionou na etapa anterior, adicione o seguinte código:

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

    Observe que esse recurso de extensão tem seu scope definido para o recurso existente aninhado. Bicep sabe que deve anexar o recurso de extensão ao recurso filho blobServices.

  5. Salve as alterações no arquivo.

Verifique seu arquivo Bicep

Depois de concluir as alterações anteriores, o arquivo main.bicep deve se parecer com este exemplo:

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

Se não tiver a mesma aparência, copie o exemplo ou ajuste o modelo para corresponder ao exemplo.

Implantar o modelo no Azure

No terminal, execute o seguinte comando da CLI do Azure. Substitua {storageaccountname} pelo nome da conta de armazenamento que você criou anteriormente neste exercício.

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

No terminal, execute o seguinte comando do Azure PowerShell. Substitua {storageaccountname} pelo nome da conta de armazenamento que você criou anteriormente neste exercício.

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

Verifique a sua implementação

  1. No navegador, volte para o portal do Azure. Vá para o seu grupo de recursos. Como a implantação usou o mesmo nome da primeira implantação, você ainda verá uma implantação bem-sucedida.

  2. Selecione o link 1 Êxito.

  3. Selecione a implantação chamada principal e, em seguida, selecione Detalhes da implantação para expandir a lista de recursos implantados.

    Captura de tela da interface do portal do Azure para a implantação específica. Ele mostra os recursos do Azure Cosmos DB e dois recursos do tipo Microsoft.Insights/diagnosticSettings.

    Observe que há dois recursos listados que têm um tipo de Microsoft.Insights/diagnosticSettings. Esses recursos são os recursos de extensão que você implantou. Um dos recursos é anexado à conta de armazenamento e o outro é anexado à conta do Azure Cosmos DB. Agora você pode verificar se as configurações de diagnóstico do Azure Cosmos DB estão configuradas corretamente.

  4. Selecione o recurso da conta do Azure Cosmos DB. O portal exibe a conta do Azure Cosmos DB.

    Captura de ecrã da interface do portal do Azure para a implementação específica, com a conta do Azure Cosmos DB realçada.

  5. Na caixa Pesquisar no canto superior esquerdo, digite Configurações de diagnóstico e selecione Configurações de diagnóstico.

    Captura de ecrã da interface do portal do Azure para a conta do Azure Cosmos DB. As configurações de diagnóstico são realçadas no menu.

  6. O portal do Azure pode pedir que habilite o suporte a consultas de texto completo para o registo. Você não precisa dele para este exercício, então selecione Não agora.

    Captura de ecrã do prompt para ativar a consulta de texto completo.

  7. Observe que há uma configuração de diagnóstico chamada route-logs-to-log-analytics configurada para rotear os logs para o espaço de trabalho ToyLogs .

    Captura de tela que mostra as configurações de diagnóstico.

    Se desejar, você também pode verificar se a conta de armazenamento tem uma configuração de diagnóstico semelhante habilitada para armazenamento de blob.