写点什么

Amazon S3 批量操作

  • 2019 年 10 月 01 日
  • 本文字数:3167 字

    阅读完需:约 10 分钟

Amazon S3 批量操作

AWS 客户通常会利用 S3 的规模、耐用性、低成本、安全性和存储选项,在单个 Amazon Simple Storage Service (S3) 存储桶中存储数百万或数十亿个对象。此类客户会存储图像、视频、日志文件、备份和其他关键任务数据,并将 S3 用作其数据存储策略的关键部分。


批量操作


今天,我想告诉您有关 Amazon S3 批量操作的信息。您可以使用此新功能以简单直接的方式轻松处理数百、数百万或数十亿的 S3 对象。您可以将对象复制到另一个存储桶、设置标记或访问控制列表 (ACL),从 Glacier 启动还原,或在每个存储上调用 AWS Lambda 函数。


此功能基于 S3 对清单报告的现有支持(请阅读我的 S3 存储管理更新博文以了解更多信息)构建,并可使用报告或 CSV 文件来驱动批量操作。您不必编写代码、设置任何服务器队列或弄清楚如何对工作分区并将其分发给机群。相反,您只需点击几下即可在几分钟内创建一个作业,然后停止操作,静候 S3 使用大量幕后并行来处理工作。您可以使用 S3 控制台、S3 CLI 或 S3 API 创建、监控和管理批处理作业。


快速词汇课程


在开始创建批量作业之前,让我们回顾并介绍几个重要术语:


存储桶 – S3 存储桶包含任意数量的 S3 对象集合,具有可选的随对象版本控制。


清单报告 – 每次运行每日或每周存储桶清单时,都会生成 S3 清单报告。可以将报告配置为包括存储桶中的所有对象,或者侧重以前缀分隔的子集。


Manifest – 用于识别要在批处理作业中处理的对象的列表(清单报告或 CSV 格式的文件)。


批量操作 – 对 Manifest 描述的对象执行所需的操作。将操作应用于对象构成 S3 批量任务。


IAM 角色 –为 S3 提供读取清单报告中的对象、执行所需操作以及编写可选完成报告的权限的 IAM 角色。如果选择“调用 AWS Lambda”函数作为操作,则函数的执行角色必须授予访问所需 AWS 服务和资源的权限。


批处理作业 – 参考上述所有项目。每项作业都有状态和优先级;优先级较高(以数字表示)的工作优先于优先级较低的工作。


运行批处理作业


好的,让我们使用 S3 控制台创建并运行批处理作业! 为准备本篇博文,我在本周早些时候启用了一个 S3 存储桶 (jbarr-batch-camera) 的清单报告,并将报告路由到 jbarr-batch-inventory:



选择所需的清单项目,然后单击从 manifest 创建作业 以开始(也可以在浏览存储桶列表时单击批量操作)。所有相关信息均已填写,但如果需要,我可以选择清单的较早版本(此选项仅在 manifest 存储在已启用版本控制的存储桶中时适用)。单击下一步继续:



我选择操作(替换所有标签),输入特定的选项(稍后我会查看其他操作),然后单击下一步:



我为作业作输入一个名称,设置其优先级,并请求包含所有任务的完成报告。然后,我为报告选择一个存储桶,并选择一个授予必要权限的 IAM 角色(控制台还显示我可以复制和使用的角色策略和信任策略),然后单击下一步:



最后,我查看作业,然后单击创建作业:



作业进入准备状态。S3 批量操作检查 manifest 并执行其他一些验证,并且作业进入等待您的确认状态(这仅在我使用控制台时发生)。选择作业,然后单击确认并运行:



查看确认(未显示)以确保理解要执行的操作,然后单击运行作业。作业进入就绪状态,此后不久开始运行。完成后,作业进入完成状态:



如果正在运行处理大量对象的作业,可以刷新此页面以监视状态。需要特别注意一点:处理完前 1000 个对象后,S3 批量操作会检查并监控整体故障率,如果故障率超过 50%,将停止作业。


完成报告包含每个对象的一行,如下所示:



其他内置批量操作


我没有足够的空间来为您提供其他内置批量操作的完整运行。以下是一个概览:


