我想上传一个tarball到s3而不会产生临时文件的费用(我们在磁盘上很低)。其他实用程序,我会管tar命令上传命令的输出,但它不只是awscli工作:awscli s3:通过stdin上传
$ echo ok | aws s3 cp /dev/stdin s3://my-bucket/test
upload failed: /dev/stdin to s3://my-bucket/test [Errno 29] Illegal seek
有没有办法做我想要什么?
我想上传一个tarball到s3而不会产生临时文件的费用(我们在磁盘上很低)。其他实用程序,我会管tar命令上传命令的输出,但它不只是awscli工作:awscli s3:通过stdin上传
$ echo ok | aws s3 cp /dev/stdin s3://my-bucket/test
upload failed: /dev/stdin to s3://my-bucket/test [Errno 29] Illegal seek
有没有办法做我想要什么?
这个简单的脚本似乎做的工作,但我会太而不是创造我自己的工具。
#!/bin/bash
configfile="aws.ini"
file="/test"
bucket="my-bucket"
resource="/${bucket}${file}"
contentType="application/x-compressed-tar"
# Grab the config values
eval $(cat aws.ini | grep -P "^\w+=[-'/\w]+$")
# Calculate the signature.
dateValue=$(date -R)
stringToSign="PUT\n\n${contentType}\n${dateValue}\n${resource}"
signature=$(
echo -en "${stringToSign}" |
openssl sha1 -hmac "${aws_secret_access_key}" -binary |
base64
)
# PUT!
curl \
-X PUT \
--data @- \
-H "Host: ${bucket}.s3.amazonaws.com" \
-H "Date: ${dateValue}" \
-H "Content-Type: ${contentType}" \
-H "Authorization: AWS ${aws_access_key_id}:${signature}" \
"https://${bucket}.s3.amazonaws.com${file}"
不过,这是一些非常不错的hackery。 +1完成工作。它只能处理非多部分上传的5GB限制。 –
这应该做的伎俩:
tar cv aws-test|aws s3 cp - s3://bucket/aws-test.tar.gz
编辑:请确保您使用的AWS CLI更新verison。我已经验证它可以与1.7.3兼容,但它不适用于1.2.9
这是记录在http://docs.aws.amazon.com/cli/latest/reference/s3/cp.html末尾 –
我推出了自己的工具,该工具读取'STDIN'并执行分段上传,因为找不到我喜欢的解决方案。你有没有用fifo试过aws工具? –