bash - 如何利用 shell 脚本和 AWS CLI 每天自动将文件从一个 S3 存储桶复制到另一个存储桶?
问题描述
我想创建一种方法(使用 shell 脚本和 AWS 的 CLI),以便可以自动化以下操作:
- 从 s3 存储桶复制特定文件
- 将它们粘贴到 S3 中的不同存储桶中。
下面的“同步”命令会起作用吗?
aws s3 sync s3://directory1/bucket1 s3://directory2/bucket2 --exclude "US*.gz" --exclude "CA*.gz" --include "AU*.gz"
这里的目标是仅传输文件名以“AU”开头的文件并排除其他所有文件,尽可能以自动化方式进行。另外,是否可以排除非常旧的文件?
问题的第二部分是我需要在我的 shell 脚本中添加什么以便尽可能地自动化这个过程,因为“AU”文件每天都会被丢弃在这个文件夹中?
解决方案
复制对象
AWS CLI 当然可以在存储桶之间复制对象。事实上,它甚至不需要下载文件——S3 将直接在存储桶之间复制,即使它们位于不同的区域。
该aws s3 sync
命令当然是一种简单的方法,因为它会将任何文件从源复制到目标,而无需具体说明要复制哪些文件。
要仅复制AU*
文件,请使用:--exclude "*" --include "AU*"
请参阅:使用排除和包含过滤器
您询问了排除旧文件的问题 - 该sync
命令将同步所有文件,因此以前复制的任何文件都不会再次复制。默认情况下,除非特别请求,否则从源中删除的任何文件都不会在目标中删除。
自动化
如何自动化?最适合云计算的方法是创建一个AWS Lambda 函数。Lambda 函数可以由Amazon CloudWatch Events 规则定期自动触发。
但是,AWS CLI 并未默认安装在 Lambda 中,因此可能更具挑战性。请参阅:在 AWS Lambda 函数中运行 aws-cli 命令 - Alestic.com
最好让 Lambda 函数自己进行复制,而不是调用 AWS CLI。
另类的想法
Amazon S3 可以配置为在将新对象添加到 S3 存储桶时触发 AWS Lambda 函数。这样,只要将对象添加到 S3 中,它就会被复制到另一个 Amazon S3 存储桶中。Lambda 函数中的逻辑可以决定是否复制文件,例如检查是否以AU
.
推荐阅读
- r - 如何删除变量中不需要的字符?
- ruby-on-rails - form_with 模型更改编辑表单的 url 参数
- elasticsearch - es 写入索引状态失败,由外力改变底层文件引起
- html - 如何修复导航栏中的img不缩放
- android - MVVM 与动画视图共享状态
- python - 如何从 Python GUI 中的用户输入中获取 base 10 错误?
- android - 如何显示来自片段的数据的微调器?
- list - 如何将 JavaFX 表单中的多条信息保存到文件中
- javascript - 在具有相同ID的数组中添加/求和多个值
- r - 包 nleqslv 错误:fn 结果的长度 <> x 的长度