寻求AWS EC2与S3共享文件夹的自动同步非定时任务替代方案
自动同步S3存储桶变更到EC2目录的优化方案
针对你不想用定时任务(怕资源浪费)、要自动感知S3变更同步到EC2的需求,推荐以下几个方案:
方案1:S3事件通知 + Lambda + SSM Run Command
这是事件驱动的无常驻进程方案,只有S3有变更时才触发同步:
- 前提:EC2实例要预装SSM Agent(Amazon Linux系列默认自带),并且给EC2的IAM角色加上
AmazonSSMManagedInstanceCore权限,让SSM能管控实例。 - 操作步骤:
- 去S3桶的「事件通知」配置页,添加规则:选择对象创建、删除等你需要触发同步的事件类型,目标选Lambda函数。
- 写个简单的Lambda函数(Python/Node.js都行),调用SSM的
send_commandAPI,指定你的EC2实例ID,执行命令:aws s3 sync s3://my-bucket-with-images /var/www/images。 - 测试:往S3传个文件或者删个文件,看EC2的
/var/www/images目录是不是自动同步了。
- 优缺点:
- 优点:完全事件触发,没变更时不占EC2资源;不用在EC2上跑常驻脚本。
- 缺点:Lambda最长只能跑15分钟,如果桶里文件特别多,首次同步可能超时,得手动先跑一次全量同步;要确保EC2能访问SSM服务,VPC里的话可以配SSM VPC端点。
方案2:S3 File Gateway
把S3桶直接挂载成EC2的本地目录,实现实时双向同步:
- 操作步骤:
- 在AWS控制台创建S3 File Gateway,部署到你的VPC里(可以用一台小规格EC2当网关载体)。
- 配置网关关联你的
my-bucket-with-images桶,用已有的IAM角色做权限控制。 - 在EC2上用NFS或SMB协议挂载网关提供的共享目录到
/var/www/images。
- 优缺点:
- 优点:EC2上操作目录和本地文件完全一样,S3和EC2的变更实时双向同步;不用写任何脚本代码。
- 缺点:需要额外部署网关EC2,会占点资源;网关有额外计费(按存储量和请求次数算)。
方案3:inotify + SQS 轻量本地方案
适合不想依赖太多AWS服务的场景,用本地工具监听变更:
- 操作步骤:
- 在EC2上装
inotify-tools(Amazon Linux用yum install inotify-tools),写个脚本监听/var/www/images的本地修改,一旦有变动就执行aws s3 sync /var/www/images s3://my-bucket-with-images把本地变更推去S3。 - 配置S3事件通知到SQS队列,然后在EC2上跑个脚本监听SQS,收到S3变更的消息时,执行
aws s3 sync s3://my-bucket-with-images /var/www/images拉取S3的变更。 - 把这两个脚本做成systemd服务,让它们开机自启常驻运行。
- 在EC2上装
- 优缺点:
- 优点:不用额外AWS服务,成本低;双向同步都能覆盖。
- 缺点:EC2上要跑两个常驻进程,会占少量CPU内存;SQS监听脚本要处理消息重复、幂等性问题,避免重复同步。
内容的提问来源于stack exchange,提问作者user1911
相关产品推荐
相关产品推荐

