AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

通过 S3 Batch Operations (批量操作) 功能轻松处理海量对象

  • 2019-11-21
  • 本文字数:3048 字

    阅读完需:约 10 分钟

通过 S3 Batch Operations (批量操作)功能轻松处理海量对象

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 控制台左边可以看到批量操作功能的入口并创建作业


另外我们也可以选择从清单创建作业:



在这个演示中,我们已经为存储桶 linjungz-batch-bjs 创建了一个名为 Inv1 的清单,并保存在了 linjungz-logs-bjs 存储桶中。因此我们选择“从清单创建作业”按钮开始进入作业创建向导:



从上图可以看到,我们需要先为作业选择相应的 AWS 区域:如果是复制对象操作,则作业需要与目标存储桶在同一个 AWS 区域 ;如果是其他操作,则作业需要与被操作的对象在同一个 AWS 区域。在这个例子中我们演示进行批量的标签替换操作,由于被操作的对象存放在北京区域的存储桶中,因此作业也需要在北京区域创建。


另外由于我们是从清单创建作业的,因此可以看到这里自动选择了“S3 清单报告”并自动填充了清单对象的路径。用户也可以通过创建一个 CSV 文件来指定需要操作的对象列表。如果清单对象有多个版本,在这里我们也可以指定版本 ID。


接着我们进入下一步,指定对象所需要执行的操作。在这里我们选择“替换所有标签“,并指定对象的新标签:



接着我们在下一步对作业的其他选项进行设置:



在上面截图可以看到,我们可以输入作业的描述和优先级,并指定是否生成完成报告及相应的位置。这里我把完成报告输出到了存储桶 linjungz-logs-bjs 并指定前缀 batch-reports


同时在这里我们需要指定 S3 批量操作所需要的 IAM 角色,通过这个 IAM 角色 S3 可以获得相应的权限来执行批量操作。根据操作所需要的权限不同,控制台提供了对应的 IAM 角色的策略模板,基于这个模板用户可以快速的创建出相应的 IAM 策略。如下是替换对象标签所对应的 IAM 策略模板及简单的描述:



接下来我们将创建一个名为 linjungz-Batch 的 IAM 角色,以便 S3 Batch 可以有相应的权限来批量对指定的对象进行标签替换,并且输出作业完成报告。


首先我们将参考上述模板在 IAM 中创建一个新的策略,并命名为 linjungz-Batch-PutObjectTagging:


Json


{    "Version": "2012-10-17",    "Statement": [        {            "Sid": "VisualEditor0",            "Effect": "Allow",            "Action": [                "s3:PutObjectVersionTagging",                "s3:PutObjectTagging"            ],            "Resource": "arn:aws-cn:s3:::linjungz-batch-bjs/*"        },        {            "Sid": "VisualEditor1",            "Effect": "Allow",            "Action": [                "s3:GetObject",                "s3:GetBucketLocation",                "s3:GetObjectVersion"            ],            "Resource": "arn:aws-cn:s3:::linjungz-logs-bjs/*"        },        {            "Sid": "VisualEditor2",            "Effect": "Allow",            "Action": [                "s3:PutObject",                "s3:GetBucketLocation"            ],            "Resource": "arn:aws-cn:s3:::linjungz-logs-bjs/*"        }    ]}
复制代码

(注意:在创建 S3 Batch 的策略时,如果该策略需要被重复使用,则可以适当放宽相应的读写权限。比如说在这个例子里,我的读取清单文件和写入完成报告的权限是指定到了整个存储桶。)

接着我们需要创建一个 IAM 角色。在这里我们需要指定这个角色的信任实体为 S3 Batch Operations



然后我们需要为这个角色附加刚才创建的策略:



最后我们在 S3 Batch 控制台上为这个作业选择刚才创建的 IAM 角色 linjungz-Batch



完成 IAM 角色创建后,我们可以进入到最后一步,即作业的审核:



确认没问题后,我们即可创建作业并提交。


在 S3 批量操作控制台上,我们即可看到刚提交的作业。稍等一会待作业准备完成后,作业状态会进入“等待确认”状态。此时我们可以看到 S3 Batch 已经通过我们指定的清单文件找到了本次作业所需要批量处理的对象数量,这里的例子是 158 个对象。



此时我们可以点击“确认并运行“按钮,并且确认后,S3 Batch 作业会在后台开始执行。



