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

Concluído

Agora que você terminou de criar o banco de dados para a sua equipe de Pesquisa e Desenvolvimento usar, você precisa garantir que o acesso ao banco de dados seja registrado em log. Você tem um workspace do Log Analytics existente para o qual deseja que esses logs sejam enviados. Você também precisa enviar os logs da conta de armazenamento da equipe de P&D para o mesmo workspace do Log Analytics. Neste exercício, você atualizará o arquivo Bicep para atender a esses requisitos.

Durante o processo, você vai:

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

Criar um workspace do Log Analytics

Crie um workspace do Log Analytics para simular a existência de um já criado em 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 workspace do Log Analytics para simular a existência de um já criado em 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 workspace do Log Analytics na mesma assinatura e grupo de recursos que seus outros recursos. Em muitas situações, você armazenará o workspace do Log Analytics em grupos de recursos que não são iguais aos seus recursos de aplicativo. O Bicep ainda pode fazer referência a eles.

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

Sua equipe de P&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 a fim de coletar o log DataPlaneRequests, que contém informações sobre solicitações ao Azure Cosmos DB.

Agora que você criou seu workspace simulado pré-existente do Log Analytics, você pode referenciá-lo de dentro do modelo Bicep como um recurso existente. Você pode usá-lo como o 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 e, abaixo das definições de variável 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 recursos, 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 workspace do Log Analytics por meio desse modelo Bicep.

  3. Abaixo do código que você acabou de incluir, 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 indicar ao Bicep que o recurso deve ser anexado à conta do Azure Cosmos DB. O código também usa a propriedade id do recurso existente logAnalyticsWorkspace de modo 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 que sua equipe de P&D já criou uma 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 será exclusivo. O nome deve estar em letras minúsculas, conter 24 caracteres ou menos e não ter espaços ou caracteres especiais. Anote esse nome para usá-lo novamente mais tarde.

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

Crie uma conta de armazenamento do Azure para simular que sua equipe de P&D já criou uma 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 será exclusivo. O nome deve estar em letras minúsculas, conter 24 caracteres ou menos e não ter espaços ou caracteres especiais.

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

Adicionar configurações de diagnóstico à conta de armazenamento

Sua equipe de Pesquisa e Desenvolvimento deseja que você registre todas as solicitações bem-sucedidas na conta de armazenamento criada por ela. Você decide usar a integração do Armazenamento do Microsoft 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 blobs na conta de armazenamento da equipe de P&D.

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

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

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

    var storageAccountBlobDiagnosticSettingsName = 'route-logs-to-log-analytics'
    
  3. Na parte inferior do arquivo, nas 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 esses dois recursos usam a palavra-chave existing.

  4. Na parte inferior do arquivo, abaixo da definição da 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 conjunto scope definido como o recurso existente aninhado. O Bicep entende que ele deve anexar o recurso de extensão ao recurso filho blobServices.

    Depois de terminar, seu modelo Bicep completo deve ser semelhante ao seguinte:

    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. Salve as alterações no arquivo.

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 \
  --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 `
  -TemplateFile main.bicep `
  -storageAccountName {storageaccountname}

Verifique sua implantação

  1. No navegador, retorne ao portal do Azure. Vá para o grupo de recursos. Você ainda vê uma implantação bem-sucedida, pois a implantação usou o mesmo nome da primeira implantação.

  2. Selecione o link 1 com êxito.

  3. Selecione a implantação chamada principal e escolha Detalhes da implantação para expandir a lista de recursos implantados.

    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.

    Há dois recursos listados com um tipo de Microsoft.Insights/diagnosticSettings. Esses recursos são os recursos de extensão implantados. Um deles 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 corretas.

  4. Selecione a conta de recurso do Azure Cosmos DB. O portal é aberto para a conta do Azure Cosmos DB.

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

  5. Na caixa de Pesquisa na parte superior esquerda, digite Configurações de diagnóstico e clique no item de menu Configurações de diagnóstico.

    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. O portal do Azure pode solicitar que você habilite o suporte de consulta de texto completo para log. Você não precisa dele para este exercício, então selecione Agora não.

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

  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 workspace do ToyLogs.

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

    Se quiser, você também poderá verificar se a conta de armazenamento tem uma configuração de diagnóstico semelhante habilitada para o armazenamento de blobs.