我想创建一种方法(使用shell脚本和AWS的CLI),以便可以自动执行以下操作:
下面的“同步”命令可以工作吗?
aws s3 sync s3://directory1/bucket1 s3://directory2/bucket2 --exclude "US*.gz" --exclude "CA*.gz" --include "AU*.gz"
此处的目标是仅以自动方式传输文件名以“ AU”开头的文件,并排除其他所有文件。另外,是否可以排除非常旧的文件?
问题的第二部分是,随着每天“ AU”文件被丢弃到此文件夹中,我需要向我的shell脚本中添加什么以使该过程尽可能自动化?
答案 0 :(得分:0)
复制对象
AWS CLI当然可以在存储桶之间复制对象。实际上,它甚至不需要下载文件-即使文件位于不同的区域,S3也会在存储桶之间直接复制。
aws s3 sync
命令无疑是一种简便的方法,因为它会将所有文件从源复制到目标,而不必特别指出要复制的文件。
要仅复制AU*
个文件,请使用:--exclude "*" --include "AU*"
请参阅:Use of Exclude and Include Filters
您询问是否要排除旧文件-sync
命令将同步所有文件,因此以前复制的所有文件将不再次复制。默认情况下,除非明确要求,否则从源中删除的所有文件将不在目标中删除。
自动化
如何自动执行此操作?实现此目标的最有价值的方法是创建一个 AWS Lambda函数。 Lambda函数可以由 Amazon CloudWatch Events规则定期触发。
但是,默认情况下,Lambda中未安装AWS CLI,因此可能更具挑战性。参见:Running aws-cli Commands Inside An AWS Lambda Function - Alestic.com
最好让Lambda函数自己执行副本,而不是调用AWS CLI。
替代方案
只要将新对象添加到S3存储桶,就可以将Amazon S3配置为触发AWS Lambda函数。这样,一旦在S3中添加了对象,该对象就会被复制到另一个Amazon S3存储桶中。 Lambda函数中的逻辑可以确定是否复制文件,例如检查以AU
开头的文件。