Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Go Connecting to S3

Tags:

go

amazon-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 :)

like image 495
Jorge Olivero Avatar asked Apr 04 '14 15:04

Jorge Olivero


People also ask

What is the path to S3 bucket?

An S3 bucket can be accessed through its URL. The URL format of a bucket is either of two options: http://s3.amazonaws.com/[bucket_name]/ http://[bucket_name].s3.amazonaws.com/

How can I access my Amazon S3 bucket over VPN?

To privately access Amazon S3 from inside a Amazon Virtual Private Cloud (VPC), you can use Gateway VPC endpoints for Amazon S3. These allow applications running in a VPC to access S3 without an Internet gateway or NAT gateway.

Does S3 support HTTP?

Amazon S3 website endpoints do not support HTTPS or access points. If you want to use HTTPS, you can use Amazon CloudFront to serve a static website hosted on Amazon S3. For more information, see How do I use CloudFront to serve HTTPS requests for my Amazon S3 bucket?


1 Answers

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)
    }
}
like image 131
topskip Avatar answered Oct 10 '22 18:10

topskip