golang AWS云服务开发SDK插件库aws-sdk-go的使用
Golang AWS云服务开发SDK插件库aws-sdk-go的使用
AWS SDK for Go v2
aws-sdk-go-v2
是Go编程语言的AWS SDK v2版本,最低要求Go 1.22版本。
快速开始
下面是一个使用v2 SDK与Amazon DynamoDB交互的完整示例:
1. 初始化项目
$ mkdir ~/helloaws
$ cd ~/helloaws
$ go mod init helloaws
2. 添加SDK依赖
$ go get github.com/aws/aws-sdk-go-v2/aws
$ go get github.com/aws/aws-sdk-go-v2/config
$ go get github.com/aws/aws-sdk-go-v2/service/dynamodb
3. 编写代码
创建main.go
文件并添加以下内容:
package main
import (
"context"
"fmt"
"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/dynamodb"
)
func main() {
// 使用SDK的默认配置,从环境变量、共享凭据和共享配置文件中加载配置
cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion("us-west-2"))
if err != nil {
log.Fatalf("unable to load SDK config, %v", err)
}
// 使用配置创建DynamoDB客户端
svc := dynamodb.NewFromConfig(cfg)
// 构建请求及其输入参数
resp, err := svc.ListTables(context.TODO(), &dynamodb.ListTablesInput{
Limit: aws.Int32(5),
})
if err != nil {
log.Fatalf("failed to list tables, %v", err)
}
fmt.Println("Tables:")
for _, tableName := range resp.TableNames {
fmt.Println(tableName)
}
}
4. 编译和执行
$ go run .
Tables:
tableOne
tableTwo
获取帮助
如果您在使用过程中遇到问题,可以通过以下方式获取帮助:
- 在GitHub上提问或发起讨论
- 如果您认为发现了bug,请提交issue
- 通过AWS支持中心提交支持工单
贡献和反馈
我们欢迎您对v2 SDK提供反馈和贡献:
- 通过GitHub Issues提供反馈或报告bug
- 您可以提交pull request来修复问题或添加新功能
- 所有贡献必须遵循Apache 2.0许可协议
资源
- SDK开发者指南 - 了解如何开始使用AWS SDK for Go V2
- SDK迁移指南 - 了解如何从AWS SDK for Go迁移到V2
- SDK API参考文档 - 查找所有AWS服务API操作的输入和输出参数
- AWS服务文档 - 了解如何与AWS服务交互
- AWS开发者论坛 - 提问、获取帮助和提供反馈
更多关于golang AWS云服务开发SDK插件库aws-sdk-go的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang AWS云服务开发SDK插件库aws-sdk-go的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
AWS SDK for Go (aws-sdk-go) 使用指南
AWS SDK for Go (aws-sdk-go) 是 AWS 官方提供的 Go 语言开发工具包,用于与 AWS 云服务进行交互。下面我将介绍其基本用法和常见示例。
安装和配置
首先安装 SDK:
go get github.com/aws/aws-sdk-go
基本配置
package main
import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/aws/credentials"
)
func main() {
// 1. 使用默认配置(从环境变量或~/.aws/credentials读取)
sess := session.Must(session.NewSessionWithOptions(session.Options{
SharedConfigState: session.SharedConfigEnable,
}))
// 2. 显式指定凭证和区域
sess := session.Must(session.NewSession(&aws.Config{
Region: aws.String("us-west-2"),
Credentials: credentials.NewStaticCredentials("AKID", "SECRET_KEY", "TOKEN"),
}))
}
常用服务示例
1. S3 服务操作
import (
"github.com/aws/aws-sdk-go/service/s3"
"log"
)
func s3Example() {
sess := session.Must(session.NewSession(&aws.Config{
Region: aws.String("us-west-2"),
}))
svc := s3.New(sess)
// 列出所有bucket
result, err := svc.ListBuckets(nil)
if err != nil {
log.Fatal(err)
}
for _, b := range result.Buckets {
log.Printf("* %s created on %s\n",
aws.StringValue(b.Name), aws.TimeValue(b.CreationDate))
}
// 上传文件
file, err := os.Open("testfile.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
_, err = svc.PutObject(&s3.PutObjectInput{
Bucket: aws.String("my-bucket"),
Key: aws.String("testfile.txt"),
Body: file,
})
if err != nil {
log.Fatal(err)
}
}
2. EC2 服务操作
import "github.com/aws/aws-sdk-go/service/ec2"
func ec2Example() {
sess := session.Must(session.NewSession(&aws.Config{
Region: aws.String("us-west-2"),
}))
svc := ec2.New(sess)
// 列出所有实例
result, err := svc.DescribeInstances(nil)
if err != nil {
log.Fatal(err)
}
for _, r := range result.Reservations {
for _, i := range r.Instances {
log.Printf("Instance ID: %s, State: %s\n",
aws.StringValue(i.InstanceId),
aws.StringValue(i.State.Name))
}
}
// 启动新实例
runResult, err := svc.RunInstances(&ec2.RunInstancesInput{
ImageId: aws.String("ami-e7527ed7"),
InstanceType: aws.String("t2.micro"),
MinCount: aws.Int64(1),
MaxCount: aws.Int64(1),
})
if err != nil {
log.Fatal(err)
}
log.Println("Created instance:", *runResult.Instances[0].InstanceId)
}
3. DynamoDB 操作
import "github.com/aws/aws-sdk-go/service/dynamodb"
func dynamoExample() {
sess := session.Must(session.NewSession(&aws.Config{
Region: aws.String("us-west-2"),
}))
svc := dynamodb.New(sess)
// 创建表
input := &dynamodb.CreateTableInput{
AttributeDefinitions: []*dynamodb.AttributeDefinition{
{
AttributeName: aws.String("UserId"),
AttributeType: aws.String("N"),
},
},
KeySchema: []*dynamodb.KeySchemaElement{
{
AttributeName: aws.String("UserId"),
KeyType: aws.String("HASH"),
},
},
ProvisionedThroughput: &dynamodb.ProvisionedThroughput{
ReadCapacityUnits: aws.Int64(10),
WriteCapacityUnits: aws.Int64(10),
},
TableName: aws.String("Users"),
}
_, err := svc.CreateTable(input)
if err != nil {
log.Fatal(err)
}
// 插入数据
_, err = svc.PutItem(&dynamodb.PutItemInput{
TableName: aws.String("Users"),
Item: map[string]*dynamodb.AttributeValue{
"UserId": {
N: aws.String("1"),
},
"UserName": {
S: aws.String("John Doe"),
},
},
})
if err != nil {
log.Fatal(err)
}
}
错误处理
AWS SDK 返回的错误通常包含丰富的信息:
result, err := svc.SomeAPICall(input)
if err != nil {
if aerr, ok := err.(awserr.Error); ok {
switch aerr.Code() {
case s3.ErrCodeNoSuchBucket:
// 处理特定错误
default:
log.Println(aerr.Error())
}
} else {
// 非AWS错误
log.Println(err.Error())
}
return
}
最佳实践
- 复用 Session:Session 创建开销较大,应该在应用生命周期内复用
- 配置超时:为 HTTP 客户端配置合理的超时
- 使用 Context:支持上下文传递以控制超时和取消
- 处理分页:对于返回大量数据的 API 使用分页
// 带上下文的调用示例
ctx := context.Background()
ctx, cancel := context.WithTimeout(ctx, 5*time.Second)
defer cancel()
result, err := svc.SomeAPICallWithContext(ctx, input)
AWS SDK for Go 提供了完整的 AWS 服务 API 覆盖,以上只是基础示例。实际开发中应参考 官方文档 获取各服务的详细 API 说明。