Úloha Azure DevOps pro Azure Data Explorer

Azure DevOps Services poskytuje nástroje pro spolupráci pro vývoj, jako jsou vysoce výkonné kanály, bezplatné privátní úložiště Git, konfigurovatelné panely Kanbanu a rozsáhlé možnosti automatizovaného a průběžného testování. Azure Pipelines je funkce Azure DevOps, která umožňuje spravovat CI/CD a nasazovat kód pomocí vysoce výkonných kanálů, které fungují s libovolným jazykem, platformou a cloudem. Azure Data Explorer – Pipeline nástroje je úloha Azure Pipelines, která umožňuje vytvářet release pipeline a nasazovat změny v databázi do vašich Azure Data Explorer databází. Je k dispozici zdarma na webu Visual Studio Marketplace. Rozšíření zahrnuje následující základní úlohy:

  • Příkaz Azure Data Exploreru – Spuštění příkazů správce v clusteru Azure Data Exploreru

  • Dotaz Azure Data Exploreru – Spouštění dotazů na cluster Azure Data Exploreru a analýza výsledků

  • Brána dotazovacího serveru Azure Data Explorer – Úloha bez potřeby agenta pro kontrolu uvolnění v závislosti na výsledku dotazu

    Snímek obrazovky s zobrazením typů úloh dostupných v rozšíření Pipeline Tools

Tento dokument popisuje jednoduchý příklad použití úlohy Azure Data Explorer - Pipeline Tools k nasazení změn schématu do vaší databáze. Kompletní kanály CI/CD najdete v dokumentaci k Azure DevOps.

Požadavky

Příprava obsahu na vydání

Pomocí následujících metod můžete spouštět příkazy správce v clusteru v rámci úlohy:

Snímek obrazovky s možnostmi správy zdrojového kódu příkazu

  • Pomocí vzoru vyhledávání můžete získat více souborů příkazů z místní složky agenta (zdroje sestavení nebo artefakty vydané verze). Možnost s jedním řádkem podporuje více souborů s jedním příkazem na jeden soubor.

    Snímek obrazovky s možností místní složky

  • Napište příkazy na řádek.

    Snímek obrazovky s možností integrovaného příkazu

  • Zadejte cestu k souboru pro získání souborů příkazů přímo ze správy zdrojového kódu Gitu (doporučeno).

    Snímek obrazovky znázorňující možnost souborů správy zdrojového kódu Git

    V úložišti Git vytvořte následující ukázkové složky (Funkce, Zásady, Tabulky). Zkopírujte soubory z úložiště ukázek do příslušných složek a potvrďte změny. Ukázkové soubory jsou k dispozici pro provedení následujícího pracovního postupu.

    Snímek obrazovky zobrazující složky, které se mají vytvořit v úložišti

    Tip

    Při vytváření vlastního pracovního postupu doporučujeme vytvořit idempotentní kód. Například použijte .create-merge table místo .create table a použijte funkci .create-or-alter místo funkce .create.

Vytvoření kanálu verze

  1. Přihlaste se ke své organizaci Azure DevOps.

  2. V nabídce vlevo vyberte Verze kanálů> a pak vyberte Nový kanál.

    Snímek obrazovky znázorňující, jak spustit nový pipeline

  3. Otevře se okno New release pipeline. Na kartě Kanály v podokně Vybrat šablonu vyberte Prázdnou úlohu.

    Snímek obrazovky znázorňující, jak vybrat šablonu

  4. Vyberte tlačítko Fáze . V podokně Fáze přidejte Název fáze a pak vyberte Uložit, abyste uložili své potrubí.

    Snímek obrazovky znázorňující, jak pojmenovat etapu pipeline.

  5. Vyberte Tlačítko Přidat artefakt . V podokně Přidat artefakt vyberte úložiště, ve kterém kód existuje, vyplňte relevantní informace a vyberte Přidat. Vyberte Uložit pro uložení svého potrubí.

    Snímek obrazovky znázorňující, jak přidat artefakt

  6. Na kartě Proměnné vyberte + Přidat a vytvořte proměnnou pro adresu URL koncového bodu použitou v úloze. Zadejte název a hodnotu koncového bodu a pak vyberte Uložit a kanál uložte.

    Snímek obrazovky znázorňující, jak vytvořit proměnnou pipeline.

    Pokud chcete najít adresu URL koncového bodu, přejděte na stránku přehledu clusteru Azure Data Exploreru na webu Azure Portal a zkopírujte identifikátor URI clusteru. Sestavte URI proměnné v následujícím formátu https://<ClusterURI>?DatabaseName=<DBName>. Například https://kustodocs.westus.kusto.windows.net?DatabaseName=SampleDB

    Snímek obrazovky znázorňující, jak přidat hodnotu pro identifikátor URI clusteru Azure Data Exploreru

