Автоматическая подготовка к работе в Azure Data Explorer

Автоматическая подготовка позволяет быстро развертывать и настраивать ресурсы, требуемые для выполнения кластера Azure Data Explorer. Это важнейшая часть рабочего процесса DevOps или DataOps. Процесс подготовки избавляет вас от настройки кластера вручную, не требует вмешательства оператора и легко выполняется.

Вы можете использовать автоматическую подготовку для развертывания предварительно настроенного кластера с данными в рамках конвейера непрерывной интеграции и непрерывной доставки (CI/CD). Вот лишь некоторые из важнейших преимуществ такого подхода:

  • возможность определять и поддерживать несколько сред;
  • отслеживание развертываний в системе управления версиями;
  • упрощение отката к предыдущим версиям;
  • упрощение автоматического тестирования благодаря наличию специализированных тестовых сред.

В этой статье представлено обобщенное описание нескольких механизмов автоматической подготовки к работе сред Azure Data Explorer, включая инфраструктуру, сущности схемы и прием данных. Также здесь есть ссылки на разные средства и технологии, используемые для автоматизации процесса подготовки к работе.

Изображение, показывающее общий поток развертывания.

Развертывание инфраструктуры

Развертывание инфраструктуры относится к развертыванию ресурсов Azure, включая кластеры, базы данных и подключения к данным. Различают несколько типов развертываний инфраструктуры, в частности:

Шаблоны ARM и скрипты Terraform — это два основных декларативных способа развертывания инфраструктуры Azure Data Explorer.

Развертывание шаблона ARM

Шаблоны ARM — это файлы JSON или Bicep, которые определяют инфраструктуру и конфигурацию развертывания. С их помощью можно развертывать кластеры, базы данных, подключения к данным и многие другие компоненты инфраструктуры. Подробнее см. статью Создание кластера и базы данных Azure Data Explorer с помощью шаблона Azure Resource Manager.

Вы также можете использовать шаблоны ARM для развертывания командных скриптов, которые помогут вам создать схему базы данных и определить политики. Дополнительные сведения см. в статье Настройка базы данных с помощью скрипта языка запросов Kusto.

Дополнительные примеры шаблонов можно найти на сайте шаблонов быстрого запуска Azure.

Развертывание Terraform

Terraform — это программное средство IaC (инфраструктура как код) с открытым кодом. Оно предоставляет последовательный рабочий процесс CLI для управления облачными службами. Terraform кодирует облачные API в декларативные файлы конфигурации.

Terraform предлагает те же возможности, что и шаблоны ARM. С помощью Terraform можно развертывать кластеры, базы данных, подключения к данным и другие компоненты инфраструктуры.

Вы также можете использовать Terraform для развертывания командных скриптов, которые помогут вам создать схему базы данных и определить политики.

Императивное развертывание

Вы также можете развернуть инфраструктуру в принудительном порядке, используя любую из поддерживаемых платформ:

Развертывание сущностей схемы

Подготовка сущностей схемы относится к развертыванию таблиц, функций, политик и разрешений. Вы можете создавать или обновлять сущности, выполняя скрипты, состоящие из команд управления.

Для автоматизации развертывания сущностей схемы можно применять следующие методы:

Прием данных

Иногда вам потребуется принимать в кластер данные. Например, это могут быть данные для выполнения тестов или повторного создания среды. Для приема данных вы можете использовать следующие методы:

Пример развертывания с помощью конвейера CI/CD

В следующем примере показано, как использовать конвейер Azure DevOps CI/CD со средствами для автоматического развертывания инфраструктуры, сущностей схемы и данных. Это один из примеров конвейера, который использует определенный набор средств, но можно использовать и другие средства и шаги. Например, в рабочей среде можно создать конвейеры, которые не выполняют прием данных. Вы можете добавить в этот конвейер любые шаги по своему усмотрению, например автоматические тесты в созданном кластере.

Можно использовать следующие средства.

Тип развертывания Средство Задача
Инфраструктура Шаблоны ARM Создание кластера и базы данных
Сущности схемы Интерфейс командной строки Kusto Создание таблиц в базе данных
Data LightIngest Прием данных в одну таблицу

Изображение, показывающее поток примера развертывания.

Ниже приведена процедура создания конвейера.

Шаг 1. Создание подключения к службе

Определите подключение службы типа Azure Resource Manager. Укажите подключение к подписке и группе ресурсов, в которой вы хотите развернуть свой кластер. Будет создан субъект-служба Azure, который вы затем примените для развертывания шаблона ARM. Тот же субъект-службу можно использовать и для развертывания сущностей схемы, и для приема данных, достаточно лишь явным образом передать учетные данные в CLI Kusto или средство LightIngest.

Шаг 2. Создание конвейера

Определите конвейер (deploy-environ), который будет использоваться для развертывания кластера, создания сущностей схемы и приема данных.

Но прежде, чем использовать этот конвейер, необходимо создать следующие переменные секретов:

Имя переменной Description
clusterName Имя кластера Azure Data Explorer.
serviceConnection Имя подключения Azure DevOps, которое используется для развертывания шаблона ARM.
appId Идентификатор клиента для субъекта-службы, который используется для взаимодействия с кластером.
appSecret Секрет субъекта-службы.
appTenantId Идентификатор арендатора субъекта-службы.
location Регион Azure, в котором будет развернут кластер. Например, 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

Шаг 3. Создание шаблона ARM для развертывания кластера

Определите шаблон ARM (deploy-infra.json), который будет использоваться для развертывания кластера в подписке и группе ресурсов.

{
    "$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
                    }
                }
            ]
        }
    ]
}

Шаг 4. Создание скрипта KQL для создания сущностей схемы

Определите скрипт KQL (MyDatabase.kql), который будет использоваться для создания таблиц в базах данных.

.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)

Шаг 5. Создание скрипта KQL для приема данных

Создайте файл в формате CSV (customer.csv) с данными для приема.

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

Снимок экрана: запуск задания примера потока.

Вы создадите кластер с использованием учетных данных субъекта-службы, которые вы указали в конвейере. Чтобы предоставить разрешения пользователям, выполните шаги из статьи Управление разрешениями баз данных Azure Data Explorer.

Снимок экрана: развернутая база данных с двумя таблицами в веб-интерфейсе Azure Data Explorer.

Чтобы проверить новое развертывание, попробуйте выполнить запрос по таблице Customer. Вы увидите три записи, которые ранее импортировали из CSV-файла.