Go를 사용 하 여 Azure 데이터 탐색기 클러스터 및 데이터베이스 만들기Create an Azure Data Explorer cluster and database using Go

Azure Data Explorer는 애플리케이션, 웹 사이트, IoT 디바이스 등으로부터 대량의 데이터 스트리밍에 대한 실시간 분석을 제공하는 빠른 속도의 완전 관리형 데이터 분석 서비스입니다.Azure Data Explorer is a fast, fully managed data analytics service for real-time analysis on large volumes of data streaming from applications, websites, IoT devices, and more. Azure Data Explorer를 사용하려면 먼저 클러스터를 만들고 이 클러스터에 데이터베이스를 하나 이상 만듭니다.To use Azure Data Explorer, you first create a cluster, and create one or more databases in that cluster. 그런 다음, 데이터베이스에 대해 쿼리를 실행할 수 있도록 데이터베이스에 데이터를 수집(로드)합니다.Then you ingest (load) data into a database so that you can run queries against it.

이 문서에서는 Go를 사용 하 여 Azure 데이터 탐색기 클러스터와 데이터베이스를 만듭니다.In this article, you create an Azure Data Explorer cluster and database using Go. 그런 다음 새 클러스터와 데이터베이스를 나열 하 고 삭제 하 고 리소스에 대 한 작업을 실행할 수 있습니다.You can then list and delete your new cluster and database and execute operations on your resources.

필수 구성 요소Prerequisites

  • Azure 구독이 아직 없는 경우 시작하기 전에 Azure 체험 계정을 만듭니다.If you don't have an Azure subscription, create a free Azure account before you begin.
  • Git를 설치합니다.Install Git.
  • Go의 적절 한 버전을 설치 합니다.Install an appropriate version of Go. 지원 되는 릴리스에 대 한 자세한 내용은 Azure GO SDK를 참조 하세요.For more information regarding supported releases, see the Azure Go SDK.

코드 검토Review the code

이 섹션은 선택 사항입니다.This section is optional. 코드가 작동 하는 방식을 알아보려면 다음 코드 조각을 검토할 수 있습니다.If you're interested to learn how the code works, you can review the following code snippets. 그렇지 않다면 애플리케이션 실행으로 건너뛰어도 됩니다.Otherwise, you can skip ahead to Run the application.

인증Authentication

프로그램은 작업을 실행 하기 전에 Azure 데이터 탐색기에 인증 해야 합니다.The program needs to authenticate to Azure Data Explorer before executing any operations. 클라이언트 자격 증명 인증 유형은 인증에 사용 됩니다 . 미리 정의 된 환경 변수 AZURE_CLIENT_ID , AZURE_CLIENT_SECRET , AZURE_TENANT_ID 를 검색 하는 NewAuthorizerFromEnvironment입니다.The Client credentials authentication type is used by auth.NewAuthorizerFromEnvironment that looks for the following pre-defined environment variables: AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, AZURE_TENANT_ID.

다음 예에서는 kusto를 보여 줍니다. 이 기술을 사용 하 여 ClustersClient를 만듭니다.The following example shows how a kusto.ClustersClient is created using this technique:

func getClustersClient(subscription string) kusto.ClustersClient {
    client := kusto.NewClustersClient(subscription)
    authR, err := auth.NewAuthorizerFromEnvironment()
    if err != nil {
        log.Fatal(err)
    }
    client.Authorizer = authR

    return client
}

Auth를 사용 합니다. Azure CLI 설치 되 고 인증을 위해 구성 된 경우 로컬 개발을 위한 NewAuthorizerFromCLIWithResource 함수입니다.Use the auth.NewAuthorizerFromCLIWithResource function for local development if you have Azure CLI installed and configured for authentication.

클러스터 만들기Create cluster

에서 Createorupdate 함수를 사용 kusto.ClustersClient 하 여 새 Azure 데이터 탐색기 클러스터를 만듭니다.Use the CreateOrUpdate function on kusto.ClustersClient to create a new Azure Data Explorer cluster. 결과를 검사 하기 전에 프로세스가 완료 될 때까지 기다립니다.Wait for the process to complete before inspecting the results.

func createCluster(sub, name, location, rgName string) {
    ...
    result, err := client.CreateOrUpdate(ctx, rgName, name, kusto.Cluster{Location: &location, Sku: &kusto.AzureSku{Name: kusto.DevNoSLAStandardD11V2, Capacity: &numInstances, Tier: kusto.Basic}})
    ...
    err = result.WaitForCompletionRef(context.Background(), client.Client)
    ...
    r, err := result.Result(client)
}

클러스터 나열List clusters

에서 Listbyresourcegroup 함수를 사용 kusto.ClustersClient 하 여 kusto를 가져옵니다. 그런 다음 출력을 테이블 형식으로 표시 하기 위해 반복 되는 ClusterListResult입니다.Use the ListByResourceGroup function on kusto.ClustersClient to get a kusto.ClusterListResult that is then iterated to show the output in a tabular format.