此时状态为“准备就绪“。在等待一段时间后作业完成,可以查看作业的状态:



可以随机挑选一个目标对象,检查标签是否已经替代成功:



同时 S3 会在刚才指定的存储桶 linjungz-logs-bjs 的指定路径下生成完成报告:



我们可以下载这个作业完成报告,或是直接在 S3 控制台上通过 S3 Select 查询完成报告所对应的 CSV 文件,看到本次 S3 Batch 作业的任务执行情况


小结

通过上面的演示我们可以看到,借助 S3 批量操作功能,我们可以方便地对海量对象进行批量操作,而无须自行编码去构建一个作业管理平台。S3 批量操作目前支持标签替换、ACL 替换、对象复制、Glacier/Deep Archive 数据还原以及触发 Lambda 函数。通过 Lambda 函数我们可以自行编码相应的处理逻辑,从而方便地扩展 S3 批量操作功能。


查阅我们的官方文档了解更多关于 S3 批量操作功能的信息吧


https://docs.amazonaws.cn/AmazonS3/latest/dev/batch-ops.html


作者介绍:


!



### [](https://amazonaws-china.com/cn/blogs/china/tag/%E6%9E%97%E4%BF%8A/)
AWS解决方案架构师,主要负责企业客
复制代码


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/easily-handle-massive-objects-with-s3-batch-operations-feature/


2019-11-21 08:001062

评论

发布
暂无评论
发现更多内容

架构实战训练营第五模块作业

子豪sirius

架构实战营

有同学问我:Fetch 和 Ajax 有什么区别?

编程三昧

JavaScript ajax 大前端 8月日更 Fetch

架构实战营 - 模块 5- 设计微博系统中”微博评论“的高性能高可用计算架构

蔸蔸

架构实战营模块五作业

袁小芬

常见酒店行业术语

IT蜗壳-Tango

8月日更

模块五作业:设计微博评论的高性能高可用计算架构

Felix

模块五作业

king

【设计模式】策略模式

Andy阿辉

C# 后端 设计模式 8月日更

干货来袭!阿里技术官甩出的内部首推分布式系统开发笔记太顶了

编程菌

Java 编程 程序员 面试 计算机

从零开始的SRC挖掘

网络安全学海

黑客 网络安全 信息安全 渗透测试 漏洞挖掘

Nacos-spring-boot 0.2.10 发布,全面支持 Nacos2.0

阿里巴巴中间件

云计算 开源 云原生 中间件

架构训练营 模块五

小卷儿

在线CSS代码压缩美化工具

入门小站

工具

微服务的演进之路

卢卡多多

微服务 8月日更

架构实战营作业 M05

Shawn Liu

模块五作业-微博评论-高性能高可用架构

babos

#架构实战营

MongoDB中间件工具mgm入门介绍(一)

liuzhen007

8月日更

真的香!Github一夜爆火被各大厂要求直接下架的面试题库也太全了

编程菌

Java 编程 程序员 面试 计算机

”微博评论“的高性能高可用计算架构

feitian

平台利用大数据割韭菜,消费者为何沦为砧板上的鱼肉

石头IT视角

模块五作业

绝影

架构训练营

【架构训练营】模块五作业

zclau

阿里架构师花近十年时间整理出来的Java核心知识pdf(Java岗)

编程菌

Java 编程 程序员 面试 计算机

阿里P8整理的《百亿级并发系统设计》实战教程,实在是太香了

编程菌

Java 编程 程序员 阿里 计算机

【ClickHouse】 核心特性

LeifChen

Clickhouse 8月日更

[架构实战营一期] 模块五作业

trymorewang

架构实战营

架构实战营 模块五 作业

脉醉

#架构实战营

【SpringCloud技术专题】「Feign技术专区」从源码层面让你认识Feign工作流程和运作机制

码界西柚

OpenFegin spring-cloud Fegin 8月日更

全靠阿里内部(珠峰版)Java面试笔记,成功拿下12家大厂offer

编程菌

Java 编程 程序员 阿里 计算机

PAI:一站式云原生AI平台

阿里云大数据AI技术

有了阿里人的并发图册+JDK源码速成笔记,我终于不慌内卷了

编程菌

Java 编程 程序员 面试 计算机

通过 S3 Batch Operations (批量操作)功能轻松处理海量对象_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章