使用AWS CLI在S3之间对拷数据的CLI版本和参数问题

一、问题

在两个S3上执行数据复制时候,遇到如下错误。

$ aws s3 cp s3://abc-bkt-zhy/data-origion/index_day.json s3://abc-mytarget/
copy failed: s3://abc-bkt-zhy/stock-data-origion/index_day.json to s3://abc-mytarget/index_day.json An error occurred (AccessDenied) when calling the GetObjectTagging operation: Access Denied

这是由于AWS CLI V1版本和V2版本的不同差异造成的。在命令行下自行如下命令显示CLI版本。

aws --version

如果返回1.x系列版本,信息如下。

aws-cli/1.16.300 Python/2.7.18 Linux/4.14.181-140.257.amzn2.x86_64 botocore/1.13.36

如果返回2.x系列版本,信息如下。

aws-cli/2.0.40 Python/3.7.4 Darwin/19.6.0 exe/x86_64

其中使用1.x的版本可以正常复制数据,2.x的版本无法复制,报告以上错误。

二、问题解决

发生这个问题的原因是因为CLI V1版本和V2版本不同的S3调用方式引起的。参考如下文档。

https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration.html

解决办法,在复制命令后增加如下参数:

--copy-props none

完整复制命令如下。

aws s3 cp s3://abc-bkt-zhy/data-origion/index_day.json s3://abc-mytarget/json/stock_day.json --copy-props none

即可复制成功。