Перейти к S3

Работа над обучением Go, и я пишу компонент для управления фотографиями.

Я смотрю на библиотеку s3 здесь: https://godoc.org/launchpad.net/goamz/s3#ACL

В узле я использую клиента Knox и подключаюсь к моему ведру следующим образом:

    var bucket = knox.createClient({
        key: config.get('AWS_KEY'),
        secret: config.get('AWS_SECRET'),
        bucket: "bucketName"
    });

В библиотеке Go s3 я вижу все функции, которые мне нужны для работы с ведром s3, но я не могу найти функцию подключения, аналогичную приведенной выше.

До сих пор я нашел это в Документах:

    type Auth struct {
        AccessKey, SecretKey string
    }

И мне кажется, что мне нужно вызвать эту функцию:

    func EnvAuth() (auth Auth, err error)

Это функция EnvAuth:

    func EnvAuth() (auth Auth, err error) {
        auth.AccessKey = os.Getenv("AWS_ACCESS_KEY_ID")
        auth.SecretKey = os.Getenv("AWS_SECRET_ACCESS_KEY")
        // We fallback to EC2_ env variables if the AWS_ variants are not used.
        if auth.AccessKey == "" && auth.SecretKey == "" {
            auth.AccessKey = os.Getenv("EC2_ACCESS_KEY")
            auth.SecretKey = os.Getenv("EC2_SECRET_KEY")
        }
        if auth.AccessKey == "" {
            err = errors.New("AWS_ACCESS_KEY_ID not found in environment")
        }
        if auth.SecretKey == "" {
            err = errors.New("AWS_SECRET_ACCESS_KEY not found in environment")
        }
        return
     }

В документах S3 я вижу все, что мне нужно. Я просто не знаю, как я использую библиотеку, это первый раз, когда я использую библиотеку Go.

Руководство по подключению к AWS/S3, а затем удаление вызова будет очень полезно!

Большое спасибо :)

Ответы

Ответ 1

Это, наверное, легче, чем вы думали. В этом примере кода отображается ведро. Конечно, вы должны использовать свои учетные данные и имя ведра...

package main

import (
    "fmt"
    "launchpad.net/goamz/aws"
    "launchpad.net/goamz/s3"
    "log"
)

func main() {
    auth := aws.Auth{
        AccessKey: "ASDFASDFASDFASDK",
        SecretKey: "DSFSDFDWESDADSFASDFADFDSFASDF",
    }
    euwest := aws.EUWest

    connection := s3.New(auth, euwest)
    mybucket := connection.Bucket("mytotallysecretbucket")
    res, err := mybucket.List("", "", "", 1000)
    if err != nil {
        log.Fatal(err)
    }
    for _, v := range res.Contents {
        fmt.Println(v.Key)
    }
}

Ответ 2

В исходном сообщении используется библиотека goamz. AWS поддерживает официальную библиотеку aws-sdk-go, которая должна использоваться вместо этого.

См. Метод подключения в приведенном ниже примере, в котором перечислены все ключи в определенном ведре с использованием официального Go sdk из AWS:

package main

import (
    "fmt"
    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/s3"
)

func main() {
    svc := s3.New(session.New(), &aws.Config{Region: aws.String("us-east-1")})

    params := &s3.ListObjectsInput{
        Bucket: aws.String("bucket"),
    }

    resp, _ := svc.ListObjects(params)
    for _, key := range resp.Contents {
        fmt.Println(*key.Key)
    }
}