即使存在,也会丢失密钥

时间:2018-02-20 21:22:41

标签: amazon-web-services go amazon-s3 struct

我正在使用以下代码创建预先签名的网址:

package main

import (
    "fmt"
    "log"
    "time"

    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/s3"
    "github.com/kelseyhightower/envconfig"
)

func main() {
    configuration := s3.PutObjectInput{ Key: aws.String("default_key") }

    // Add Bucket to configuration from environment variable
    // e.g:
    //    CONFIGURATION_BUCKET -> configuration.Bucket
    err := envconfig.Process("configuration", &configuration)

    if err != nil {
        log.Fatal(err.Error())
    }

    sess := session.Must(session.NewSessionWithOptions(session.Options{
      SharedConfigState: session.SharedConfigEnable,
    }))
    svc := s3.New(sess)
    req, _ := svc.PutObjectRequest(&configuration)

    url, err := req.Presign(15 * time.Minute)

    if err != nil {
        log.Fatal(err.Error())
    }
    fmt.Println("Url is", url)
}

密钥总是一样的,但是桶可以根据我所处的环境而改变。

当我使用fmt.Println进行打印时,存在Bucket and Key:

fmt.Println(configuration.Bucket, configuration.Key) // returns address

但发生以下错误:required key CONFIGURATION_KEY missing value

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您查看s3.PutObjectInput类型,则key字段会显示required:"true"个标记。

required包也使用envconfig标记来指示环境变量是必需的。

您需要从环境中提供密钥,或者不直接使用envconfig包来使用aws结构。