连接到S3

Working on learning Go, and I am writing a component to manage pictures.

I've been looking at the s3 library here: https://godoc.org/launchpad.net/goamz/s3#ACL

In Node, I use the Knox client and connect to my bucket like this:

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

In the Go s3 library I see all of the functions I need to work with the s3 bucket, but I can't find the connect function - similar to this one above.

So far, I've found this in the Docs:

    type Auth struct {
        AccessKey, SecretKey string
    }

And it seems like I need to call this function:

    func EnvAuth() (auth Auth, err error)

This is the EnvAuth function:

    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
     }

In the S3 docs, I see all of the things that I need. I am just unsure about how I use the library, this is the first time I use a Go library.

A guide on connecting to AWS/S3, then making a delete call would be very helpful!

Many thanks :)

It's probably easier than you've thought. This sample code lists a bucket. You have to use your credentials and a bucket name, of course...

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

The original post uses the goamz library. AWS maintains the official aws-sdk-go library which should be used instead.

See the connect method in the below example, which lists all keys in a specific bucket using official Go sdk from 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)
    }
}