func listClusters(sub, rgName string) {
    ...
    result, err := getClustersClient(sub).ListByResourceGroup(ctx, rgName)
    ...
    for _, c := range *result.Value {
        // setup tabular representation
    }
    ...
}

데이터베이스 만들기Create database

Kusto에서 Createorupdate 함수를 사용 합니다. DatabasesClient 를 통해 기존 클러스터에 새 Azure 데이터 탐색기 데이터베이스를 만들 수 있습니다.Use CreateOrUpdate function on kusto.DatabasesClient to create a new Azure Data Explorer database in an existing cluster. 결과를 검사 하기 전에 프로세스가 완료 될 때까지 기다립니다.Wait for the process to complete before inspecting the results.

func createDatabase(sub, rgName, clusterName, location, dbName string) {
    future, err := client.CreateOrUpdate(ctx, rgName, clusterName, dbName, kusto.ReadWriteDatabase{Kind: kusto.KindReadWrite, Location: &location})
    ...
    err = future.WaitForCompletionRef(context.Background(), client.Client)
    ...
    r, err := future.Result(client)
    ...
}

데이터베이스 나열List databases

에서 Listbycluster 함수를 사용 kusto.DatabasesClient 하 여 kusto를 가져옵니다. 테이블 형식으로 출력을 표시 하기 위해 반복 되는 DatabaseListResult입니다.Use ListByCluster function on kusto.DatabasesClient to get kusto.DatabaseListResult that is then iterated to show the output in a tabular format.

func listDatabases(sub, rgName, clusterName string) {
    result, err := getDBClient(sub).ListByCluster(ctx, rgName, clusterName)
    ...
    for _, db := range *result.Value {
        // setup tabular representation
    }
    ...
}

데이터베이스 삭제Delete database

에서 delete 함수를 사용 kusto.DatabasesClient 하 여 클러스터에서 기존 데이터베이스를 삭제 합니다.Use Delete function on a kusto.DatabasesClient to delete an existing database in a cluster. 결과를 검사 하기 전에 프로세스가 완료 될 때까지 기다립니다.Wait for the process to complete before inspecting the results.

func deleteDatabase(sub, rgName, clusterName, dbName string) {
    ...
    future, err := getDBClient(sub).Delete(ctx, rgName, clusterName, dbName)
    ...
    err = future.WaitForCompletionRef(context.Background(), client.Client)
    ...
    r, err := future.Result(client)
    if r.StatusCode == 200 {
        // determine success or failure
    }
    ...
}

클러스터 삭제Delete cluster

에서 delete 함수를 사용 kusto.ClustersClient 하 여 클러스터를 삭제 합니다.Use Delete function on a kusto.ClustersClient to delete a cluster. 결과를 검사 하기 전에 프로세스가 완료 될 때까지 기다립니다.Wait for the process to complete before inspecting the results.

func deleteCluster(sub, clusterName, rgName string) {
    result, err := client.Delete(ctx, rgName, clusterName)
    ...
    err = result.WaitForCompletionRef(context.Background(), client.Client)
    ...
    r, err := result.Result(client)
    if r.StatusCode == 200 {
        // determine success or failure
    }
    ...
}

애플리케이션 실행Run the application

