将 AWS S3 存储桶同步到 EC2 服务器

Posted

技术标签:

【中文标题】将 AWS S3 存储桶同步到 EC2 服务器【英文标题】:syncing AWS S3 bucket to EC2 Servers 【发布时间】:2014-09-12 15:53:09 【问题描述】:

我正在尝试使用 rsync 将我的 S3 存储桶与我的 EC2 服务器同步。但是我在想出代码时遇到了麻烦。在我的 EC2 服务器上,我尝试了以下操作,但它不起作用。我知道我的 S3 地址是错误的,但我不知道该放什么。 iosSourceCode 是存储桶名称。如何将此存储桶中的文件同步到我的 EC2 服务器的文件?在我开始工作后,我打算设置一个 cronjob 每隔 10 分钟或其他什么时间执行一次。有没有更好的方法来做到这一点,如果有,怎么做?请提供代码,谢谢!

sudo rsync -ra iosSourceCode.s3-website-us-east-1.amazonaws.com /var/www/

【问题讨论】:

除非 rsync 发生了巨大的变化,否则它根本不会那样工作。 请解释一下我需要解决这个问题 【参考方案1】:

你可以使用这个命令:

aws s3 --region <your region name> sync s3://<your bucket name> /your/directory/path

所以在你的情况下:

aws s3 --region us-east-1 sync s3://osSourceCode.s3-website /var/www/

这是一种单向同步(在本例中仅从 S3 下载更新),因此如果您想双向同步,则需要两个命令,源和目标互换:

aws s3 --region us-east-1 sync s3://osSourceCode.s3-website /var/www/
aws s3 --region us-east-1 sync /var/www s3://osSourceCode.s3-website

您可以将其添加到 crontab 条目中以使其定期发生,如下例所示:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin
MAILTO=root
HOME=/

*/2 * * * * root aws s3 sync --region ap-southeast-2 /var/www/html s3://mywebsitecode/ >> /usr/local/logs/aws.log 2>&1
*/5 * * * * root aws s3 sync --region ap-southeast-2 s3://mywebsitecode/ /var/www/html >> /usr/local/logs/aws.log 2>&1

【讨论】:

这应该是公认的答案,因为它是标准 AWS CLI 工具的一部分,而且从所有方面来看都更快。见docs 和related answer。【参考方案2】:

请使用 s3cmd

http://s3tools.org/s3cmd

使用 s3cmd 同步

语法如下

s3cmd 同步 s3://mybucket/myfolder/files/ /var/mybucket/myfolder/files/

您可以将上述语法放在 shell 脚本中,并将脚本添加到 cron 以按特定时间间隔运行。

【讨论】:

【参考方案3】:

您可能想查看s3 sync 命令,它是Amazon CLI(命令行界面)的一部分。

【讨论】:

以上是关于将 AWS S3 存储桶同步到 EC2 服务器的主要内容,如果未能解决你的问题,请参考以下文章

无法将 s3 与来自 aws lambda 的 ec2 文件夹同步

AWS系列-S3实现文件服务页面展示

AWS:将S3 Bucket安装到EC2实例。 (后来的FTP隧道)

如何在AWS中将Windows EC2实例复制到S3存储桶?

将 aws 快照复制到 S3 存储桶

存储桶之间的 AWS S3 同步覆盖较新的目标文件