使用基础架构即代码,在AWS云上部署和管理无服务器数据湖 - AWS Prescriptive Guidance

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

使用基础架构即代码,在AWS云上部署和管理无服务器数据湖

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

环境:生产

技术:分析;无服务器; DevOps

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

AWS服务:亚马逊 S3;亚马逊;;AWSGlueSQS;亚马逊 AWS CloudFormation;AWSLambda CloudWatch;AWSStep Functions;亚马逊 DynamoDB

Summary

注意:AWS CodeCommit 不再向新客户开放。的现有客户AWS CodeCommit 可以继续照常使用该服务。了解更多

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

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

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

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

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 函数将启动流程中 AWSStep Functions 中的ETL第二个函数

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

技术堆栈

  • 亚马逊 CloudWatch 活动

  • AWS CloudFormation

  • AWS CodePipeline

  • AWS CodeBuild

  • AWS CodeCommit

  • Amazon DynamoDB

  • AWSGlue

  • AWSLambda

  • 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 Dy namoDB — DynamoDB 是一项完全SQL托管的无数据库服务,可提供快速、可预测的性能和可扩展性。 

  • AWSGl AWS ue — Glue 是一项完全托管的ETL服务,可以更轻松地准备和加载数据进行分析。

  • AWSLambda — Lambda 支持在不预配置或管理服务器的情况下运行代码。只有在需要时 Lambda 才运行您的代码,并且能自动扩缩,从每天几个请求扩展到每秒数千个请求。 

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

  • AWSSte@@ p Functions-AWS Step Functions 是一款无服务器函数协调器,它可以轻松地将 Lambda AWS 函数和多个AWS服务排序到关键业务应用程序中。

  • Ama zon SQS — Amazon 简单队列服务 (AmazonSQS) 是一项完全托管的消息队列服务,可帮助您分离和扩展微服务、分布式系统和无服务器应用程序。

  • 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。 

重要:如果您使用输AWSSAMCLI入 CodeBuild,请运行sam packagesam deploy命令。如果使用 AWSCLI,请运行aws cloudformation packageaws cloudformation deploy命令。

DevOps 工程师

相关资源

设置 CI/CD 管道以配置 IaC

IaC 版本控制

其他资源