在Go 1.12应用程序中,在处理AWS S3时,对于每次创建新 session 对象的插入或删除操作都是一个坏主意,有人可以帮助共享我们如何在整个应用程序中仅创建单个 session 吗?尝试以下示例代码在应用启动时生成bigS3对象:

var bigS3 *s3.S3

func main() {
    sess, awsSessionErr := session.NewSession(&aws.Config{
        Region:      aws.String(awsRegion),
        Credentials: credentials.NewStaticCredentials(awsAccessKeyID, awsSecretAccessKey, awsSessionToken),
    })
    isError(awsSessionErr, "Error creating aws session: ")
    bigS3 := s3.New(sess)
    _, awsListBucketErr := bigS3.ListBuckets(nil) //Used to just built the session
    isError(awsListBucketErr, "Unable to list AWS bucket(s): ")
}

然后尝试在其他函数中像下面一样使用它,但是由于在下面的方法中bigS3为nil,因此失败。
func listObjectsInsideBucket(bucketName string) {
    resp, awsListObjectsErr := bigS3.ListObjects(&s3.ListObjectsInput{Bucket: aws.String(bucketName)})
    isError(awsListObjectsErr, "Unable to list items in bucket.")
}

最佳答案

bigS3 := s3.New(sess)将值分配给函数本地的新变量,而不是所需的变量。更改为:

bigS3 = s3.New(sess)

该值将不再为零。

关于go - 如何在应用程序中保留单个AWS S3 session ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56623036/

10-12 20:36