Vytvořte úlohu nasazení složek

  1. Na kartě Potrubí vyberte 1 úkol, 0 úkolů pro přidání úkolů.

    Snímek obrazovky znázorňující přidání úlohy do pipeline

  2. Opakováním následujících kroků vytvořte úlohy příkazů pro nasazení souborů ze složek Tabulky, Funkce a Zásady :

    Snímek obrazovky znázorňující, jak přidat příkaz správce Azure Data Exploreru

    1. Na kartě Úlohy vyberte + podle úlohy agenta a vyhledejte Azure Data Explorer.

    2. V části Spustit příkaz Azure Data Exploreru vyberte Přidat.

    3. Vyberte příkaz Kusto a aktualizujte úlohu následujícími informacemi:

      • Zobrazovaný název: Název úkolu. Například Deploy <FOLDER>, kde <FOLDER> je název složky pro úlohu nasazení, kterou vytváříte.

      • Cesta k souboru: Pro každou složku zadejte cestu, kde */<FOLDER>/*.csl<FOLDER> je příslušná složka úkolu.

      • Adresa URL koncového bodu: Zadejte proměnnou vytvořenou EndPoint URL v předchozím kroku.

      • Použít koncový bod služby: Vyberte tuto možnost.

      • Koncový bod služby: Vyberte existující koncový bod služby nebo vytvořte nový (+ Nový) a v okně Přidat připojení služby Azure Data Exploreru zadejte následující informace:

        Nastavení Navrhovaná hodnota
        Metoda ověřování Nastavte federované identitní přihlašovací údaje (doporučeno) nebo zvolte ověřování služebního subjektu (SPA).
        Název připojení Zadejte název pro identifikaci tohoto koncového bodu služby.
        Adresa URL clusteru Hodnotu najdete v části přehledu clusteru Azure Data Exploreru na webu Azure Portal.
        ID instančního objektu Zadejte ID aplikace Microsoft Entra (vytvořené jako předpoklad).
        Klíč aplikace principála služby Zadejte klíč aplikace Microsoft Entra (vytvořený jako předpoklad).
        ID tenanta Microsoft Entra Zadejte tenanta Microsoft Entra (například microsoft.com nebo contoso.com).

      Zaškrtněte políčko Povolit všem kanálům používat toto připojení a pak vyberte OK.

      Snímek obrazovky znázorňující, jak přidat připojení služby

    4. Pokud jsou příkazy správce dlouhotrvající asynchronní operace, zaškrtněte políčko Počkat na dokončení dlouhých asynchronních příkazů správce. Pokud je tato možnost povolená, úloha se dotazuje na stav operace, .show operations dokud se příkaz neskončí.

  3. Vyberte Uložit a potom na kartě Úlohy ověřte, že existují tři úlohy: Nasazení tabulek, nasazení funkcí a zásady nasazení.

    Snímek obrazovky znázorňující, jak nasadit všechny složky

Vytvořte úlohu dotazu

V případě potřeby vytvořte úlohu, která spustí dotaz na cluster. Spouštění dotazů v build nebo release pipeline se dá použít k ověření datové sady a určení, zda krok uspěje nebo selže na základě výsledků dotazu. Kritéria úspěchu úkolů můžou být založená na prahové hodnotě počtu řádků nebo jedné hodnotě v závislosti na tom, co dotaz vrátí.

  1. Na kartě Úlohy vyberte + podle úlohy agenta a vyhledejte Azure Data Explorer.

  2. V části Spustit dotaz Azure Data Exploreru vyberte Přidat.

  3. Vyberte Kusto Query a aktualizujte úlohu následujícími informacemi:

    • Zobrazený název: Název úkolu. Například cluster dotazů.
    • Typ: Vyberte Inline.
    • Dotaz: Zadejte dotaz, který chcete spustit.
    • Adresa URL koncového bodu: Zadejte dříve vytvořenou proměnnou EndPoint URL.
    • Použijte koncový bod služby: Vyberte tuto možnost.
    • Koncový bod služby: Vyberte koncový bod služby.

    Snímek obrazovky znázorňující, jak vytvořit úlohu dotazu

  4. V části Výsledky úkolů vyberte kritéria úspěchu úkolu na základě výsledků dotazu následujícím způsobem:

    • Pokud dotaz vrátí řádky, vyberte Počet řádků a zadejte kritéria, která požadujete.

      Snímek obrazovky zobrazující dotaz vrátí řádky a nastaví prahové hodnoty počtu řádků

    • Pokud dotaz vrátí hodnotu, vyberte Jednu hodnotu a zadejte očekávaný výsledek.

      Snímek obrazovky zobrazující dotaz vrátí jednu hodnotu a nastaví očekávanou hodnotu.

Vytvořte úlohu Brány dotazovacího serveru

V případě potřeby vytvořte úlohu, která spustí dotaz na cluster a omezuje průběh vydání na základě počtu řádků výsledků dotazu. Úloha brány dotazů serveru je úloha bez agenta, což znamená, že dotaz běží přímo na Azure DevOps Serveru.

  1. Na kartě Úlohy vyberte + podle úlohy bez agenta a vyhledejte Azure Data Explorer.

  2. V části Spustit bránu dotazovacího serveru Azure Data Exploreru vyberte Přidat.

  3. Vyberte bránu serveru Kusto Query a pak vyberte test brány serveru.

    Snímek obrazovky znázorňující, jak vybrat úlohu pro Server Gate.

  4. Nakonfigurujte úlohu s následujícími informacemi:

    • Zobrazovaný název: Název brány.
    • Koncový bod služby: Vyberte koncový bod služby.
    • Název databáze: Zadejte název databáze.
    • Typ: Vyberte vložený dotaz.
    • Dotaz: Zadejte dotaz, který chcete spustit.
    • Maximální prahová hodnota: Zadejte maximální počet řádků pro kritéria úspěchu dotazu.

    Snímek obrazovky znázorňující, jak nakonfigurovat úlohu Server Gate.

Poznámka:

Při spuštění vydané verze by se měly zobrazit výsledky podobné následujícímu.

Snímek obrazovky znázorňující ukázkové výsledky úkolů Brány dotazů

Spusťte verzi

  1. Vyberte + Uvolnit>Vytvořit uvolnění, abyste mohli začít s vydáním.

    Snímek obrazovky znázorňující, jak vytvořit verzi

  2. Na kartě Protokoly zkontrolujte, jestli je stav nasazení úspěšný.

    Snímek obrazovky znázorňující úspěšné nasazení

Vytvoření pipeliny pro vydání pro nasazení do předprodukčního prostředí je teď hotové.

Podpora ověřování bez klíčů pro úlohy DevOps v Azure Data Exploreru

Rozšíření podporuje ověřování bez klíčů pro clustery Azure Data Exploreru. Ověřování bez klíčů umožňuje ověřování v clusterech Azure Data Exploreru bez použití klíče. Správa je bezpečnější a jednodušší.

Poznámka:

Adresy URL clusteru Kusto Fabric nejsou podporované pro Workload Identity Federation (WIF) a ověřování spravované identity.

Použijte ověřování pomocí federovaných identit (FIC) v připojení ke službě Azure Data Explorer.

Poznámka:

Počínaje rozšířením 4.0.x koncový bod služby Azure Data Explorer podporuje kromě ověřování instančního objektu také ověřování WIF (Workload Identity Federation).

  1. V instanci DevOps přejděte do Projektová nastavení>Propojení služeb>Nové propojení služby>Azure Data Explorer.

  2. Vyberte Přihlašovací údaje federované identity a zadejte ID instančního objektu služby, ID tenanta, název spojení služby, adresu URL clusteru a pak vyberte Uložit.

  3. V Azure portálu otevřete aplikaci Microsoft Entra pro zadaný hlavní služba.

  4. V části Certifikáty a tajné kódy vyberte federované přihlašovací údaje.

    Snímek obrazovky znázorňující kartu federovaných přihlašovacích údajů aplikace Microsoft Entra

  5. Vyberte Přidat přihlašovací údaje a pak pro případ federovaných přihlašovacích údajů vyberte Jiný vystavitel a vyplňte nastavení pomocí následujících informací:

    • Vystavitel: <https://vstoken.dev.azure.com/{System.CollectionId}> kde {System.CollectionId} je ID kolekce vaší organizace Azure DevOps. ID kolekce najdete následujícími způsoby:

      • V release pipeline Azure DevOps classic vyberte Inicializovat úlohu. ID kolekce se zobrazí v protokolech.
    • Identifikátor subjektu: <sc://{DevOps_Org_name}/{Project_Name}/{Service_Connection_Name}> kde {DevOps_Org_name} je název organizace Azure DevOps, {Project_Name} je název projektu a {Service_Connection_Name} je název připojení služby, který jste vytvořili dříve.

      Poznámka:

      Pokud je v názvu připojení k službě mezera, můžete ji použít s mezerou v poli. Například: sc://MyOrg/MyProject/My Service Connection.

    • Název: Zadejte název přihlašovacích údajů.

    Snímek obrazovky znázorňující, jak vytvořit nové připojení služby s přihlašovacími údaji federované identity

  6. Vyberte Přidat.

Použití přihlašovacích údajů federované identity nebo spravované identity v připojení ke službě Azure Resource Manager (ARM)

  1. V instanci DevOps přejděte na Nastavení projektu>Připojení služeb>Nové připojení služby>Správce zdrojů Azure.

    Snímek obrazovky znázorňující, jak přidat připojení služby Azure Resource Monitor

  2. V části Metoda ověřování vyberte Federaci identit úloh (automatická) a pokračujte. Můžete také použít ruční možnost Federace identit úloh (manuálně) k určení detailů Federace identit úloh nebo možnost Spravované identity. Přečtěte si další informace o nastavení spravované identity pomocí správy prostředků Azure v připojeních služeb Azure Resource Manageru (ARM).

    Snímek obrazovky znázorňující možnost ověřování pro připojení služby Azure Resource Monitor

  3. Vyplňte požadované podrobnosti, vyberte Ověřit a pak vyberte Uložit.

Konfigurace kanálu YAML

Úlohy můžete nakonfigurovat pomocí webového uživatelského rozhraní Azure DevOps nebo kódu YAML v rámci schématu kanálu.

Rozšíření poskytuje tři úlohy kanálu, které jsou přístupné prostřednictvím YAML:

  • Příkaz Azure Data Exploreru (ADXAdminCommand@5) – Spuštění příkazů správce a řízení v clusteru ADX
  • Dotaz Azure Data Exploreru – Spouštění dotazů na cluster ADX a analýza výsledků
  • Brána dotazovacího serveru Azure Data Explorer – úloha bez agenta pro řízení vydání v závislosti na výsledku dotazu

Tip

Pro lepší zabezpečení použijte federaci identit úloh nebo ověřování pomocí spravované identity prostřednictvím připojení služby Azure Resource Manager, namísto ukládání přihlašovacích údajů přímo do kanálu. Tyto metody ověřování bez klíčů jsou doporučeným osvědčeným postupem.

Ukázka příkazu správce – interní příkazy

Následující příklad spustí přímo vložený příkaz správce pomocí servisního připojení Azure Resource Manager (ARM), které podporuje federaci identit pracovních zátěží (WIF) a ověřování prostřednictvím spravovaných identit:

steps:
- task: Azure-Kusto.ADXAdminCommands.PublishToADX.ADXAdminCommand@5
  displayName: 'Run inline ADX admin command'
  inputs:
    clusterUri: 'https://<ClusterName>.<Region>.kusto.windows.net'
    databaseName: '<DatabaseName>'
    commandsSource: 'inline'
    inlineCommands: |
      .create-merge table MyTable (Id:int, Name:string, Timestamp:datetime)
      .create-or-alter function MyFunction() { MyTable | take 10 }
    azureSubscription: '<ARM Service Connection Name>'
  continueOnError: true

Ukázka příkazu správce – příkazy založené na souborech

Následující ukázka spustí příkazy správce ze souborů odpovídajících vzoru globu pomocí ověřování registrace aplikace AAD:

steps:
- task: Azure-Kusto.ADXAdminCommands.PublishToADX.ADXAdminCommand@5
  displayName: 'Deploy schema from files'
  inputs:
    clusterUri: 'https://<ClusterName>.<Region>.kusto.windows.net'
    databaseName: '<DatabaseName>'
    commandsSource: 'files'
    commandFilesPattern: '**/*.csl'
    aadAppId: '$(AAD_APP_ID)'
    aadAppKey: '$(AAD_APP_KEY)'
    aadTenantId: '$(AAD_TENANT_ID)'
  continueOnError: true

