开始使用 适用于 Go 的 AWS SDK - 适用于 Go 的 AWS SDK v2

开始使用 适用于 Go 的 AWS SDK

适用于 Go 的 AWS SDK 需要 Go 1.23 或更高版本。可通过运行以下命令来查看当前 Go 版本:

go version

有关安装或升级 Go 版本的信息,请参阅 Go 文档中的下载和安装

注册 Amazon 账户

您必须拥有 Amazon 账户,才能使用适用于 Go 的 AWS SDK v2。有关详细信息,请参阅创建 AWS 账户

安装适用于 Go 的 AWS SDK v2

适用于 Go 的 AWS SDK v2 使用 Go 模块,这是 Go 1.11 中引入的一项功能。通过运行以下命令来初始化您的本地项目。

go mod init example

初始化 Go 模块项目后,您将能够使用 go get 命令检索 SDK 及其所需的依赖项。这些依赖项将记录在上一个命令创建的 go.mod 文件中。

以下命令演示了如何检索要在应用程序中使用的标准 SDK 模块集。

go get github.com/aws/aws-sdk-go-v2 go get github.com/aws/aws-sdk-go-v2/config

这将检索核心 SDK 模块和用于加载 AWS 共享配置的配置模块。

接下来,您可以安装应用程序所需的一个或多个 AWS 服务 API 客户端。所有 API 客户端都位于 github.com/aws/aws-sdk-go-v2/service 导入层次结构下。可以在此处找到一整套当前支持的 API 客户端。要安装服务客户端,请执行以下命令来检索模块并在 go.mod 文件中记录依赖项。在此示例中,我们检索了 Amazon S3 API 客户端。

go get github.com/aws/aws-sdk-go-v2/service/s3

获取您的 AWS 访问密钥

访问密钥包含访问密钥 ID 和秘密访问密钥,用于签署对 AWS 发出的编程请求。如果没有访问密钥,您可以使用 AWS 管理控制台来创建。我们建议您使用 IAM 访问密钥而不是 AWS 根账户访问密钥。IAM 让您可以安全地控制对您AWS账户中的AWS服务和资源的访问。

注意

要创建访问密钥,您必须拥有执行所需 IAM 操作的权限。有关更多信息,请参阅《IAM 用户指南》中的访问 IAM 资源所需的权限

获取访问密钥 ID 和秘密访问密钥。

  1. 打开 IAM 管理控制台

  2. 在导航菜单上,选择用户

  3. 选择您的 IAM 用户名称 (而不是复选框)。

  4. 打开安全凭证选项卡,然后选择创建访问密钥

  5. 要查看新的访问密钥,请选择显示。您的凭证与下面类似:

    • 访问密钥 ID:AKIAIOSFODNN7EXAMPLE

    • 秘密访问密钥:wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

  6. 要下载密钥对,请选择 Download .csv file(下载 .csv 文件)。将密钥存储在安全位置。

警告

请对密钥保密以保护您的 AWS 账户,切勿与组织以外的任何人共享密钥。

调用一项操作

安装 SDK 后,您可以将 AWS 程序包导入 Go 应用程序以使用该 SDK,如以下示例所示,该示例导入 AWS、Config 和 Amazon S3 库。导入 SDK 程序包后,将加载 AWS SDK 共享配置,构造客户端,并调用 API 操作。

package main import ( "context" "log" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/service/s3" ) func main() { // Load the Shared AWS Configuration (~/.aws/config) cfg, err := config.LoadDefaultConfig(context.TODO()) if err != nil { log.Fatal(err) } // Create an Amazon S3 service client client := s3.NewFromConfig(cfg) // Get the first page of results for ListObjectsV2 for a bucket output, err := client.ListObjectsV2(context.TODO(), &s3.ListObjectsV2Input{ Bucket: aws.String("amzn-s3-demo-bucket"), }) if err != nil { log.Fatal(err) } log.Println("first page results") for _, object := range output.Contents { log.Printf("key=%s size=%d", aws.ToString(object.Key), *object.Size) } }