【问题标题】:How to utilize shell script and AWS CLI to automatically copy a file daily from one S3 bucket to another?如何利用 shell 脚本和 AWS CLI 每天自动将文件从一个 S3 存储桶复制到另一个存储桶?
【发布时间】:2019-06-01 18:28:06
【问题描述】:

我想创建一种方法(使用 shell 脚本和 AWS 的 CLI),以便可以自动执行以下操作:

  1. 从 s3 存储桶复制特定文件
  2. 将它们粘贴到 S3 中的不同存储桶中。

下面的“同步”命令会起作用吗?

aws s3 sync s3://directory1/bucket1 s3://directory2/bucket2 --exclude "US*.gz" --exclude "CA*.gz" --include "AU*.gz"

这里的目标是仅传输文件名以“AU”开头的文件并排除其他所有文件,尽可能以自动化方式进行。另外,是否可以排除非常旧的文件?

问题的第二部分是我需要在我的 shell 脚本中添加什么,以便尽可能地自动化这个过程,因为“AU”文件每天都会被丢弃在这个文件夹中?

【问题讨论】:

    标签: bash amazon-web-services shell amazon-s3 aws-cli


    【解决方案1】:

    复制对象

    AWS CLI 当然可以在存储桶之间复制对象。事实上,它甚至不需要下载文件——S3 将直接在存储桶之间复制,即使它们位于不同的区域。

    aws s3 sync 命令当然是一种简单的方法,因为它可以将任何文件从源复制到目标,而无需明确说明要复制哪些文件。

    要仅复制 AU* 文件,请使用:--exclude "*" --include "AU*"

    见:Use of Exclude and Include Filters

    您询问了排除旧文件的问题 - sync 命令将同步所有文件,因此之前复制的任何文件都将不会再次复制。默认情况下,从源中删除的所有文件不会在目标中被删除,除非有明确要求。

    自动化

    如何自动化?最适合云计算的方法是创建一个 AWS Lambda 函数。 Lambda 函数可以由 Amazon CloudWatch Events 规则定期自动触发。

    但是,AWS CLI 并未默认安装在 Lambda 中,因此可能更具挑战性。见:Running aws-cli Commands Inside An AWS Lambda Function - Alestic.com

    最好让 Lambda 函数自己进行复制,而不是调用 AWS CLI。

    另类想法

    Amazon S3 可以配置为在将新对象添加到 S3 存储桶时触发 AWS Lambda 函数。这样,只要将对象添加到 S3 中,它就会被复制到另一个 Amazon S3 存储桶中。 Lambda函数中的逻辑可以判断是否复制文件,比如检查以AU开头的文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-22
      • 2023-02-01
      • 2020-12-12
      • 1970-01-01
      • 1970-01-01
      • 2020-05-29
      • 2018-11-16
      • 1970-01-01
      相关资源
      最近更新 更多