如何将文件从远程服务器传输到我的 Amazon S3 实例?

Posted

技术标签:

【中文标题】如何将文件从远程服务器传输到我的 Amazon S3 实例?【英文标题】:How to transfer files from a remote server to my Amazon S3 instance? 【发布时间】:2012-11-08 22:43:36 【问题描述】:

我在 5 个文件中有大约 15 GB 的数据需要传输到 Amazon S3 存储桶,它们目前托管在我没有脚本或 shell 访问权限的远程服务器上 - 我只能通过 httpd 下载它们关联。

如何将这些文件传输到我的 Amazon S3 存储桶,而不必先将它们下载到我的本地计算机然后重新上传到 S3?

【问题讨论】:

创建一个 EC2 实例,从那里下载它们然后到 S3 中? ok .. 我可以在 EC2 上获得一个 shell,然后得到它们?我如何将它们转移到 S3 [或者在我设置 EC2 后这很明显吗? 在 EC2 实例上拥有文件后,您可以使用各种命令行工具将某些内容推送到 S3。这可能是最简单的方法。 好的 - 启动 EC2 实例 - 这些命令行工具是什么? 有很多可用的。 s3tools.org/s3cmd 呢? 【参考方案1】:

如果您想自动化该过程,请使用 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

【讨论】:

【参考方案2】:

鉴于您只有 5 个文件,请在将文件下载到某个中间机器后使用 S3 文件上传器http://console.aws.amazon.com/s3/home?region=us-east-1(操作,上传)。运行 Windows 的 EC2 可能是最佳解决方案,因为上传到 S3 会非常快。您可以从 chrome.google.com 将 Chrome 下载到您的 EC2 实例上,或者使用现有的 Web 浏览器 (IE) 来完成这项工作。

【讨论】:

【参考方案3】:

[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] 使用 MBUFFER 加速传输,使用 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] 仅发送差异来加速传输

    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

另见my notes

【讨论】:

以上是关于如何将文件从远程服务器传输到我的 Amazon S3 实例?的主要内容,如果未能解决你的问题,请参考以下文章

如何降低数据传输成本? Amazon S3 --> Cloudflare --> 访客

Amazon DynamoDB 是不是支持查询结果的流式传输

如何将文件从远程服务器复制到本地计算机? [关闭]

将 mongodb 数据库从本地主机迁移到远程服务器

Amazon AWS Filezilla 传输权限被拒绝

如何在不使用 SDK 的情况下将文件从 Android 上传到 Amazon S3