本文探讨了如何通过无服务器架构自动化 Amazon S3 批量操作作业的创建与执行,从而简化大规模数据管理。本文的主要内容包括:
采用 Amazon S3 批量操作来高效管理海量数据。如何利用事件驱动的无服务器架构自动化批量操作作业的创建。监控和报告任务状态以减少人为错误和运营开销。随着企业数据管理需求的变化,组织需要对数据进行操作或修改以确保合规性及应对业务需求。这就要求企业建立高效、可重复的数据管理过程,以应对快速增长的数据集。
企业通常选择 Amazon 简单存储服务Amazon S3 作为高可用性和可扩展的存储方案。为了简化大规模数据管理,企业可以使用 Amazon S3 批量操作。该功能使管理海量对象的过程变得简单,只需在 S3 控制台上单击几下或发送一次 API 请求即可更改对象元数据、复制或复制对象、替换对象标签集、修改访问控制、从 S3 Glacier 存储类恢复归档对象或执行自定义的 AWS Lambda 函数。
下面将详细介绍如何使用事件驱动的无服务器架构自动化创建和执行 S3 批量操作作业。这项解决方案与现有工作流或持续集成/持续交付CI/CD管道自动化相结合,提供了一种标准化和可重用的机制来大规模管理 Amazon S3 数据,减少人为干预,从而降低出错的可能性。自动执行数据移动、复制或从归档中检索等任务帮助企业应对大规模数据管理的运营开销和效率挑战。
该解决方案利用事件驱动架构的无服务器基础设施,依赖于以下 AWS 服务:
AWS CloudTrailAmazon EventBridgeAWS LambdaAmazon 简单存储服务Amazon S3该架构自动化了 S3 批量操作作业的创建和执行。它依赖于作业包文件的创建和上传,该文件包含配置和运行所需批量操作的详细信息。当作业包文件上传到 S3 桶时,会生成一个 S3 事件通知事件。这个事件由 Amazon EventBridge 规则进行评估,若符合条件,则触发 AWS Lambda 函数。Lambda 函数处理作业包文件中的信息,并生成适当的 API 调用以创建和运行 S3 批量操作作业。作业完成后,会生成一个报告并存储在 S3 桶中。
以下图示描绘了该架构的不同阶段:
示例:S3 批量操作的作业详情文件csv
S3 批量操作支持手动和自动选项来生成清单文件。如果您的工作流需要手动创建清单文件,则可以使用现有的 CSV 格式的 Amazon S3 清单报告,或遵循以下清单文件示例bucketkey生成自己的清单文件。可选地,如果您使用的是启用版本的桶,则可以通过在对象键值后添加版本 ID 或在 Amazon S3 清单报告配置中启用版本 ID 来定义对象版本。
示例:手动创建的清单文件
另外,S3 批量操作支持根据作业创建时指定的过滤条件自动生成清单文件。支持的筛选器包括创建日期、复制状态、对象大小、存储类和键名约束如子字符串、前缀或后缀匹配。有关每种清单创建选项的详细信息,请参见 Amazon S3 用户指南。如果您选择使用自动清单创建选项,则 Lambda 使用的 manifestcsv 文件不包括完整对象列表,而是包含自动清单创建所需的元素,例如源桶、清单输出和筛选条件详细信息。这些详细信息将由 Lambda 用于指定自动清单选项。
示例:自动创建的清单文件
创建这两个文件后,使用诸如 tar 之类的归档工具将它们组合成一个作业包文件。该文件的命名使用唯一的 jobID。然后,将作业包文件上传至指定用于作业导入的 S3 桶中。
示例:作业包文件上传后的 S3 桶
在作业导入桶上启用 AWS CloudTrail 数据事件,将会捕捉到由作业包文件上传生成的事件。
使用从 Amazon S3 通过 CloudTrail 生成的对象级数据事件创建 EventBridge 规则。该规则定义了一个事件模式,限制匹配源于作业导入桶的 PutObject 事件。
示例:Amazon EventBridge 规则配置的事件模式
当将作业包文件上传至作业导入桶时,EventBridge 规则模式会被匹配,事件将被传递给 EventBridge 规则中定义的目标。对于该规则,您可以使用 Lambda 作为主要目标。您还可以添加其他目标,例如配置一个 Amazon CloudWatch 日志组以进行额外监控。
Lambda 函数被从 Amazon EventBridge 传递的匹配事件触发。Lambda 函数使用 事件上下文 获取上传的作业包文件的位置。示例:Amazon EventBridge 规则配置以触发 AWS Lambda 函数
python manifestbucket = event[detail][requestParameters] sourcebucketname = manifestbucket[bucketName] manifestfilearn = event[detail][resources][0][ARN] manifestbucketarn = event[detail][resources][1][ARN]
示例:AWS Lambda 代码片段,用于解析事件通知中的详细信息,使用 Python 编写,利用 boto3。
接下来,Lambda 在 S3 导入桶中使用作业包文件名中定义的唯一作业 ID 创建新的作业特定前缀。然后,它解压包并将作业详情和清单文件写入之前创建的 jobID 前缀。示例:AWS Lambda 创建前缀并在 Amazon S3 桶中写入作业及清单详情
Lambda 函数解析 CSV 文件中的信息并生成创建作业请求。有关创建作业请求所需和可选值的详细信息,请参见 参考文档。python s3batchjobclientcreatejob( AccountId=AccountId ConfirmationRequired=False Description=Amazon S3 Batch Job Operation ClientRequestToken=clientRequestToken Priority=1 RoleArn=arnawsiamAccountIdrole/S3BatchOperationRole Operation=operationDetails Report=reportDetails Manifest=manifestDetails )
示例:创建作业请求的代码片段
tg免费加速器一旦创建作业请求成功提交,Amazon S3 将返回一个作业 ID。该作业 ID 可用于监控 S3 批量操作作业的当前状态。当没有优先级更高的作业在处理队列中等待时,批量操作将开始处理提交的作业。S3 批量操作允许四个作业并发运行,优先级可以作为作业详情的一部分定义。
示例:Amazon S3 批量操作作业
当作业完成、失败或被取消时,S3 批量操作可以输出完成报告。您可以配置该报告以包含所有任务的记录或仅失败的任务的记录。有关 S3 批量操作完成报告的示例,可以在 在线文档 中找到。如果您需要完成报告,则必须在创建作业时通过 Lambda 函数定义该报告的输出位置。此位置可以添加到 job detailscsv 文件中,或 Lambda 函数可以使用与解压作业详情包相同的 jobID 特定前缀位置。示例:包含 S3 批量操作报告的 Amazon S3 桶
还可以创建自动通知,以更新 S3 批量操作作业的当前状态。您可以利用 CloudTrail 和 EventBridge 规则捕获与每个作业的创建及状态变化相关的事件。您可以配置这些 EventBridge 规则,将更新发送到有用的目标,例如 CloudWatch 日志组、Amazon 简单队列服务Amazon SQS 队列或 Amazon 简单通知服务Amazon SNS 主题。
示例:用于作业状态更新的 Amazon EventBridge 模式
在本文中,我们讨论了如何利用事件驱动的无服务器架构,通过 S3 批量操作简化大规模 S3 数据管理操作。我们强调了记录和提交 S3 批量操作作业创建所需配置变量的方法,如何创建事件规则和过滤器以自动化 S3 批量操作作业的创建与执行,以及如何实现作业监控和报告。
本文所讨论的概念可以帮助企业在大规模管理 Amazon S3 中存储的数据时标准化和简化操作流程。这有助于减少运营开销并限制人为错误的发生,从而实现更高效、准确和可重用的工作流。
作为下一步,我们邀请您查看本文中讨论的 AWS 服务的在线文档。我们刚刚触及了这些服务所能提供的表面。此外,您还可以查看 Serverless Land 网站上汇集的精彩内容,了解关于 AWS 无服务器技术的最新信息、帖子、视频、代码和学习资源。
感谢您抽出时间阅读本文,我们希望它能激发您思考如何简化和标准化大规模管理 Amazon S3 数据的方式。如果您有任何问题或建议,请在评论区留下反馈。

标签 Amazon EventBridge Amazon S3 批量操作 Amazon 简单存储服务Amazon S3 AWS 云存储 AWS CloudTrail AWS 身份和访问管理IAM AWS Lambda
Shweta Singh 是 AWS 的云应用架构师,专注于大型迁移和现代化项目,特别是在主机现代化项目方面具有丰富经验。工作之余,Shweta 喜欢阅读书籍。
Eric Bowman 是 AWS 的存储解决方案架构师,致力于帮助客户识别 AWS 存储解决方案如何应对业务挑战。他来自威斯康星州,但曾住在亚利桑那州、德克萨斯州,目前居住在弗吉尼亚州北部。工作之余,Eric 喜欢与家人共度时光,并在木工车间进行创作。