S3是AWS非常核心的一个存储服务。由于S3具有极强的扩展性、数据持久性、极低成本和高安全性,很多AWS用户会在一个S3存储桶上存储超过百万甚至过亿个的对象。这些对象通常是图像、视频、日志文件、备份或其他关键的业务数据。S3是很多AWS用户数据存储架构的重要组成部分,也是用来构建数据湖解决方案的基础。
那如何在S3通过简单快捷的方式来处理数百万甚至数十亿对象呢?可以考虑使用S3 Batch Operations(批量操作)功能!通过S3批量操作功能,在S3控制台上通过几次鼠标点击就可以实现批量将对象复制到另一个存储桶、设置对象标签或ACL、触发Glacier/Deep Archive对象还原或者是对每个对象触发指定的Lambda函数进行处理。
S3批量操作功能通过S3现有的清单报告(Inventory Report)或手动编写CSV文件来指定需要操作的对象集合。用户不需要编写任何代码,也不需要启动虚拟机集群,更不需要了解如何将批量操作任务进行分解并分发到虚拟机上进行执行。借助S3批量操作功能,用户只需要在控制台上通过几次鼠标点击即可在数分钟内创建一个作业(Job)并提交,通过S3大规模并行处理机制进行海量对象的批量操作。通过S3控制台、命令行或API,用户可以创建、监控和管理批量操作作业。
基本概念
在开始使用S3批量操作功能并创建作业前,我们需要先了解一些基本的概念:
存储桶(Bucket):一个S3存储桶可以存放无限数量的对象,并提供对象级别的多版本管理功能
清单报告(Inventory Report): 清单报告是S3后台每天或每周定期对存储桶进行检查并生成对象清单列表。清单报告可以包含存储桶中所有对象,或只包含某些前缀(prefix)的对象。
清单(Manifest): 指定需要进行处理的对象集合,可以是清单报告,也可以是CSV文件
操作(Operation):期望对目标对象执行的动作。对某个对象执行动作称之为一个任务(Task)。
IAM 角色(IAM Role): 通过IAM角色赋予S3相应的权限,以便读取清单报告、对目标对象执行特定的动作以及写入完成报告。如果执行动作是调用Lambda函数,则需要确保Lambda函数的执行角色(Execution Role)具有相应的权限
作业(Job):每个作业会包含上述提到的要素,同时每个作业均有状态和优先级。
演示
接下来我们演示如何通过S3控制台创建并运行一个批量替换对象标签的作业。
在S3控制台左边可以看到批量操作功能的入口并创建作业
另外我们也可以选择从清单创建作业: