網頁

2021/12/19

Golang 從本機取得AWS S3 bucket objects清單

在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。



存取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

github


沒有留言:

張貼留言