Azure SDK for Go 管理库概述

如文章中所述 ,什么是 Azure SDK for Go?,Azure SDK for Go 具有一组管理和客户端库。 管理库共享 Azure 标识支持、HTTP 管道和错误处理等功能。 有关管理库的完整列表,请参阅 Azure SDK for Go 模块

本文介绍使用管理库与 Azure 资源交互的基本步骤。

安装 Go 包

在大多数项目中,安装 Go 包进行版本控制和依赖项管理。

若要安装 Go 包,请运行以下命令 go get

例如,若要安装 armcompute 包,请运行以下命令:

go get github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute

在大多数 Go 应用中,安装以下包进行身份验证:

  • github.com/Azure/azure-sdk-for-go/sdk/azcore/to
  • github.com/Azure/azure-sdk-for-go/sdk/azidentity

将包导入到 Go 代码中

下载后,包将通过 import 语句导入应用:

import (
    "github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
    "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute"
)

向 Azure 进行身份验证

若要针对 Azure 订阅运行代码,需要向 Azure 进行身份验证。 azidentity 包支持多个选项向 Azure 进行身份验证。 这些选项包括客户端/机密、证书和托管标识。

默认身份验证选项为 DefaultAzureCredential,它使用本文前面设置的环境变量。 在 Go 代码中,将创建一个 azidentity 对象,如下所示:

cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
  // handle error
}

创建资源管理客户端

从 Azure 标识获取凭据后,创建客户端以连接到目标 Azure 服务。

例如,假设要连接到 Azure 计算 服务。 计算包由一个或多个客户端组成。 客户端对一组相关 API 进行分组,提供对指定订阅中其功能的访问权限。 创建一个或多个客户端来访问所需的 API。

以下代码使用 armcompute。NewVirtualMachinesClient 类型 ,用于创建用于管理虚拟机的客户端:

client, err := armcompute.NewVirtualMachinesClient("<subscription ID>", cred, nil)
if err != nil {
  // handle error
}

同一模式用于与其他 Azure 服务连接。 例如,安装 armnetwork 包并创建 虚拟网络 客户端来管理虚拟网络 (VNET) 资源。

client, err := armnetwork.NewVirtualNetworksClient("<subscription ID>", cred, nil)
if err != nil {
  // handle error
}

代码示例

package main

import (
    "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute"
)

func main() {
    cred, err := azidentity.NewDefaultAzureCredential(nil)
    if err != nil {
        // handle error
    }
    client, err := armcompute.NewVirtualMachinesClient("<subscription ID>", cred, nil)
    if err != nil {
        // handle error
    }
}

使用 Azure SDK for Go 参考文档

实例化客户端后,使用它对 Azure 资源进行 API 调用。 对于资源管理方案,大多数用例都是 CRUD(创建、读取、更新、删除)作。

若要查找特定类型的作,请执行以下步骤:

  1. 转到 Azure SDK for Go 参考文档
  2. 搜索包。 (按 <Ctrl+F> 会自动展开页面上的所有节点进行搜索。
  3. 选择套餐。
  4. 在包的页面上搜索类型。
  5. 阅读 Go 代码的类型说明和使用情况信息。

还可以通过将包的名称追加到 github.com/Azure/azure-sdk-for-go/sdk/其中来手动生成 URL。

例如,如果需要 compute/armcompute 参考文档,则 URL 为 github.com/Azure/azure-sdk-for-go/sdk/compute/armcompute.

此示例演示如何查找 Azure 资源组作的参考文档:

  1. 转到有关 pkg.go.dev 的主要 Azure SDK for Go 参考文档
  2. 选择 <Ctrl+F> 并输入 resourcemanager/resources/armresources。 键入搜索词时,会看到与 resources/armresources 包的紧密匹配。
  3. 为应用程序选择相应的包。
  4. 阅读“入门”部分或搜索特定作。 例如,搜索“resourcegroupsclient.create”(创建资源组)会转到 CreateOrUpdate 函数
  5. 了解如何进行 API 调用以创建 Azure 资源组。

长期运行的操作

某些作可能需要很长时间才能完成,因此管理库具有通过异步调用支持长时间运行的作(LRO)的函数。 这些函数名称以 Begin类似于 BeginCreateBeginDelete.

由于这些函数是异步的,因此在函数完成其任务时,代码不会阻止。 相反,该函数会立即返回 轮询器 对象。 然后,代码调用同步轮询函数,该函数在原始异步函数完成时返回。

以下代码片段显示了此模式的示例。

ctx := context.Background()
// Call an asynchronous function to create a client. The return value is a poller object.
poller, err := client.BeginCreate(ctx, "resource_identifier", "additional_parameter")

if err != nil {
    // handle error...
}

// Call the poller object's PollUntilDone function that will block until the poller object
// has been updated to indicate the task has completed.
resp, err = poller.PollUntilDone(ctx, nil)
if err != nil {
    // handle error...
}

// Print the fact that the LRO completed.
fmt.Printf("LRO done")

// Work with the response ("resp") object.

要点

  • PollUntilDone 函数需要一个轮询间隔时间,用于指定尝试获取状态的频率。
  • 间隔通常较短。 请参阅特定 Azure 资源的文档以了解建议的间隔。
  • Go Azure SDK 设计指南页的 LRO 部分包含 LRO 的更高级的示例和常规指南。

后续步骤