Ejercicio: Implementación de recursos de extensión y uso de recursos existentes

Completado

Ahora que ha terminado de crear la base de datos para que la use el equipo de I+D, debe asegurarse de registrar el acceso a la base de datos. Tiene ya un área de trabajo de Log Analytics a la que desea que se envíen estos registros. También debe enviar los registros de la cuenta de almacenamiento del equipo de I+D a la misma área de trabajo de Log Analytics. En este ejercicio, actualizará el archivo Bicep para cumplir estos requisitos.

Durante el proceso, hará lo siguiente:

  • Cree un área de trabajo de Log Analytics.
  • Actualice el archivo Bicep para agregar la configuración de diagnóstico a la cuenta Cosmos DB.
  • Cree una cuenta de almacenamiento.
  • En el archivo Bicep, actualice la configuración de diagnóstico de la cuenta de almacenamiento.
  • Implemente la plantilla y compruebe el resultado.

Creación de un área de trabajo de Log Analytics

Cree un área de trabajo de Log Analytics para simular que ya se ha creado una en su organización. Use la CLI de Azure en lugar de Bicep.

En el terminal, ejecute el siguiente comando de la CLI de Azure:

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

Cree un área de trabajo de Log Analytics para simular que ya se ha creado una en su organización. Use Azure PowerShell en lugar de Bicep.

En el terminal, ejecute el siguiente comando de Azure PowerShell:

New-AzOperationalInsightsWorkspace `
  -Name ToyLogs `
  -Location eastus

Nota:

En este ejemplo, va a implementar el área de trabajo de Log Analytics en la misma suscripción y grupo de recursos que los demás recursos. En muchas situaciones, almacenará áreas de trabajo de Log Analytics en grupos de recursos que no son los mismos que los recursos de la aplicación. Bicep todavía puede hacer referencia a ellos.

Adición de configuración de diagnóstico para Azure Cosmos DB

El equipo de I+D necesita registrar todas las solicitudes en la cuenta de Azure Cosmos DB. Decide usar la integración de Azure Monitor para Azure Cosmos DB para recopilar el registro DataPlaneRequests, que contiene información sobre las solicitudes a Azure Cosmos DB.

Ahora que ha creado el área de trabajo de Log Analytics preexistente simulada, puede hacer referencia a ella desde la plantilla de Bicep como un recurso existente. Puede usarla como destino para los registros de Azure Cosmos DB.

Para agregar la configuración de diagnóstico, siga estos pasos:

  1. En Visual Studio Code, abra el archivo main.bicep en el editor y, luego, debajo de las definiciones de variables existentes, agregue el código siguiente:

    var logAnalyticsWorkspaceName = 'ToyLogs'
    var cosmosDBAccountDiagnosticSettingsName = 'route-logs-to-log-analytics'
    
  2. En la parte inferior del archivo, bajo las definiciones de recursos, agregue el código siguiente:

    resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2020-03-01-preview' existing = {
      name: logAnalyticsWorkspaceName
    }
    

    Tenga en cuenta que esta definición de recurso usa la palabra clave existing y que está omitiendo a propósito otras propiedades que normalmente especificaría si estuviera implementando el área de trabajo de Log Analytics a través de esta plantilla de Bicep.

  3. Debajo del código que acaba de agregar, agregue el código siguiente:

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

    Tenga en cuenta que este código implementa un recurso de extensión. Usa la palabra clave scope para indicar a Bicep que el recurso se debe asociar a la cuenta de Azure Cosmos DB. El código también usa la propiedad id del recurso existente logAnalyticsWorkspace para que Azure entienda dónde enviar los registros de Azure Cosmos DB.

Creación de una cuenta de almacenamiento para los documentos del diseño de los juguetes

Cree una cuenta de almacenamiento de Azure para simular que su equipo de I+D ya ha creado una en su organización. Use la CLI de Azure en lugar de Bicep.

En el terminal, ejecute el siguiente comando de la CLI de Azure. Reemplace {storageaccountname} por un nombre que sea probablemente único. El nombre debe estar en minúsculas, contener 24 caracteres o menos y no tener espacios ni caracteres especiales. Anote el nombre para un uso posterior.

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

Cree una cuenta de almacenamiento de Azure para simular que su equipo de I+D ya ha creado una en su organización. Use Azure PowerShell en lugar de Bicep.

En el terminal, ejecute el siguiente comando de Azure PowerShell. Reemplace {storageaccountname} por un nombre que sea probablemente único. El nombre debe estar en minúsculas, contener 24 caracteres o menos y no tener espacios ni caracteres especiales.

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

Adición de la configuración de diagnóstico para la cuenta de almacenamiento