샘플 코드를 있는 그대로 실행 하면 다음 작업이 수행 됩니다.When you run the sample code as is, the following actions are performed:

  1. Azure 데이터 탐색기 클러스터가 만들어집니다.An Azure Data Explorer cluster is created.

  2. 지정 된 리소스 그룹의 모든 Azure 데이터 탐색기 클러스터가 나열 됩니다.All the Azure Data Explorer clusters in the specified resource group are listed.

  3. Azure 데이터 탐색기 데이터베이스가 기존 클러스터에 만들어집니다.An Azure Data Explorer database is created in the existing cluster.

  4. 지정 된 클러스터의 모든 데이터베이스가 나열 됩니다.All the databases in the specified cluster are listed.

  5. 데이터베이스가 삭제 됩니다.The database is deleted.

  6. 클러스터가 삭제 됩니다.The cluster is deleted.

    func main() {
        createCluster(subscription, clusterNamePrefix+clusterName, location, rgName)
        listClusters(subscription, rgName)
        createDatabase(subscription, rgName, clusterNamePrefix+clusterName, location, dbNamePrefix+databaseName)
        listDatabases(subscription, rgName, clusterNamePrefix+clusterName)
        deleteDatabase(subscription, rgName, clusterNamePrefix+clusterName, dbNamePrefix+databaseName)
        deleteCluster(subscription, clusterNamePrefix+clusterName, rgName)
    }
    

    작업의 여러 조합을 시도 하려면 필요에 따라의 각 함수에 대 한 주석 처리를 제거 하 고 주석 처리를 수행할 수 있습니다 main.go .To try different combinations of operations, you can uncomment and comment the respective functions in main.go as needed.

  7. GitHub에서 샘플 코드를 복제 합니다.Clone the sample code from GitHub:

    git clone https://github.com/Azure-Samples/azure-data-explorer-go-cluster-management.git
    cd azure-data-explorer-go-cluster-management
    
  8. 프로그램은 클라이언트 자격 증명을 사용 하 여 인증 합니다.The program authenticates using client credentials. Azure CLI az ad sp create-rbac 명령을 사용 하 여 서비스 주체를 만듭니다.Use the Azure CLI az ad sp create-for-rbac command to create a service principal. 다음 단계에서 사용할 클라이언트 ID, 클라이언트 암호 및 테 넌 트 ID 정보를 저장 합니다.Save the client ID, client secret, and tenant ID information for use in the next step.

  9. 서비스 사용자 정보를 포함 하 여 필요한 환경 변수를 내보냅니다.Export required environment variables including service principal information. 구독 ID, 리소스 그룹 및 클러스터를 만들려는 지역을 입력 합니다.Enter your subscription ID, resource group, and region where you want to create the cluster.

    export AZURE_CLIENT_ID="<enter service principal client ID>"
    export AZURE_CLIENT_SECRET="<enter service principal client secret>"
    export AZURE_TENANT_ID="<enter tenant ID>"
    
    export SUBSCRIPTION="<enter subscription ID>"
    export RESOURCE_GROUP="<enter resource group name>"
    export LOCATION="<enter azure location e.g. Southeast Asia>"
    
    export CLUSTER_NAME_PREFIX="<enter prefix (cluster name will be [prefix]-ADXTestCluster)>"
    export DATABASE_NAME_PREFIX="<enter prefix (database name will be [prefix]-ADXTestDB)>"
    

    프로덕션 시나리오에서 환경 변수를 사용 하 여 응용 프로그램에 자격 증명을 제공할 수 있습니다.You're likely to use environment variables in production scenarios to provide credentials to your application. 코드 검토에 설명 된 대로 로컬 개발의 경우 auth를 사용 합니다. Azure CLI 설치 되 고 인증을 위해 구성 된 경우에는 NewAuthorizerFromCLIWithResource 합니다.As mentioned in Review the code, for local development, use auth.NewAuthorizerFromCLIWithResource if you have Azure CLI installed and configured for authentication. 이 경우 서비스 주체를 만들 필요가 없습니다.In that situation, you don't need to create a service principal.

  10. 다음과 같이 프로그램을 실행합니다.Run the program:

    go run main.go
    

    다음과 유사한 출력이 표시 됩니다.You'll get an output similar to the following:

    waiting for cluster creation to complete - fooADXTestCluster
    created cluster fooADXTestCluster
    listing clusters in resource group <your resource group>
    +-------------------+---------+----------------+-----------+-----------------------------------------------------------+
    |       NAME        |  STATE  |    LOCATION    | INSTANCES |                            URI                           |
    +-------------------+---------+----------------+-----------+-----------------------------------------------------------+
    | fooADXTestCluster | Running | Southeast Asia |         1 | https://fooADXTestCluster.southeastasia.kusto.windows.net |
    +-------------------+---------+----------------+-----------+-----------------------------------------------------------+
    
    waiting for database creation to complete - barADXTestDB
    created DB fooADXTestCluster/barADXTestDB with ID /subscriptions/<your subscription ID>/resourceGroups/<your resource group>/providers/Microsoft.Kusto/Clusters/fooADXTestCluster/Databases/barADXTestDB and type Microsoft.Kusto/Clusters/Databases
    
    listing databases in cluster fooADXTestCluster
    +--------------------------------+-----------+----------------+------------------------------------+
    |              NAME              |   STATE   |    LOCATION    |                TYPE                |
    +--------------------------------+-----------+----------------+------------------------------------+
    | fooADXTestCluster/barADXTestDB | Succeeded | Southeast Asia | Microsoft.Kusto/Clusters/Databases |
    +--------------------------------+-----------+----------------+------------------------------------+
    
    waiting for database deletion to complete - barADXTestDB
    deleted DB barADXTestDB from cluster fooADXTestCluster
    
    waiting for cluster deletion to complete - fooADXTestCluster
    deleted ADX cluster fooADXTestCluster from resource group <your resource group>
    

리소스 정리Clean up resources

이 문서의 샘플 코드를 사용 하 여 프로그래밍 방식으로 클러스터를 삭제 하지 않은 경우 Azure CLI를 사용 하 여 수동으로 삭제 하세요.If you didn't delete the cluster programmatically using the sample code in this article, delete them manually using Azure CLI.

다음 단계Next steps

Azure 데이터 탐색기 Go SDK를 사용 하 여 데이터 수집Ingest data using the Azure Data Explorer Go SDK