Compartir a través de


Aprovisionamiento automatizado en Azure Data Explorer

El aprovisionamiento automatizado es un proceso para implementar y configurar rápidamente los recursos que necesita para ejecutar el clúster de Azure Data Explorer. Es una parte fundamental de un flujo de trabajo DevOps o DataOps. El proceso de aprovisionamiento no requiere que configure manualmente el clúster, no requiere intervención humana y es fácil de configurar.

Puede usar el aprovisionamiento automatizado para implementar un clúster preconfigurado con datos, como parte de una canalización de integración continua y entrega continua (CI/CD). Algunas de las principales ventajas de hacerlo incluyen la posibilidad de:

  • Definir y mantener varios entornos.
  • Realizar un seguimiento de las implementaciones en el control de código fuente.
  • Revertir más fácilmente a versiones anteriores.
  • Facilitar las pruebas automatizadas mediante el aprovisionamiento de entornos de prueba dedicados.

En este artículo se proporciona información general sobre los diferentes mecanismos para automatizar el aprovisionamiento de entornos de Azure Data Explorer, incluida la infraestructura, las entidades de esquema y la ingesta de datos. También proporciona referencias a las distintas herramientas y técnicas que se usan para automatizar el proceso de aprovisionamiento.

Imagen que muestra el flujo general de implementación.

Implementación de la infraestructura

La implementación de la infraestructura pertenece a la implementación de recursos de Azure, entre los cuales se incluyen los clústeres, bases de datos y conexiones de datos. Hay varios tipos diferentes de implementaciones de infraestructura, entre los que se incluyen:

Las plantillas de ARM y los scripts de Terraform son las dos formas declarativas principales de implementar la infraestructura de Azure Data Explorer.

Implementación de la plantilla de ARM

Las plantillas de ARM son archivos JSON o Bicep que definen la infraestructura y la configuración de una implementación. Puede usar las plantillas para implementar clústeres, bases de datos, conexiones de datos y muchos otros componentes de infraestructura. Para más información, consulte Creación de un clúster y una base de datos de Azure Data Explorer mediante una plantilla de Azure Resource Manager.

También puede usar plantillas de ARM para implementar scripts de comandos que le ayudarán a crear un esquema de base de datos y definir directivas. Para más información, consulte Configuración de una base de datos mediante un script del lenguaje de consulta Kusto.

Puede encontrar más plantillas de ejemplo en el sitio Plantillas de inicio rápido de Azure.

Implementación de Terraform

Terraform es una herramienta de código abierto de software de infraestructura como código. Proporciona un flujo de trabajo coherente de la CLI para administrar los servicios en la nube. Terraform codifica las API en la nube en archivos de configuración declarativos.

Terraform ofrece las mismas funcionalidades que las plantillas de ARM. Puede usar Terraform para implementar clústeres, bases de datos, conexiones de datos y otros componentes de infraestructura.

También puede usar Terraform para implementar scripts de comandos que le ayudarán a crear un esquema de base de datos y definir directivas.

Implementación imperativa

La infraestructura también se puede implementar de forma imperativa mediante cualquiera de las plataformas admitidas:

Implementación de entidades de esquema

El aprovisionamiento de entidades de esquema pertenece a la implementación de tablas, funciones, directivas y permisos. Puede crear o actualizar entidades mediante la ejecución de scripts que constan de comandos de administración.

Puede automatizar la implementación de entidades de esquema mediante los métodos siguientes:

  • Plantillas de ARM
  • Scripts de Terraform
  • CLI de Kusto
  • SDK
  • Herramientas
    • Sync Kusto. Use esta herramienta interactiva para desarrolladores para extraer el esquema de base de datos o el script de comandos de administración. Puede utilizar el script de comandos de contenido extraído para la implementación automática.
    • Delta Kusto: invoque esta herramienta en una canalización de CI/CD. Puede comparar dos orígenes, como el esquema de base de datos o el script de comandos de administración, y calcular un script de comandos de administración delta. Puede utilizar el script de comandos de contenido extraído para la implementación automática.
    • Tarea de Azure DevOps para Azure Data Explorer.

Ingerir datos

A veces desea ingerir datos en el clúster. Por ejemplo, puede que quiera ingerir datos para ejecutar pruebas o volver a crear un entorno. Puede usar los métodos siguientes para ingerir datos:

Ejemplo de implementación mediante una canalización de CI/CD

En el ejemplo siguiente, usará una canalización de CI/CD de Azure DevOps que ejecuta herramientas para automatizar la implementación de infraestructura, entidades de esquema y datos. Este es un ejemplo de una canalización que usa un conjunto determinado de herramientas, pero puede usar otras herramientas y pasos. Por ejemplo, en un entorno de producción puede crear una canalización que no ingiera datos. También puede agregar más pasos a la canalización, como la ejecución de pruebas automatizadas en el clúster creado.

Aquí, usará las siguientes herramientas:

Tipo de implementación Herramienta Tarea
Infraestructura Plantillas de ARM Creación de un clúster y una base de datos
Entidades de esquema CLI de Kusto Creación de tablas en la base de datos
Data LightIngest Ingesta de datos en una tabla

Imagen que muestra el flujo de ejemplo de implementación.

Siga estos pasos para crear una canalización.

Paso1: Creación de una conexión de servicio

Defina una conexión de servicio del tipo Azure Resource Manager. Apunte la conexión a la suscripción y al grupo de recursos en los que desea implementar el clúster. Se crea una entidad de servicio de Azure y la usará para implementar la plantilla de ARM. Puede usar la misma entidad para implementar las entidades de esquema e ingerir los datos. Debe pasar explícitamente las credenciales a la CLI de Kusto y a las herramientas de LightIngest.

