使用 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 type 用于创建客户端以管理虚拟机:

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

与其他 Azure 服务连接也采用相同的模式。 例如,安装 armnetwork 包并创建 VirtualNetwork 客户端以管理虚拟网络 (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("SubID", 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”一词(如果要创建资源组),这会导致 创建OrUpdate 函数
  5. 此时,可以了解如何进行 API 调用以创建 Azure 资源组。

长期运行的操作

由于某些操作可能需要很长时间才能完成,因此管理库包含可以通过异步调用支持长时间运行的操作 (LRO) 的函数。 这些函数名称以 Begin 开头。 此模式的示例包括 BeginCreateBeginDelete

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

以下代码片段举例演示了该模式。

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 的一般性指导。

后续步骤