英文:
Go Connecting to S3
问题
我正在学习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存储桶的函数,但是我找不到连接函数 - 类似上面的那个。
到目前为止,我在文档中找到了这个:
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")
// 如果没有使用AWS_变量,则回退到EC2_环境变量。
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")
}
if auth.SecretKey == "" {
err = errors.New("在环境中找不到AWS_SECRET_ACCESS_KEY")
}
return
}
在S3文档中,我看到了我需要的所有内容。我只是不确定如何使用该库,这是我第一次使用Go库。
关于连接到AWS/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
答案1
得分: 27
这是一个示例代码,用于列出一个存储桶的内容。当然,你需要使用你自己的凭证和存储桶名称。
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)
}
}
这段代码使用了launchpad.net/goamz
库来连接到 AWS S3 服务,并列出了名为mytotallysecretbucket
的存储桶中的内容。你需要将AccessKey
和SecretKey
替换为你自己的凭证信息,以及将mytotallysecretbucket
替换为你要操作的存储桶名称。
英文:
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)
}
}
答案2
得分: 14
原始帖子使用了goamz库。AWS维护着官方的aws-sdk-go库,应该使用它来替代。
请参考下面的示例中的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)
}
}
英文:
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)
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论