#阿里云 #飞天发布时刻 正在直播!中企出海的「技术引擎」来了! 了解详情
写点什么

通过 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:001034

评论

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

双十一轻松实现云上高效沟通!华为云Flexus云会议实测体验领先

轶天下事

一文读懂Pencils Protocol的Auction产品,以及其背后的价值支撑

股市老人

鸿蒙NEXT开发案例:光强仪

zhongcx

NocoBase 本周更新汇总:提升工作流易用性

NocoBase

开源 低代码 零代码 无代码 版本更新

一图看懂云消息队列 RabbitMQ 版对比开源优势

阿里巴巴云原生

阿里云 云原生

多源异构数据源融合怎么做?Join操作篇(2)

RestCloud

数据分析 join ETL 多源异构数据融合

极速启动,函数计算弹性降本能力再升级

阿里巴巴云原生

阿里云 云原生 函数计算

双十一企业协作效率再升级!华为云Flexus版云会议299元_年起

轶天下事

双十一低成本上车!详谈华为云Flexus云会议为我们中小企业带来了什么

轶天下事

《Django 5 By Example》阅读笔记:p54-p75

codists

Python django

全球司库|规划与创新创景:引领业务、高效运营、战略增值

用友智能财务

金融 科技 企业数智化 司库

权限系统:6个权限概念模型设计

不在线第一只蜗牛

数据库 大数据 运维

澳鹏白皮书:2024年AI全景报告

澳鹏Appen

人工智能 行业报告

30 秒!用通义灵码画 SpaceX 星链发射流程图

阿里云云效

阿里云 云原生

双十一入手华为云Flexus云会议后,我总结了中小企业无法拒绝的3大优势

轶天下事

一文读懂Pencils Protocol的Auction产品,以及其背后的价值支撑

加密眼界

如何快速制作精美ppt图表?详细的保姆级教程来了!

职场工具箱

效率工具 职场 PPT 可视化分析 AI生成PPT

原生鸿蒙政务行业应用开发模板上线,近200个政务服务应用已上架

最新动态

七招提升工作效率

俞凡

生产力

30 秒!用通义灵码画 SpaceX 星链发射流程图

阿里巴巴云原生

阿里云 云原生

为中小企业量身定制的云会议!华为云Flexus版云会议亮相828

轶天下事

革新农业未来!Dimitra生态币价双双腾飞在即

股市老人

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