在locahost的Go應用程式中以AWS提供的SDK aws-sdk-go-v2
來取得S3 bucket objects清單。
注意本篇取得的是objects的metadata,如要讀取objectk的內容請參考「Golang 從本機讀取AWS S3 bucket object檔案內容」。
範例環境:
- Go 1.18
事前要求
參考「AWS 建立IAM管理使用者及credentials」設定供應用程式存取AWS需要的IAM管理員credentials。
參考「AWS 建立S3 bucket並上傳檔案」建立S3 bucket及上傳hello.txt
檔案。
下載AWS SDK Go V2 modules
在專案根目錄執行以下命令下載需要的aws-sdk-go-v2
modules。
go get github.com/aws/aws-sdk-go-v2
go get github.com/aws/aws-sdk-go-v2/config
go get github.com/aws/aws-sdk-go-v2/service/s3
存取S3 bucket
下面在Go程式中呼叫config.LoadDefaultConfig()
傳入region參數建立aws.Conifg
物件,AWS SDK預設會讀取$HOME/.aws/credentials
的access keys來通過權限驗證,然後依此參數建立s3.Client
來取得S3 bucket objects。最後用s3.Client.ListObjectsV2()
取得bucket中的物件清單。
main.go
package main
import (
"context"
"fmt"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/credentials"
"github.com/aws/aws-sdk-go-v2/service/s3"
)
func main() {
ctx := context.TODO()
client := NewS3Client(ctx)
bucket := "s3-demo-bucket-202112151320"
output := GetListObjectsOutput(ctx, client, bucket)
for _, object := range output.Contents {
fmt.Printf("key=%s\n", aws.ToString(object.Key))
}
}
func NewS3Client(ctx context.Context) *s3.Client {
cfg, err := config.LoadDefaultConfig(
ctx,
config.WithRegion("ap-northeast-1"),
)
if err != nil {
panic(err)
}
return s3.NewFromConfig(cfg) // Create an Amazon S3 service client
}
func GetListObjectsOutput(
ctx context.Context,
client *s3.Client,
bucket string) *s3.ListObjectsV2Output {
output, err := client.ListObjectsV2(ctx, &s3.ListObjectsV2Input{
Bucket: aws.String(bucket), // bucket name
})
if err != nil {
panic(err)
}
return output
}
測試
執行Go應用程式輸出以下結果,key為S3 bucket中的檔案名稱。
key=hello.txt
沒有留言:
張貼留言