转到S3连接

时间:2014-04-04 15:32:12

标签: amazon-s3 go

继续学习Go,我正在编写一个管理图片的组件。

我一直在这里查看s3库:https://godoc.org/launchpad.net/goamz/s3#ACL

在Node中,我使用Knox客户端并连接到我的存储桶,如下所示:

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

在Go s3库中,我看到了使用s3存储桶所需的所有功能,但我无法找到连接功能 - 与上面的相似。

到目前为止,我已在Docs中找到了这个:

    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,然后进行删除调用的指南非常有帮助!

非常感谢:)

2 个答案:

答案 0 :(得分:25)

这可能比你想象的要容易。此示例代码列出了一个存储桶。您必须使用凭据和存储桶名称,当然......

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)
    }
}

答案 1 :(得分:11)

原帖使用goamz库。 AWS维护着应该使用的official aws-sdk-go library

请参阅以下示例中的connect方法,该方法使用来自AWS的官方Go sdk列出特定存储桶中的所有密钥:

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)
    }
}