2014-04-04 14 views
16

Làm việc với việc học Go, và tôi đang viết một thành phần để quản lý ảnh.Đi Kết nối với S3

Tôi đã nhìn vào thư viện s3 đây: https://godoc.org/launchpad.net/goamz/s3#ACL

Trong Node, tôi sử dụng máy khách Knox và kết nối với xô của tôi như thế này:

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

Trong Go s3 thư viện tôi thấy tất cả các chức năng tôi cần để làm việc với xô s3, nhưng tôi không thể tìm thấy chức năng kết nối - tương tự như chức năng này ở trên.

Cho đến nay, tôi đã thấy điều này trong Documents:

type Auth struct { 
     AccessKey, SecretKey string 
    } 

Và nó có vẻ như tôi cần phải gọi hàm này:

func EnvAuth() (auth Auth, err error) 

Đây là chức năng 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 
    } 

Trong tài liệu S3, tôi thấy tất cả những thứ tôi cần. Tôi chỉ không chắc chắn về cách tôi sử dụng thư viện, đây là lần đầu tiên tôi sử dụng thư viện Go.

Hướng dẫn kết nối với AWS/S3, sau đó thực hiện cuộc gọi xóa sẽ rất hữu ích!

Rất cám ơn :)

Trả lời

25

Có thể dễ dàng hơn bạn nghĩ. Mã mẫu này liệt kê một nhóm. Bạn phải sử dụng thông tin đăng nhập của bạn và tên nhóm, tất nhiên ...

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

này làm việc rất lớn, nhờ một lần nữa! –

+0

không goamz sử dụng kết nối tổng hợp cho s3? – Thellimist

9

Bài đăng gốc sử dụng thư viện goamz. AWS duy trì các official aws-sdk-go library nên được sử dụng thay thế.

Xem phương pháp kết nối trong ví dụ dưới đây, trong đó liệt kê tất cả các phím trong một cái xô cụ thể sử dụng Go sdk chính thức từ 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) 
    } 
} 
+0

Giống như cái này tốt hơn mà không có phụ thuộc bên ngoài –

+2

Và các thông tin có được dự đoán một cách kỳ diệu không? –

Các vấn đề liên quan