使用基础设施即代码,在 Amazon Web Services Cloud 上部署和管理无服务器数据湖 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用基础设施即代码,在 Amazon Web Services Cloud 上部署和管理无服务器数据湖

由 Kirankumar Chandrashekar (AWS) 和 Abdel Jaidi (AWS) 创建

环境:生产

技术:数据湖;分析;无服务器; DevOps

工作负载:所有其他工作负载

AWS 服务:亚马逊 S3;亚马逊 SQS;AWS;AWS Glue;亚马逊 CloudFormation;AWS Lambda CloudWatch;AWS Step Functions;亚马逊 DynamoDB

Summary

此示例介绍了如何使用无服务器计算基础设施即代码(IaC)在 Amazon Web Services (AWS) Cloud 上实施和管理数据湖。这种模式基于 AWS 开发的无服务器数据湖框架 (SDLF) 研讨会。

SDLF 是一组可重复使用的资源,可加速企业数据湖在 Amazon Web Services Cloud 上的交付,并有助于更快地部署到生产环境。它用于通过遵循最佳实践来实施数据湖的基础结构。

SDLF 使用 AWS、AWS 和 AWS 等 CodePipeline AWS 服务,在整个代码和基础设施部署过程中实施持续集成/持续部署 (CI/CD) 流程。 CodeBuild CodeCommit

此模式使用多个 AWS 无服务器服务来简化数据湖管理。其中包括用于存储的亚马逊简单存储服务 (Amazon S3) 和亚马逊 DynamoDB、用于计算的 AWS Lambda 和 AWS Glue,以及用于编排的亚马逊活动、亚马逊简单队列服务 (Amazon SQS) Simple Queue Service CloudWatch 和 AWS Step Functions。

AWS CloudFormation 和 AWS 代码服务充当 IaC 层,提供可重现且快速的部署,操作和管理简单。

先决条件和限制

先决条件

架构

该架构图通过以下步骤说明了事件驱动的流程。 

在 AWS 云上实施和管理数据湖。
  1. 将文件添加到原始数据 S3 存储桶后,Amazon S3 事件通知将放置在 SQS 队列中。每个通知均以 JSON 文件形式传递,其中包含 S3 存储桶名称、对象键或时间戳等元数据。

  2. 此通知由 Lambda 函数使用,该函数根据元数据将事件路由到正确的提取、转换和加载 (ETL) 流程。Lambda 函数还可以使用存储在 Amazon DynamoDB 表中的上下文配置。此步骤可以解耦并扩展到数据湖中的多个应用程序。

  3. 该事件被路由至 ETL 流程中的第一个 Lambda 函数,该函数将数据从原始数据区域转换并移动到数据湖的暂存区域。第一步是更新综合目录。这是 DynamoDB 表,其中包含数据湖的所有文件元数据。此表中的每一行都包含关于存储在 Amazon S3 中的单个对象的操作元数据。同步调用 Lambda 函数,该函数对 S3 对象执行轻量变换,这是一种计算成本低廉的操作(例如将文件从一种格式转换为另一种格式)。由于新对象已添加到暂存 S3 存储桶中,因此综合目录会更新,并且消息会发送到 SQS 队列,等待 ETL 中的下一阶段。

  4. CloudWatch 事件规则每 5 分钟触发一个 Lambda 函数。此函数检查消息是否从上一个 ETL 阶段传送至 SQS 队列。如果消息已传送,则 Lambda 函数将在 ETL 流程中启动 AWS Step Functions 中的第二个函数。

  5. 然后对批量文件进行大量转换。这种繁重的转换是一项计算成本很高的操作,例如同步调用 AWS Glue 作业、AWS Fargate 任务、亚马逊 EMR 步骤或亚马逊笔记本。 SageMaker 使用 AWS Glue 爬网程序从输出文件中提取表元数据,这会更新 AWS Glue 目录。文件元数据也将添加至 DynamoDB 的综合目录表中。最后,还利用 Deequ 运行数据质量步骤。

