Go Azure SDK包括管理库和数据平面客户端库。 本文提供了一个概述,以便你可以了解代码库是什么、如何融入 Azure 工作流,以及下一步去哪里寻找 Go 特定模式。
管理库
使用管理库预配、配置和管理Azure资源。 他们专注于管理资源本身,而不是存储在其中的数据。 管理库执行控制平面操作,这些操作负责管理 Azure 资源和服务配置。 典型任务包括:
- 创建或更新资源组、虚拟网络或虚拟机。
- 配置安全设置、标识、访问策略和诊断。
- 列出、标记和删除订阅中的Azure资源。
- 自动执行部署、清理、合规性和平台操作。
管理库包的名称如下 armcompute, armnetwork以及 armkeyvault。 在应用程序生命周期的设置、配置和治理阶段使用管理库。 有关详细包文档,请在 pkg.go.dev 上搜索包。
客户端库
当 Go 应用程序需要处理已预配Azure服务中的数据或运行时图面时,请使用客户端库。 客户端库执行 数据平面 操作,这些操作适用于存储在服务中或流经服务中的数据。 典型任务包括:
- 从存储帐户上传和下载 Blob。
- 使用服务总线或Event Hubs发送和接收消息。
- 读取、写入或删除数据库中的记录。
- 从密钥保管库检索机密。
- 针对预配的资源执行查询或操作。
客户端库包具有名称,如azblob、azstorage、azsecretsazservicebus和azeventhubs。 使用管理库预配基础Azure服务后,请使用客户端库。 有关详细包文档,请在 pkg.go.dev 上搜索包。
同时使用管理和客户端库
单个 Go 解决方案可以跨控制平面和数据平面使用管理和客户端库。 例如,在设置过程中,可以使用管理库创建存储帐户(控制平面),然后使用应用程序中的客户端库上传和下载 Blob(数据平面)。 了解区别有助于为工作流中的每个任务选择正确的库。
有关每个平面特定于 Go 的模式和示例,请参阅以下文章:
安装 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 SDK库的Go应用应使用微软Entra ID通过Azure标识库进行身份验证。 基于令牌的身份验证比连接字符串或密钥更安全且更易于管理。 建议的凭据取决于应用运行的位置:对于Azure托管的应用,使用托管标识;对于本地开发,使用开发人员凭据或服务主体;对于大多数本地方案,使用服务主体。
默认身份验证选项为 DefaultAzureCredential,它使用本文前面设置的环境变量。 在 Go 代码中,按如下所示创建对象 azidentity :
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
// handle error
}
有关身份验证的详细信息,请参阅 Azure SDK for Go 身份验证。
创建资源管理客户端
从Azure标识获取凭据后,创建客户端以连接到目标Azure服务。
例如,假设要连接到 Azure Compute 服务。 Compute 包由一个或多个客户端组成。 客户端对一组相关 API 进行分组,提供对指定订阅中其功能的访问权限。 创建一个或多个客户端来访问所需的 API。
以下代码使用 armcompute。NewVirtualMachinesClient 类型创建用于管理虚拟机的客户端:
client, err := armcompute.NewVirtualMachinesClient("<subscription ID>", cred, nil)
if err != nil {
// handle error
}
有关使用 Go 管理Azure资源的详细信息,请参阅 使用 Go Azure SDK进行控制平面操作。
使用相同的模式与其他Azure服务连接。 例如,安装 armnetwork 包并创建 virtual network 客户端来管理虚拟网络资源。
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 服务的详细信息,请参阅 使用 Azure SDK for Go 语言执行数据平面操作。
使用 Azure SDK for Go 存储库
实例化客户端后,使用它对Azure资源进行 API 调用。 对于资源管理场景,大多数用例都是 CRUD(创建、读取、更新、删除)操作。
若要查找特定类型的操作,请在 go Azure SDK for Go GitHub 存储库中浏览源。 SDK 源代码组织在 sdk/ 目录下,管理库位于 sdk/resourcemanager/ 目录,而客户端库位于如 sdk/storage/ 和 sdk/security/keyvault/ 等特定于服务的文件夹中。
若要查找特定类型的源,请执行以下步骤:
- 转到 GitHub 上的 Azure SDK for Go 存储库。
- 导航到
sdk/resourcemanager/管理库或sdk/客户端库。 - 打开服务文件夹,然后打开包文件夹。 例如,
sdk/resourcemanager/compute/armcompute/。 - 查找包含所需类型的源文件。 客户端类型和方法通常位于以客户端命名的文件中,例如
virtualmachines_client.go。 - 读取类型的注释和方法签名以获取使用信息。
还可以直接生成 URL。 例如,若要查找资源组操作源,请导航到 https://github.com/Azure/azure-sdk-for-go/tree/main/sdk/resourcemanager/resources/armresources。
此示例演示如何查找Azure资源组操作的源:
- 转到 GitHub 上的 Azure Go SDK 存储库。
- 导航到
sdk/resourcemanager/resources/armresources/。 - 打开
resource_groups_client.go,查找ResourceGroupsClient类型及其CreateOrUpdate方法。 - 阅读方法的注释和参数,了解如何进行 API 调用。
对于生成的参考文档,请在 pkg.go.dev 上搜索该包。
长期运行的操作
某些操作需要很长时间才能完成。 为了处理这些操作,管理库提供通过异步调用支持长时间运行的操作(LRO)的函数。 这些函数名称以
由于这些函数是异步的,因此在函数完成其任务时,代码不会阻止。 相反,该函数会立即返回 轮询器 对象。 然后,代码调用同步轮询函数,该函数在原始异步函数完成时返回。
以下代码片段显示了此模式的示例。
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函数需要一个轮询间隔时间,用于指定尝试获取状态的频率。 如果为选项参数传递 ,则nil,但可以根据需求对其进行调整。 - 间隔通常较短。 有关建议的间隔,请参阅Azure特定资源的文档。
- Go Azure SDK设计指南页的 LRO 部分具有更高级的示例和 LRO 的一般准则。
有关使用模式的更多详细信息,请参阅 Azure SDK for Go 中的 常见使用模式。
后续步骤
有关身份验证、客户端构建、长时间运行操作和服务演练模式的详细信息,请参阅特定领域的文章:
- 使用 Azure Go SDK 进行控制平面操作,用于管理导向的 Go 工作流。
- 使用适用于 Go 的 Azure SDK 进行数据平面操作,适用于经常跟随配置的运行时数据访问模式。
有关示例,请参阅 Azure SDK for Go 示例GitHub。