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 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 já criado 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 já criado 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ê está implantando 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 iguais aos recursos do aplicativo. 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 do Azure Cosmos DB, para coletar o registo DataPlaneRequests, que contém informações sobre solicitações feitas ao Azure Cosmos DB.

Agora que tu criaste o teu espaço de trabalho pré-existente simulado do Log Analytics, podes referenciá-lo de dentro do teu 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 ficheiro main.bicep no editor e, em seguida, 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 propositalmente 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 propriedade id do logAnalyticsWorkspace recurso existente para que o Azure entenda 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 que a sua equipa de&D já tenha criado uma na 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 para uso posterior.

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

Crie uma conta de armazenamento do Azure para simular que a sua equipa de R&D já criou uma na 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 registrar todas as atividades de leitura, gravação e exclusão no armazenamento de blob na conta de armazenamento da equipe de R&D.

Você precisa atualizar seu modelo Bicep para fazer referência à conta de armazenamento criada 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 entende que deve associar o recurso de extensão ao recurso filho blobServices.

  5. Salve as alterações no arquivo.

Verifique seu arquivo Bicep

Depois de concluir todas as alterações anteriores, o seu arquivo principal main.bicep deve ficar como neste 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
      }
    ]
  }
}

Caso contrário, 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 criada 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 criada 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. Você ainda vê uma implantação bem-sucedida, porque a implantação usou o mesmo nome da primeira implantação.

  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, com os recursos do Azure Cosmos DB, bem como dois recursos com o tipo Microsoft.Insights/diagnosticSettings.

    Observe que há dois recursos listados do tipo Microsoft.Insights/diagnosticSettings. Esses recursos são os recursos de extensão que você implantou. Um dos recursos foi anexado à conta de armazenamento e o outro foi 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 é aberto para a conta do Azure Cosmos DB.

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

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

    Captura de ecrã da interface do portal do Azure para a conta do Azure Cosmos DB, mostrando o campo de pesquisa com 'Definições de diagnóstico' introduzido e o item de menu 'Definições de diagnóstico' realçado.

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

    Captura de tela da interface do portal do Azure para a conta do Azure Cosmos DB mostrando a página Configurações de diagnóstico com prompt para habilitar a consulta de texto completo.

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

    Captura de tela da interface do portal do Azure para a conta do Azure Cosmos DB, mostrando 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.