我想上傳一個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工具? –