Перейти к 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)
}
}