PUT 复制操作会复制对象、控制存储类、加密、访问控制列表、标签和元数据:



可以将对象复制到同一个存储桶以更改其加密状态。也可以将它们复制到另一个区域,或者复制到另一个 AWS 账户拥有的存储桶。


这正是替换访问控制列表 (ACL)操作通过控制授予的权限所做的工作:



恢复操作从 Glacier 或 Glacier Deep Archive 存储类启动对象级恢复:



调用 AWS Lambda 函数


我已保存最常用的选项。我可以为每个对象调用 Lambda 函数,Lambda 函数可以通过编程方式分析和操作每个对象。该函数的执行角色必须信任 S3 批量操作:



此外,批处理作业的角色必须允许调用 Lambda 函数。


有了必要的角色后,可以创建一个为每个映射调用 Amazon Rekognition 的简单函数:


import boto3def lambda_handler(event, context):    s3Client = boto3.client('s3')    rekClient = boto3.client('rekognition')        # Parse job parameters    jobId = event['job']['id']    invocationId = event['invocationId']    invocationSchemaVersion = event['invocationSchemaVersion']
# Process the task task = event['tasks'][0] taskId = task['taskId'] s3Key = task['s3Key'] s3VersionId = task['s3VersionId'] s3BucketArn = task['s3BucketArn'] s3Bucket = s3BucketArn.split(':')[-1] print('BatchProcessObject(' + s3Bucket + "/" + s3Key + ')') resp = rekClient.detect_labels(Image={'S3Object':{'Bucket' : s3Bucket, 'Name' : s3Key}}, MaxLabels=10, MinConfidence=85) l = [lb['Name'] for lb in resp['Labels']] print(s3Key + ' - Detected:' + str(sorted(l)))
results = [{ 'taskId': taskId, 'resultCode': 'Succeeded', 'resultString': 'Succeeded' }] return { 'invocationSchemaVersion': invocationSchemaVersion, 'treatMissingKeysAs': 'PermanentFailure', 'invocationId': invocationId, 'results': results }
复制代码


有了函数后,在创建作业时选择调用 AWS lambda 函数作为操作,并选择 BatchProcessObject 函数:



然后像往常一样创建并确认作业。将为每个对象调用此函数,利用 Lambda 的扩展能力,不到一分钟即可运行完此中等大小的作业:



可以在 CloudWatch Logs 控制台中找到“检测到”消息:



从上述非常简单的示例中可以看出,可对大量 S3 对象轻松运行 Lambda 函数,这为各种有趣的应用程序打开了大门。


注意事项


我期待看到和听到您发现的 S3 量操作的用例! 在结束之前,以下列出一些最后的思考:


作业克隆 – 您可以克隆现有作业,微调参数,然后将其重新提交为新作业。您可以使用此选项来重新运行失败的作业或进行任何必要的调整。



编程作业创建 – 您可以将 Lambda 函数附加到生成清单报告的存储桶,并在每次报告到达时创建新的批处理作业。通过编程方式创建的作业不需要确认,并可以立即执行。


CSV 对象列表 – 如果您需要处理存储桶中的对象子集,但无法使用常见前缀来识别它们,则可以创建 CSV 文件并使用其驱动您的作业。您可以从清单报告开始,根据名称筛选对象,或根据数据库或其他参考检查对象。例如,您可能使用 Amazon Comprehend 对所有存储的文档执行情绪分析。您可以处理清单报告以查找尚未分析的文档,并将其添加到 CSV 文件中。


作业优先级 – 您可以在每个 AWS 区域中同时激活多个作业。会优先具有较高优先级的作业,并可能导致暂时暂停现有作业。您可以选择活动作业,然后单击更新优先级以便进行动态更改:



了解更多


以下是一些资源,可帮助您了解有关 S3 批量操作的更多信息:


文档 – 阅读有关创建作业、批量操作和管理批量操作作业的信息。


视频教程 – 观看 S3 批量操作视频教程,了解如何创建作业、管理和跟踪作业以及授予权限。


现已推出


您可以立即在除亚太地区(大阪)外的所有 AWS 商业区域中开始使用 S3 批量操作。在两个 AWS GovCloud(美国)区域中也提供 S3 批量操作。