技术堆栈

  • 亚马逊 CloudWatch 活动

  • AWS CloudFormation

  • AWS CodePipeline

  • AWS CodeBuild

  • AWS CodeCommit

  • Amazon DynamoDB

  • AWS Glue

  • AWS Lambda

  • Amazon S3

  • Amazon SQS

  • AWS Step Functions

工具

  • Amazon CloudWatch Ev CloudWatch ents — Events 提供近乎实时的系统事件流,这些事件描述了 AWS 资源的变化。

  • AWS CloudFormation — CloudFormation 帮助以可预测的方式重复创建和配置 AWS 基础设施部署。

  • AWS CodeBuild — CodeBuild 是一项完全托管的构建服务,可编译您的源代码、运行单元测试并生成可随时部署的项目。

  • AWS CodeCommit — CodeCommit 是一项由 AWS 托管的版本控制服务,您可以使用它来私下存储和管理资产(例如源代码和二进制文件)。

  • AWS CodePipeline — CodePipeline 是一项持续交付服务,您可以使用它对持续发布软件变更所需的步骤进行建模、可视化和自动化。

  • Amazon DynamoDB – DynamoDB 是一种全托管 NoSQL 数据库服务,提供快速而可预测的性能,能够实现扩展。 

  • AWS Glue – AWS Glue 是一项完全托管的 ETL 服务,可让客户轻松准备和加载数据以进行分析。

  • AWS Lambda – Lambda 支持无需预调配或管理服务器即可运行代码。只有在需要时 Lambda 才运行您的代码,并且能自动扩缩,从每天几个请求扩展到每秒数千个请求。 

  • Amazon S3 – Amazon Simple Storage Service (Amazon S3) 是一种高度可扩展的对象存储服务。Amazon S3 可用于各种存储解决方案,包括网站、移动应用程序、备份和数据湖。

  • AWS Step Functions - AWS Step Functions 是一款无服务器函数编排工具,它可以轻松地将 AWS Lambda 函数和多个 Amazon Web Services 排序到关键业务应用程序中。

  • Amazon SQS – Amazon Simple Queue Service (Amazon SQS) 是一种全托管消息队列服务,可帮助您解耦和扩展微服务、分布式系统和无服务器应用程序。

  • Deequ – Deequ 是一款工具,可帮助您计算大型数据集的数据质量指标,定义和验证数据质量限制,并随时了解数据分布的变化。

代码存储库

SDLF 的源代码和资源可在 AWS 实验室 GitHub 存储库中找到。

操作说明

任务描述所需技能

设置 CI/CD 管道,以管理数据湖的 IaC。

登录 AWS 管理控制台,按照 SDLF 研讨会的初始设置部分中的步骤进行操作。这将创建初始 CI/CD 资源,例如为 CodeCommit 数据湖配置和管理 IaC 的存储库、 CodeBuild 环境和 CodePipeline 管道。

DevOps 工程师
任务描述所需技能

在本地计算机上克隆 CodeCommit 存储库。

按照 SDLF 研讨会部署基础部分中的步骤进行操作。这可以帮助您将托管 IaC 的 Git 存储库克隆至本地环境中。 

有关更多信息,请参阅 CodeCommit 文档中的连接 CodeCommit 存储库

DevOps 工程师

修改 CloudFormation 模板。

使用本地工作站和代码编辑器根据您的用例或要求修改 CloudFormation 模板。将它们提交到本地克隆 Git 存储库。 

有关更多信息,请参阅 AWS CloudFormation 文档中的使用 AWS CloudFormation 模板

DevOps 工程师

将更改推送到 CodeCommit 存储库。

您的基础设施代码现在处于版本控制之下,并且会跟踪对代码库的修改。当您将更改推送到 CodeCommit 存储库时, CodePipeline 会自动将其应用于您的基础架构并将其交付给 CodeBuild。 

重要提示:如果您在中使用 AWS SAM CLI CodeBuild,请运行sam packagesam deploy命令。如果您使用 AWS CLI,请运行 aws cloudformation packageaws cloudformation deploy 命令。

DevOps 工程师

相关资源

设置 CI/CD 管道以配置 IaC

IaC 版本控制

其他资源