El equipo de I+D quiere que registre todas las solicitudes correctas en la cuenta de almacenamiento que han creado. Decide usar la integración de Azure Storage con registros de Azure Monitor para lograrlo. Decide registrar todas las actividades de lectura, escritura y eliminación dentro del almacenamiento de blobs en la cuenta de almacenamiento del equipo de I+D.

Debe actualizar la plantilla de Bicep para hacer referencia a la cuenta de almacenamiento que creó en el paso anterior.

  1. Cerca de la parte superior del archivo main.bicep, debajo de las definiciones de parámetros, agregue la siguiente definición de parámetro:

    param storageAccountName string
    
  2. En las definiciones de variable, agregue la siguiente definición de variable:

    var storageAccountBlobDiagnosticSettingsName = 'route-logs-to-log-analytics'
    
  3. En la parte inferior del archivo, en las definiciones de recursos, agregue la siguiente definición:

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

    Observe que ambos recursos usan la palabra clave existing.

  4. En la parte inferior del archivo, debajo de la definición de la cuenta de almacenamiento que agregó en el paso anterior, agregue el código siguiente:

    resource storageAccountBlobDiagnostics 'Microsoft.Insights/diagnosticSettings@2017-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
          }
        ]
      }
    }
    

    Tenga en cuenta que este recurso de extensión tiene su elemento scope establecido en el recurso existente anidado. Bicep entiende que debe asociar el recurso de extensión al recurso secundario blobServices.

    Cuando termine, la plantilla de Bicep completa debería tener este aspecto:

    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@2020-04-01' = {
      name: cosmosDBAccountName
      location: location
      properties: {
        databaseAccountOfferType: 'Standard'
        locations: [
          {
            locationName: location
          }
        ]
      }
    }
    
    resource cosmosDBDatabase 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases@2020-04-01' = {
      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@2020-03-01-preview' existing = {
      name: logAnalyticsWorkspaceName
    }
    
    resource cosmosDBAccountDiagnostics 'Microsoft.Insights/diagnosticSettings@2017-05-01-preview' = {
      scope: cosmosDBAccount
      name: cosmosDBAccountDiagnosticSettingsName
      properties: {
        workspaceId: logAnalyticsWorkspace.id
        logs: [
          {
            category: 'DataPlaneRequests'
            enabled: true
          }
        ]
      }
    }
    
    resource storageAccount 'Microsoft.Storage/storageAccounts@2019-06-01' existing = {
      name: storageAccountName
    
      resource blobService 'blobServices' existing = {
        name: 'default'
      }
    }
    
    resource storageAccountBlobDiagnostics 'Microsoft.Insights/diagnosticSettings@2017-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. Guarde los cambios en el archivo.

Implementación de la plantilla en Azure

En el terminal, ejecute el siguiente comando de la CLI de Azure. Reemplace {storageaccountname} por el nombre de la cuenta de almacenamiento que ha creado antes en este ejercicio.

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

En el terminal, ejecute el siguiente comando de Azure PowerShell. Reemplace {storageaccountname} por el nombre de la cuenta de almacenamiento que ha creado antes en este ejercicio.

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

Comprobación de la implementación

  1. En el explorador, vuelva a Azure Portal. Vaya a su grupo de recursos. Seguirá viendo una implementación correcta, ya que esta habrá usado el mismo nombre que la primera.

  2. Seleccione el vínculo 1 Succeeded (1 correcta).

  3. Seleccione la implementación llamada main y, después, Detalles de la implementación para expandir la lista de recursos implementados.

    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.

    Observe que hay dos recursos enumerados con el tipo Microsoft.Insights/diagnosticSettings. Se trata de los recursos de extensión que ha implementado. Uno de los recursos se ha asociado a la cuenta de almacenamiento y el otro, a la cuenta de Azure Cosmos DB. Ahora comprobará que las opciones de diagnóstico de Azure Cosmos DB estén configuradas correctamente.

  4. Seleccione el recurso de la cuenta de Azure Cosmos DB. El portal se abre en la cuenta de Azure Cosmos DB.

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

  5. En el cuadro Buscar de la parte superior izquierda, escriba Configuración de diagnóstico y seleccione el elemento de menú Configuración 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. Azure Portal puede solicitar que habilite la compatibilidad con consultas de texto completo para el registro. No es necesario para este ejercicio, por lo tanto, seleccione Ahora no.

    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 hay una configuración de diagnóstico denominada route-logs-to-log-analytics, que está configurada para enrutar los registros al área de trabajo ToyLogs.

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

    Si quiere, también puede comprobar si la cuenta de almacenamiento tiene una configuración de diagnóstico similar habilitada para Blob Storage.