写点什么

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

评论

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

一加10 Pro和iPhone 13怎么选?

Geek_8a195c

【Docker 那些事儿】容器为什么傲娇?全靠镜像撑腰

Albert Edison

7月月更

回顾V神 Rollups 神作,详解以太坊为何需要二层扩展方案

TinTinLand

区块链 科技

31年前的Beyond演唱会,是如何超清修复的?

字节跳动视频云技术团队

太方便了,钉钉上就可完成代码发布审批啦!

阿里云云效

云计算 阿里云 钉钉 jenkins 代码

PingCode 性能测试之负载测试实践

PingCode研发中心

软件测试 PingCode

实战:fabric 用户证书吊销操作流程

BSN研习社

fabric

室外LED屏幕防水吗?

Dylan

LED显示屏 室外显示屏

实时云交互如何助力教育行业发展

3DCAT实时渲染

实时云渲染 云交互

Helix Swarm中文包发布,Perforce进一步提升中国用户体验

龙智—DevSecOps解决方案

perforce Helix Core Helix Swarm

如何实现一个延时队列 ?

领创集团Advance Intelligence Group

延时队列 Redis 数据结构 redis 底层原理

DataKit——真正的统一可观测性 Agent

观测云

基于STM32+华为云IOT设计的酒驾监控系统

DS小龙哥

7月月更

Python|字符串操作

AXYZdong

7月月更

深入JS中几种数据类型的解构赋值细节

猪痞恶霸

前端 js ES6 7月月更

多年锤炼,迈向Kata 3.0 !走进开箱即用的安全容器体验之旅| 龙蜥技术

OpenAnolis小助手

开源 容器 云原生 龙蜥技术 Kata Containers

浅识k8s中的准入控制器

火线安全

云安全 云安全技术 云安全攻防 云安全研究

2022年中国移动阅读市场年度综合分析

易观分析

移动阅读

都在说DevOps,你真正了解它吗?

龙智—DevSecOps解决方案

DevOps 运维 开发

【一库】vueuse:我不许身为vuer,你的工具集只有lodash!

摸鱼的春哥

Vue 前端 Vue3 7月月更

科普达人丨一文看懂阿里云的秘密武器“神龙架构”

阿里云弹性计算

云计算 虚拟化 资源管理 神龙架构

容器环境minor gc异常频繁分析

wgy

Java minor gc

易周金融 | Q1保险行业活跃人数8688.67万人 19家支付机构牌照被注销

易观分析

金融 银行

一个数据人对领域模型理解与深入

松子(李博源)

大数据 领域模型 模型设计

产品好不好,谁说了算?Sonar提出分析的性能指标,帮助您轻松判断产品性能及表现

龙智—DevSecOps解决方案

Lombok使用引发的血案

技术小生

7月月更

2022年国内云管平台厂商哪家好?为什么?

行云管家

云计算 云管平台 云管平台厂商

第十八届IET交直流输电国际会议(ACDC2022)于线上成功举办

E科讯

对话龙智高级咨询顾问、Atlassian认证专家叶燕秀:Atlassian产品进入后Server时代,中国用户应当何去何从?

龙智—DevSecOps解决方案

Server Atlassian Jira DC版

华为云数据库DDS产品深度赋能

程思扬

数据库 华为云 DDS

洞见科技解决方案总监薛婧:联邦学习助力数据要素安全流通

洞见科技

数据安全 隐私计算 数据隐私计算

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