无法制作 S3 对象,使用 Lambda 从另一个账户上的 S3 存储桶复制

我使用以下“go”代码 (Lambda) 将文件“Sample.txt”从一个账户的 S3 存储桶复制到另一个账户的 S3 存储桶。它按预期工作,即它从源存储桶复制“Sample.txt”并在目标存储桶中上传“NewSample.txt”。但是,我无法将目标存储桶中的 'NewSample.txt' 文件设为public。因此,我无法打开/下载该文件。这是因为目标存储桶中“NewSample.txt”文件的所有者仍与源存储桶中“Sample.txt”文件的所有者相同。如果我手动在目标存储桶中上传另一个文件,我可以看到新文件有不同的所有者。


package main


import (

    "fmt"


    "github.com/aws/aws-sdk-go/aws"

    "github.com/aws/aws-sdk-go/aws/awserr"

    "github.com/aws/aws-sdk-go/aws/session"

    "github.com/aws/aws-sdk-go/service/s3"

)


// main comment

func main() {

    svc := s3.New(session.New())

    input := &s3.CopyObjectInput{

        Bucket:     aws.String("target-bucket"),

        CopySource: aws.String("/source-bucket/Sample.txt"),

        Key:        aws.String("NewSample.txt"),

    }

    result, err := svc.CopyObject(input)

    if err != nil {

        if aerr, ok := err.(awserr.Error); ok {

            switch aerr.Code() {

            case s3.ErrCodeObjectNotInActiveTierError:

                fmt.Println(s3.ErrCodeObjectNotInActiveTierError, aerr.Error())

            default:

                fmt.Println(aerr.Error())

            }

        } else {

            fmt.Println(err.Error())

        }

        return

    }


    fmt.Println(result)

}


眼眸繁星
浏览 142回答 1
1回答

忽然笑

我通过添加 ACL 解决了这个问题,如下所示:input := &s3.CopyObjectInput{        Bucket:     aws.String("target-bucket"),        CopySource: aws.String("/source-bucket/Sample.txt"),        Key:        aws.String("NewSample.txt"),        ACL:        aws.String("bucket-owner-full-control"),    }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go