如何使用Ansible同步两个AWS S3存储桶?替代AWS CLI sync命令
使用Ansible实现S3存储桶同步(替代AWS CLI
s3 sync) 嘿,刚接触Ansible的话不用发愁,完全有和AWS CLI s3 sync功能一致的方法,不用你手动逐个复制对象!Ansible专门提供了s3_sync模块,就是为了实现S3桶之间、本地与S3之间的增量同步,和你之前用的CLI命令逻辑几乎一模一样。
基础Playbook示例
首先给你一个最基础的同步配置,完美对应你之前的CLI命令aws s3 sync s3://bucket-a/folder s3://bucket-b/folder:
- name: 同步Bucket A的指定目录到Bucket B hosts: localhost # S3操作无需远程主机,本地执行即可 tasks: - name: 执行S3增量同步 amazon.aws.s3_sync: src: s3://bucket-a/folder dest: s3://bucket-b/folder region: us-east-1 # 替换成你的存储桶所在AWS区域 delete: false # 若要删除Bucket B中不存在于Bucket A的对象,改为true(对应CLI的--delete参数)
关键参数解释
src&dest:和CLI命令的路径对应,支持S3到S3、本地到S3、S3到本地三种同步方向region:必须指定存储桶所在的AWS区域,否则可能出现权限或连接错误delete:可选参数,默认false。如果设为true,会自动删除目标桶(Bucket B)中源桶(Bucket A)没有的对象,和CLI的aws s3 sync --delete效果完全一致include/exclude:用来过滤需要同步的对象,比如只同步.txt文件可以加include: "*.txt",排除临时文件可以加exclude: "*.tmp",和CLI的--include/--exclude参数对应
前置准备
在运行这个Playbook之前,需要做好两件事:
- 安装
amazon.aws集合:s3_sync模块属于这个官方集合,执行命令安装:ansible-galaxy collection install amazon.aws - 配置AWS凭证:确保Ansible控制节点能访问AWS,可以通过以下方式之一:
- 在
~/.aws/credentials文件中配置访问密钥 - 设置环境变量
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY - 如果是在EC2实例上运行,给实例绑定具有S3读写权限的IAM角色
- 在
进阶示例(带过滤和删除)
如果需要更精细的同步控制,比如只同步图片文件,同时清理目标桶的冗余对象,可以用这个配置:
- name: 带过滤规则的S3同步 hosts: localhost tasks: - name: 同步Bucket A的.jpg文件,并删除Bucket B的多余对象 amazon.aws.s3_sync: src: s3://bucket-a/folder dest: s3://bucket-b/folder region: us-west-2 delete: true include: "*.jpg" exclude: "*.tmp"
这个模块会自动对比源和目标的对象(通过ETag和修改时间),只同步有变化的内容,完全不用你手动逐个处理对象,和你之前用CLI的体验一致,非常适合刚入门Ansible的场景。
内容的提问来源于stack exchange,提问作者Vinay Wadagavi
相关产品推荐
相关产品推荐

