amazon-web-services - 即使存在也缺少 key

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

我正在使用以下代码创建预签名 url:

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

key 始终相同,但存储桶会根据我所在的环境而改变。

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

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

但出现以下错误:required key CONFIGURATION_KEY missing value

谢谢!

最佳答案

如果您查看类型 s3.PutObjectInput , key 字段有一个 required:"true" 标签。

required 标签也被 envconfig 包使用,以指示环境变量是必需的。

您要么需要从环境中提供 key ,要么不直接将 aws 结构与 envconfig 包一起使用。

关于amazon-web-services - 即使存在也缺少 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48894435/

相关文章:

ruby-on-rails-3 - s3 上的 mp3 片段

amazon-web-services - 使用亚马逊通知服务发送带有自定义发件人 ID 的短信

apache-spark - 如何将行添加到 Spark 中的现有分区?

string - 在 Go 语言的 For 循环中将值转换为字符串

amazon-s3 - 将AWS s3存储桶移动到另一个aws账户

shell - AWS CLI S3 Sync 排除在脚本中不起作用,直接在终端中起作用

postgresql - 如何在 AWS RDS 的 Postgres 中创建只读用户?

node.js - 在 AWS Elastic Beanstalk 上全局安装 npm 包

go - 如何检查函数参数和类型

go - 覆盖 http.Server.Serve