Můžete také použít **/*.kql jako vzor globu v závislosti na konvenci pojmenování souboru.

Ukázka příkazu správce – připojení služby Azure Resource Manager

Následující ukázka používá připojení služby Azure Resource Manager, které podporuje federaci identit úloh (WIF) a spravovanou identitu pro ověřování bez klíčů:

steps:
- task: Azure-Kusto.ADXAdminCommands.PublishToADX.ADXAdminCommand@5
  displayName: 'Deploy schema via ARM service connection'
  inputs:
    clusterUri: 'https://<ClusterName>.<Region>.kusto.windows.net'
    databaseName: '<DatabaseName>'
    commandsSource: 'files'
    commandFilesPattern: '**/*.csl'
    azureSubscription: '<ARM Service Connection Name>'
  continueOnError: true
  condition: ne(variables['ProductVersion'], '')

Vstupní parametry úkolu

Následující tabulka popisuje klíčové vstupní parametry pro ADXAdminCommand@5 úlohu:

Parametr Description
clusterUri Základní identifikátor URI pro cluster Kusto (například https://<ClusterName>.<Region>.kusto.windows.net)
databaseName Název cílové databáze
commandsSource Zdroj příkazů: inline pro vložené příkazy KQL nebo files pro příkazy založené na souborech
inlineCommands Vložené příkazy KQL ke spuštění (používá se, pokud commandsSource je inline)
commandFilesPattern Vzor globu pro soubory skriptu (používá se, pokud commandsSource je files), například **/*.csl**/*.kql
aadAppId ID aplikace Microsoft Entra (služba principal) pro ověřování aplikace AAD
aadAppKey Klíč nebo tajný klíč aplikace Microsoft Entra pro ověřování aplikací AAD
aadTenantId ID tenanta Microsoft Entra pro ověřování aplikací AAD
azureSubscription Název připojení služby Azure Resource Manager pro ověřování na základě ARM (podporuje WIF a spravovanou identitu)

Metody ověřování

Rozšíření podporuje následující metody ověřování:

  • Registrace aplikace Azure Active Directory (AAD) – Použijte aadAppId, aadAppKey a aadTenantId a ověřte se pomocí služebního principála. Uložte přihlašovací údaje jako zabezpečené proměnné kanálu.
  • Ověřování na základě certifikátu – Pro ověřování hlavní služby použijte certifikát místo klíče aplikace. Uložte podrobnosti o certifikátu jako zabezpečené proměnné kanálu.
  • Spravovaná identita – Použijte připojení služby Azure Resource Manager nakonfigurované se spravovanou identitou. Nastavte vstup azureSubscription na název připojení služby.
  • Federace identit úloh (WIF) – Použijte připojení služby Azure Resource Manager k federaci identit úloh (automatické nebo ruční). Toto je doporučený přístup bez klíčů. Nastavte vstup azureSubscription na název připojení ke službě.

Poznámka:

Federace pracovních identit (WIF) je novějším přírůstkem do rozšíření. Umožňuje ověřování bez tajných kódů a je doporučeným přístupem pro nové kanály. Pokyny k nastavení najdete v tématu Použití přihlašovacích údajů federované identity nebo spravované identity v připojení ke službě Azure Resource Manager (ARM).

Ukázka dotazu

steps:
- task: Azure-Kusto.PublishToADX.ADXQuery.ADXQuery@5
  displayName: '<Task Display Name>'
  inputs:
    targetType: 'inline'
    script: |
     let badVer=
     RunnersLogs | where Timestamp > ago(30m)
         | where EventText startswith "$$runnerresult" and Source has "ShowDiagnostics"
         | extend State = extract(@"Status='(.*)', Duration.*",1, EventText)
         | where State == "Unhealthy"
         | extend Reason = extract(@'"NotHealthyReason":"(.*)","IsAttentionRequired.*',1, EventText)
         | extend Cluster = extract(@'Kusto.(Engine|DM|CM|ArmResourceProvider).(.*).ShowDiagnostics',2, Source)
         | where Reason != "Merge success rate past 60min is < 90%"
         | where Reason != "Ingestion success rate past 5min is < 90%"
         | where Reason != "Ingestion success rate past 5min is < 90%, Merge success rate past 60min is < 90%"
         | where isnotempty(Cluster)
         | summarize max(Timestamp) by Cluster,Reason
         | order by  max_Timestamp desc
         | where Reason startswith "Differe"
         | summarize by Cluster
     ;
      DimClusters | where Cluster in (badVer)
     | summarize by Cluster , CmConnectionString , ServiceConnectionString ,DeploymentRing
     | extend ServiceConnectionString = strcat("#connect ", ServiceConnectionString)
     | where DeploymentRing == "$(DeploymentRing)"
    kustoUrls: 'https://<ClusterName>.kusto.windows.net?DatabaseName=<DatabaseName>'
    authType: 'kustoserviceconn'
    connectedServiceName: '<connection service name>'
    minThreshold: '0'
    maxThreshold: '10'
  continueOnError: true