无法使用awscli 1.5.4复制大型(5 Gb)文件

时间:2014-11-04 22:24:56

标签: python amazon-web-services amazon-ec2 amazon-s3 aws-cli

我遇到了aws-cli的问题,我做了yum更新,更新了awscli(以及其他内容),现在awscli在使用SignatureDoesNotMatch的大文件(例如5.1 Gb)上失败了。 具有较小文件的完全相同的命令(到同一个桶)有效。 如果我使用python中的boto,那么大文件仍然可以工作。

它复制了所有部分,但它看起来像是两个(即它被计算到745个部分中的743个),然后出现错误信息。

看起来像awscli中的错误? 我在谷歌周围时找不到任何关于它的信息。

这都是在ec2实例上执行的。

$ /usr/bin/aws --version
aws-cli/1.5.4 Python/2.6.9 Linux/3.14.20-20.44.amzn1.x86_64

$ ls -hl
-rw-rw-r-- 1 user user      4 Nov  4 21:14 small
-rw-rw-r-- 1 user user 5.1G Nov  4 20:02 big

$ /usr/bin/aws s3 cp small s3://mybucket/uploaded.ext
upload: ./small to s3://mybucket/uploaded.ext

$ /usr/bin/aws s3 cp big s3://mybucket/uploaded.ext
upload failed: ./big to s3://mybucket/uploaded.ext
A client error (SignatureDoesNotMatch) occurred when calling the UploadPart operation: The request signature we calculated does not match the signature you provided. Check your key and signing method.

编辑:以为我找到了它,但仍然有这个问题。我更喜欢坚持使用awscli,因为它是我们在整个代码中使用的东西,它比boto快得多(至少在它工作时)

Edit2:它实际上变得越来越糟,我可以在控制台中重复相同的复制命令,有时它会通过,有时它不会

2 个答案:

答案 0 :(得分:1)

aws-cli当然可以处理5GB及更高版本的上传。

我启动了一个EC2实例,并且能够成功完成它:

$ /usr/bin/aws --version
aws-cli/1.3.6 Python/2.6.9 Linux/3.10.35-43.137.amzn1.x86_64

$ dd if=/dev/zero of=small bs=1K count=1
1+0 records in
1+0 records out
1024 bytes (1.0 kB) copied, 0.000388469 s, 2.6 MB/s

$ dd if=/dev/zero of=big bs=5M count=1000
1000+0 records in
1000+0 records out
5242880000 bytes (5.2 GB) copied, 73.733 s, 71.1 MB/s

$ aws s3 mb s3://target77
make_bucket: s3://target77/

$ aws s3 cp small s3://target77/small
upload: ./small to s3://target77/small

$ aws s3 cp big s3://target77/big
upload: ./big to s3://target77/big       

$ aws s3 ls s3://target77/
2014-11-17 09:44:42 5242880000 big
2014-11-17 09:44:29       1024 small

到目前为止,非常好!

然后我更新到更新版本的CLI并再次尝试:

$ sudo yum update
...

$ /usr/bin/aws --version
aws-cli/1.5.5 Python/2.6.9 Linux/3.10.35-43.137.amzn1.x86_64

$ aws s3 cp small s3://target77/small
upload: ./small to s3://target77/small

$ aws s3 cp big s3://target77/big
upload failed: ./big to s3://target77/bigs) remaining
A client error (SignatureDoesNotMatch) occurred when calling the UploadPart operation: The request signature we calculated does not match the signature you provided. Check your key and signing method.

我在同一地区和不同地区重复了EC2实例和S3存储桶的实验。这两种情况最终都给出了错误,但有时也有效。

因此,更新的aws-cli似乎确实存在问题。另外,错误发生在随机数量的'部分之后。当我尝试重新执行复制命令时。

SignatureDoesNotMatch错误与安全凭据有关,而不是与Amazon S3服务有关。这听起来类似于人们在GitHub上报告的问题:重复SignatureDoesNotMatch client error #995

因此,我建议使用早期版本的aws-cli,直到问题得到解决。

答案 1 :(得分:0)

如果它是aws-cli中的一个错误,我不会感到惊讶。我建议使用s3cmd代替将文件复制到S3或从S3复制所有其他基于S3的交互。