作者介绍:


Jeff Barr


AWS 首席布道师; 2004 年开始发布博客,此后便笔耕不辍。


本文装载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/new-amazon-s3-batch-operations/


2019 年 10 月 01 日 09:00554
用户头像

发布了 1470 篇内容, 共 51.4 次阅读, 收获喜欢 57 次。

关注

评论

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

想要高效搭建企业信息平台?教你轻松选择开发框架!

Marilyn

敏捷开发 快速开发

mongodb 源码实现、调优、最佳实践系列-百万级高并发mongodb集群性能数十倍提升优化实践(下篇)

杨亚洲(专注mongodb及高性能中间件)

MySQL nosql mongodb 架构 分布式 分布式数据库mongodb

华为云数据安全中心正式公测,8大核心数据安全能力守护你的数据

华为云开发者社区

华为 安全 数据

程序员的美丽假期(并不)

Philips

敏捷开发 快速开发

websocket 是怎么连接的

程序员与厨子

nginx 网络 HTTP websocket

mongodb内核源码实现、性能调优、最佳运维实践系列-百万级高并发mongodb集群性能数十倍提升优化实践(上篇)

杨亚洲(专注mongodb及高性能中间件)

MySQL 数据库 nosql mongodb 分布式数据库mongodb

深入理解 JVM 垃圾回收算法 - 复制算法

Java架构师迁哥

阿里P8大牛呕心沥血总结整理的《Java面经手册》,通过实践的方式向你深度讲解Java核心知识点

Java架构之路

Java 程序员 架构 面试 编程语言

出炉!华为18A自爆SpringCloud微服务分布式笔记

996小迁

Java 编程 架构 面试 SpringCloud

日常工作问题集锦

hasWhere

直播预告 | 云时代的数据库客户端——CloudQuery最佳实践

CloudQuery社区

数据库 sql 安全 工具软件

Linux下diff的操作详解

良知犹存

Linux

SpringBoot有多重要?面试用SpringBoot把面试官唬住了要30k都行!

Java架构之路

Java 程序员 架构 面试 编程语言

详细分析定制企业应用的价格

Learun

敏捷开发 快速开发 软件架构

jvm笔记

pCat

Java JVM

成为 Apache 贡献者,So easy!

代立冬

Apache 贡献

让黑产无处遁形 京东智联云推出风险识别服务

京东科技开发者

人工智能 学习 风险识别

Github惊现高星神作,两份算法宝典让你横扫大厂算法面试题

编程 程序员 算法 计算机

台湾地区为什么会丢包高?

德胜网络-阳

从理论到工具:带你全面了解自动化测试框架

禅道项目管理

开源 DevOps 工具 自动化测试

华为鲲鹏专家解读:90%代码如何移植到鲲鹏平台

华为云开发者社区

软件 鲲鹏

你听过CatBoost吗?本文教你如何使用CatBoost进行快速梯度提升

计算机与AI

Python 学习 优化

LAXCUS大数据集群操作系统:一个分布式分时共享E级系统软件(三)

陈泽云

人工智能 大数据 计算机网络 操作系统 网络

成为一名合格的技术类产品经理

小清新同学

产品经理

Week 4 命题作业及总结

阿泰

java安全编码指南之:Thread API调用规则

程序那些事

Java并发 多线程 java安全编码 java安全编码指南 java编码规范

灯下黑中的自己

非著名程序员

个人成长 管理 管理者

几行代码轻松实现跨系统传递 traceId,再也不用担心对不上日志了!

程序员小航

Java 日志 链路追踪 工作笔记 traceId

Go发起HTTP2.0请求流程分析(中篇)——数据帧&流控制

Gopher指北

后端 HTTP2.0 Go 语言

LeetCode题解:98. 验证二叉搜索树,递归,JavaScript,详细注释

Lee Chen

大前端 LeetCode

面试大厂被面试官用MyBatis怼到“哑口无言”?这份MyBatis源码笔记助你吊打面试官!

Java架构之路

Java 程序员 架构 面试 编程语言

Amazon S3 批量操作_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章