使用 Go 创建 Azure 数据资源管理器群集和数据库

Azure 数据资源管理器是一项快速、完全托管的数据分析服务,用于实时分析从应用程序、网站和 IoT 设备等资源流式传输的海量数据。 若要使用 Azure 数据资源管理器,请先创建群集,再在该群集中创建一个或多个数据库。 然后将数据引入(加载)到数据库,以便对其运行查询。

本文将使用 Go 创建 Azure 数据资源管理器群集和数据库。 然后,你可以列出和删除新的群集和数据库,并对资源执行操作。

先决条件

  • Azure 订阅。 创建 Azure 帐户
  • 安装 Git
  • 安装合适版本的 Go。 有关支持的版本的详细信息,请参阅 Azure Go SDK

查看代码

本部分是可选的。 如果有兴趣了解代码如何工作,可以查看以下代码片段。 否则,可以跳到运行应用程序

身份验证

在执行任何操作之前,程序都需要向 Azure 数据资源管理器进行身份验证。 客户端凭据身份验证类型auth.NewAuthorizerFromEnvironment 使用,后者会查找以下预定义的环境变量:AZURE_CLIENT_IDAZURE_CLIENT_SECRETAZURE_TENANT_ID

以下示例展示了如何使用此方法创建 kusto.ClustersClient

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
}

提示

如果你为身份验证安装并配置了 Azure CLI,请使用 auth.NewAuthorizerFromCLIWithResource 函数进行本地开发。

创建群集

kusto.ClustersClient 使用 CreateOrUpdate 函数来创建新的 Azure 数据资源管理器群集。 等待该过程完成,然后检查结果。

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

列出群集

kusto.ClustersClient 使用 ListByResourceGroup 函数来获取 kusto.ClusterListResult,后者将进行迭代以便以表格式显示输出。

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

创建数据库

kusto.DatabasesClient 使用 CreateOrUpdate 函数,以在现有群集中创建新的 Azure 数据资源管理器数据库。 等待该过程完成,然后检查结果。

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

列出数据库

kusto.DatabasesClient 使用 ListByCluster 函数以获取 kusto.DatabaseListResult,后者将进行迭代以便以表格格式显示输出。

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

删除数据库

kusto.DatabasesClient 使用 Delete 函数以删除群集中的现有数据库。 等待该过程完成,然后检查结果。

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

删除群集

kusto.ClustersClient 使用 Delete 函数以删除群集。 等待该过程完成,然后检查结果。

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

运行此应用程序

按原样运行示例代码时,将执行以下操作:

  1. 创建一个 Azure 数据资源管理器群集。

  2. 列出指定资源组中的所有 Azure 数据资源管理器群集。

  3. 在现有群集中创建一个 Azure 数据资源管理器数据库。

  4. 列出指定群集中的所有数据库。

  5. 删除数据库。

  6. 删除群集。

    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 中取消注释和注释相应的函数。

  7. 从 GitHub 克隆示例代码:

    git clone https://github.com/Azure-Samples/azure-data-explorer-go-cluster-management.git
    cd azure-data-explorer-go-cluster-management
    
  8. 程序使用客户端凭据进行身份验证。 使用 Azure CLI az ad sp create-for-rbac 命令创建服务主体。 保存客户端 ID、客户端密码和租户 ID 信息,以便在下一步中使用。

  9. 导出所需的环境变量,包括服务主体信息。 输入要在其中创建群集的订阅 ID、资源组和区域。

    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. China East 2>"
    
    export CLUSTER_NAME_PREFIX="<enter prefix (cluster name will be [prefix]-ADXTestCluster)>"
    export DATABASE_NAME_PREFIX="<enter prefix (database name will be [prefix]-ADXTestDB)>"
    

    提示

    在生产方案中,你可能会使用环境变量向应用程序提供凭据。 如查看代码中所述,对于本地开发,如果你为身份验证安装并配置了 Azure CLI,请使用 auth.NewAuthorizerFromCLIWithResource。 在这种情况下,不需要创建服务主体。

  10. 运行该程序:

    go run main.go
    

    你会看到类似于以下内容的输出:

    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 | China East 2   |         1 | https://fooADXTestCluster.chinaeast2.kusto.chinacloudapi.cn |
    +-------------------+---------+----------------+-----------+-----------------------------------------------------------+
    
    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 |  China East 2  | 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 Azure Data Explorer cluster fooADXTestCluster from resource group <your resource group>
    

清理资源

如果未使用本文中的示例代码以编程方式删除群集,请使用 Azure CLI 手动删除它们。

后续步骤

使用 Azure 数据资源管理器 Go SDK 引入数据