猿问

如何使用 golang 从 AWS S3 下载

我正在编写一个 go 函数来从 AWS S3 存储桶下载文件。


func DownloadFromS3Bucket() {

    bucket := "cellery-runtime-installation"

    item := "hello-world.txt"


    file, err := os.Create(item)

    if err != nil {

        fmt.Println(err)

    }


    defer file.Close()


    // Initialize a session in us-west-2 that the SDK will use to load

    // credentials from the shared credentials file ~/.aws/credentials.

    sess, _ := session.NewSession(&aws.Config{

        Region: aws.String("us-east-1")},

    )


    downloader := s3manager.NewDownloader(sess)


    numBytes, err := downloader.Download(file,

        &s3.GetObjectInput{

            Bucket: aws.String(bucket),

            Key:    aws.String(item),

        })

    if err != nil {

        fmt.Println(err)

    }


    fmt.Println("Downloaded", file.Name(), numBytes, "bytes")

}

但是,我收到一条错误消息,要求提供凭据。


NoCredentialProviders:链中没有有效的提供者。已弃用。有关详细消息,请参阅 aws.Config.CredentialsChainVerboseErrors


该文档没有具体说明如何设置凭据。(访问密钥ID,秘密访问密钥)


任何想法?


慕勒3428872
浏览 145回答 2
2回答

慕桂英3389331

有几种方法可以设置凭据。例如,您可以通过设置环境变量来指定它:AWS_ACCESS_KEY = <your_access_key> AWS_SECRET_KEY = <your_secret_key>credentials.NewEnvCredentials()然后只需在您的配置实例中使用:sess, _ := session.NewSession(&aws.Config{     Region:      aws.String("us-east-1"),     Credentials: credentials.NewEnvCredentials(), })

ITMISS

只需设置AWS_ACCESS_KEY和AWS_SECRET_KEY环境变量(您不需要调用credentials.NewEnvCredentials()-session.NewSession您所做的是完美的):func DownloadFromS3Bucket() {        os.Setenv("AWS_ACCESS_KEY","my-key")    os.Setenv("AWS_SECRET_KEY","my-secret")    bucket := "cellery-runtime-installation"    item := "hello-world.txt"    file, err := os.Create(item)    if err != nil {        fmt.Println(err)    }    defer file.Close()    sess, _ := session.NewSession(&aws.Config{Region: aws.String("us-east-1")})    downloader := s3manager.NewDownloader(sess)    numBytes, err := downloader.Download(file,        &s3.GetObjectInput{            Bucket: aws.String(bucket),            Key:    aws.String(item),        })    if err != nil {        fmt.Println(err)    }    fmt.Println("Downloaded", file.Name(), numBytes, "bytes")}
随时随地看视频慕课网APP

相关分类

Go
我要回答