Paso 2: Creación de una canalización

Defina la canalización (deploy-environ) que se va a usar para implementar el clúster, crear entidades de esquema e ingerir datos.

Para poder usar la canalización, debe crear las siguientes variables secretas:

Nombre de la variable Descripción
clusterName El nombre del clúster de Azure Data Explorer.
serviceConnection Nombre de la conexión de Azure DevOps usada para implementar la plantilla de ARM.
appId Identificador de cliente de la entidad de servicio usada para interactuar con el clúster
appSecret Secreto de la entidad de servicio.
appTenantId El id. de inquilino de la entidad de servicio.
location La región de Azure en la que va a implementar el clúster. Por ejemplo, eastus.
resources:
- repo: self

stages:
- stage: deploy_cluster
  displayName: Deploy cluster
  variables: []
    clusterName: specifyClusterName
    serviceConnection: specifyServiceConnection
    appId: specifyAppId
    appSecret: specifyAppSecret
    appTenantId: specifyAppTenantId
    location: specifyLocation
  jobs:
  - job: e2e_deploy
    pool:
      vmImage: windows-latest
    variables: []
    steps:
    - bash: |
        nuget install Microsoft.Azure.Kusto.Tools -Version 5.3.1
        # Rename the folder (including the most recent version)
        mv Microsoft.Azure.Kusto.Tools.* kusto.tools
      displayName: Download required Kusto.Tools Nuget package
    - task: AzureResourceManagerTemplateDeployment@3
      displayName: Deploy Infrastructure
      inputs:
        deploymentScope: 'Resource Group'
        # subscriptionId and resourceGroupName are specified in the serviceConnection
        azureResourceManagerConnection: $(serviceConnection)
        action: 'Create Or Update Resource Group'
        location: $(location)
        templateLocation: 'Linked artifact'
        csmFile: deploy-infra.json
        overrideParameters: "-clusterName $(clusterName)"
        deploymentMode: 'Incremental'
    - bash: |
        # Define connection string to cluster's database, including service principal's credentials
        connectionString="https://$(clusterName).$(location).kusto.windows.net/myDatabase;Fed=true;AppClientId=$(appId);AppKey=$(appSecret);TenantId=$(appTenantId)"
        # Execute a KQL script against the database
        kusto.tools/tools/Kusto.Cli $connectionString -script:MyDatabase.kql
      displayName: Create Schema Entities
    - bash: |
        connectionString="https://ingest-$(CLUSTERNAME).$(location).kusto.windows.net/;Fed=true;AppClientId=$(appId);AppKey=$(appSecret);TenantId=$(appTenantId)"
        kusto.tools/tools/LightIngest $connectionString -table:Customer -sourcePath:customers.csv -db:myDatabase -format:csv -ignoreFirst:true
      displayName: Ingest Data

Paso 3: Creación de una plantilla de ARM para implementar el clúster

Defina la plantilla de ARM (deploy-infra.json) que se va a usar para implementar el clúster en la suscripción y el grupo de recursos.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "clusterName": {
            "type": "string",
            "minLength": 5
        }
    },
    "variables": {
    },
    "resources": [
        {
            "name": "[parameters('clusterName')]",
            "type": "Microsoft.Kusto/clusters",
            "apiVersion": "2021-01-01",
            "location": "[resourceGroup().location]",
            "sku": {
                "name": "Dev(No SLA)_Standard_E2a_v4",
                "tier": "Basic",
                "capacity": 1
            },
            "resources": [
                {
                    "name": "myDatabase",
                    "type": "databases",
                    "apiVersion": "2021-01-01",
                    "location": "[resourceGroup().location]",
                    "dependsOn": [
                        "[resourceId('Microsoft.Kusto/clusters', parameters('clusterName'))]"
                    ],
                    "kind": "ReadWrite",
                    "properties": {
                        "softDeletePeriodInDays": 365,
                        "hotCachePeriodInDays": 31
                    }
                }
            ]
        }
    ]
}

Paso 4: Creación de un script de KQL para crear las entidades de esquema

Defina el script de KQL (MyDatabase.kql) que se va a usar para crear las tablas de las bases de datos.

.create table Customer(CustomerName:string, CustomerAddress:string)

//  Set the ingestion batching policy to trigger ingestion quickly
//  This is to speedup reaction time for the sample
//  Do not do this in production
.alter table Customer policy ingestionbatching @'{"MaximumBatchingTimeSpan":"00:00:10", "MaximumNumberOfItems": 500, "MaximumRawDataSizeMB": 1024}'

.create table CustomerLogs(CustomerName:string, Log:string)

Paso 5: Creación de un script de KQL para ingerir datos

Cree el archivo de datos CSV (customer.csv) para ingerir.

customerName,customerAddress
Contoso Ltd,Paris
Datum Corporation,Seattle
Fabrikam,NYC

Captura de pantalla que muestra una ejecución de trabajo del flujo de ejemplo.

Puede crear el clúster con las credenciales de entidad de servicio que especificó en la canalización. Siga los pasos que se indican en Administración de permisos de base de datos del Explorador de datos de Azure para conceder permisos a los usuarios.

Captura de pantalla que muestra la base de datos implementada con sus dos tablas en la interfaz de usuario web de Azure Data Explorer.

Para comprobar la implementación, ejecute una consulta en la tabla Customer. Debería ver los tres registros que se importaron desde el archivo CSV.