首页 > 解决方案 > 将对象从一个 s3 文件夹移动到同一存储桶中的另一个文件夹的最快且最具成本效益的方法是什么

问题描述

我有一个示例存储桶,其中包含子文件夹和文件的演示文件夹。桶结构:

example/demo/*.jpeg #.jpeg files 
example/demo/sub-folder1
example/demo/sub-folder2

我的目标是将.jpeg文件demo/夹中的所有文件(不包括&中的.jpeg文件)移动到新文件夹中。sub-folder1sub-folder2/example/archive-jpeg/

寻求帮助以使用 aws-cli 获得最快且具有成本效益的方式:使用 awscli v2

  1. .jpeg列出即时/demo文件夹中的所有对象和
  2. 将它们移动到/archive-jpeg文件夹
  3. 归档后.jpeg从文件夹中删除/demo

谢谢你!

标签: amazon-web-servicesamazon-s3devopsaws-cli

解决方案


这应该这样做:

aws s3 mv s3://bucket/demo/  s3://bucket/target-folder/ --recursive --exclude "*" --include "*.jpeg" --exclude "*/*"

逻辑是:

  • aws s3 mv --recursive告诉它移动所有对象
  • --exclude "*"告诉它排除所有对象被移动
  • --include "*.jpeg"告诉它包含以.jpeg
  • --exclude "*/*"告诉它排除子目录中的任何内容(例如sub-folder1/sub-folder2/

请参阅:AWS CLI:使用排除和包含过滤器

至于最快成本效益,由于您已指定要通过 AWS CLI 执行此操作,因此没有其他选择。

如果您愿意在没有AWS CLI 的情况下执行此操作,那么移动对象的更快方法是编写一些并行运行的代码,以将单独的 Copy 和 Delete API 调用发送到 Amazon S3。(S3 中没有“移动”命令——AWS CLI 实际上是在复制对象,然后删除原始对象。)

或者,您可以配置一个 Amazon S3 事件来触发 AWS Lambda 函数,该函数会在文件创建后立即移动它们,而不是批量移动对象,这将导致它们移动“更快”而不是批量运行。

至于成本效益,需要复制和删除对象,这将导致对 Amazon S3 的 API 调用成本为$0.005 per 1000 requests. 我认为您无法避免这些 API 调用,因此无法降低成本。


推荐阅读