我在 5 个文件中有大约 15 GB 的数据需要传输到 Amazon S3 存储桶,它们目前托管在我没有脚本或 shell 访问权限的远程服务器上 - 我只能通过 httpd 链接下载它们。
如何将这些文件传输到我的 Amazon S3 存储桶,而无需先将它们下载到我的本地计算机然后将它们重新上传到 S3?
如果您想自动化该过程,请使用 AWS 开发工具包。
就像在以下情况下使用 AWS PHP SDK:
use Aws\Common\Aws;
$aws = Aws::factory('/path/to/your/config.php');
$s3 = $aws->get('S3');
$s3->putObject(array(
'Bucket' => 'your-bucket-name',
'Key' => 'your-object-key',
'SourceFile' => '/path/to/your/file.ext'
));
更多细节:
http://blogs.aws.amazon.com/php/post/Tx9BDFNDYYU4VF/Transferring-Files-To-and-From-Amazon-S3 http://docs.aws.amazon.com/aws-sdk-php/guide /latest/service-s3.html
鉴于您只有 5 个文件,请在将文件下载到某个中间层后使用 S3 文件上传器http://console.aws.amazon.com/s3/home?region=us-east-1 (操作,上传)机器。运行 Windows 的 EC2 可能是最佳解决方案,因为上传到 S3 会非常快。您可以从 chrome.google.com 将 Chrome 下载到您的 EC2 实例,或使用现有的 Web 浏览器 (IE) 来完成这项工作。
[1] 带密钥的 SSH
sh-keygen -f ~/.ssh/id_rsa -q -P ""
cat ~/.ssh/id_rsa.pub
将此 SSH 密钥放入您的 ~/.ssh/authorized_keys 文件中
mkdir ~/.ssh
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 0644 ~/.ssh/authorized_keys
[2] 快照 ZFS,使用 LZMA 最小化传输,使用 RSYNC 发送
zfs snapshot zroot@150404-SNAPSHOT-ZROOT
zfs list -t snapshot
用 lzma 压缩成文件(比 bzip2 更有效)
zfs send zroot@150404-SNAPSHOT-ZROOT | lzma -9 > /tmp/snapshots/zroot@150404-SNAPSHOT-ZROOT.lzma
rsync -avz -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress --partial /tmp/snapshots/zroot@150404-SNAPSHOT-ZROOT.lzma <username>@<ip-address>:/
[3] Speedup transfer with MBUFFER, send with ZFS Send/Recieve 先启动接收器。这监听端口 9090,有 1GB 缓冲区,使用 128kb 块(与 zfs 相同):
mbuffer -s 128k -m 1G -I 9090 | zfs receive zremote
现在我们发送数据,也通过 mbuffer 发送:
zfs send -i zroot@150404-SNAPSHOT-ZROOT zremote@150404-SNAPSHOT-ZROOT | mbuffer -s 128k -m 1G -O <ip-address>:9090
[4] 只发送 diff 加速传输
zfs snapshot zroot@150404-SNAPSHOT-ZROOT
zfs snapshot zroot@150405-SNAPSHOT-ZROOT [e.g. one day later]
zfs send -i zroot@150404-SNAPSHOT-ZROOT zroot@150405-SNAPSHOT-ZROOT | zfs receive zremote/data
另见我的笔记