使用基礎設施即程式碼在 AWS 雲端部署和管理無伺服器資料湖 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用基礎設施即程式碼在 AWS 雲端部署和管理無伺服器資料湖

創建者基蘭庫馬爾錢德拉什卡爾 (AWS) 和阿卜杜勒·海迪 (AWS)

環境:生產

技術:資料湖;分析;無伺服器; DevOps

工作負載:所有其他工作

AWS 服務:Amazon S3; Amazon SQS; AWS; AWS AWS Glue CloudFormation; 亞馬遜; AWS Lambda CloudWatch; AWS Step Functions; Amazon DynamoDB

使用 IaC 部署和管理無伺服器資料湖的摘要

此模式說明如何使用無伺服器運算基礎設施即程式碼 (IaC) 在 Amazon Web Services (AWS) 雲端上實作和管理資料湖。此模式是以 AWS 開發的無伺服器資料湖架構 (SDLF) 研討會為基礎。

SDLF 是可重複使用的資源集合,可加速 AWS 雲端上企業資料湖的交付速度,並協助更快地部署到生產環境。它是用來通過遵循最佳實踐來實現數據湖的基礎結構。

SDLF 使用 AWS CodePipeline、AWS 和 AWS 等 AWS 服務,在整個程式碼和基礎設施部署中實作持續整合/持續部署 (CI/CD) 程序。 CodeBuild CodeCommit

此模式使用多個 AWS 無伺服器服務來簡化資料湖管理。其中包括用於 Simple Storage Service (Amazon S3) 和 Amazon DynamoDB、適用於運算的 AWS Lambda 和 AWS Glue,以及亞馬遜 CloudWatch 活動、亞馬遜簡單佇列服務 (Amazon SQS) 以及用於協調的 AWS Step Functions。

AWS CloudFormation 和 AWS 程式碼服務充當 IaC 層,透過輕鬆的操作和管理提供可重複且快速的部署。

使用 IaC 部署和管理無伺服器資料湖的先決條件和限制

先決條件

使用 IaC 部署和管理無伺服器資料湖的架構

架構圖說明了事件驅動的過程,其中包含以下步驟。

  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 任務、Amazon EMR 步驟或 Amazon 筆記本。 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

使用 IaC 部署和管理無伺服器資料湖的工具

  • Amazon CloudWatch 活動 — CloudWatch 活動提供近乎即時的系統事件串流,描述 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 — L ambda 支援執行程式碼,無需佈建或管理伺服器。Lambda 只有在需要時才會執行程式碼,可自動從每天數項請求擴展成每秒數千項請求。 

  • 亞馬遜 S3 — 亞馬遜簡單儲存服務 (Amazon S3) 是可高度擴展的物件儲存服務。Amazon S3 可用於各種儲存解決方案,包括網站、行動應用程式、備份和資料湖。

  • AWS 步驟函數-AWS Step Functions 是無伺服器函數協調器,可讓您輕鬆地將 AWS Lambda 函數和多個 AWS 服務排序為關鍵業務應用程式。

  • Amazon SQS — Amazon Simple Queue Service (Amazon SQS) 是全受管訊息佇列服務,可協助您分離和擴展微型服務、分散式系統和無伺服器應用程式。

  • Deequ — Deequ 是一種工具,可協助您計算大型資料集的資料品質指標、定義和驗證資料品質限制,並隨時掌握資料分佈變更的通知。

Code

SDLF 的原始程式碼和資源可在 AWS 實驗室 GitHub儲存庫中取得。

使用 IaC 部署和管理無伺服器資料湖的史詩

任務 描述 所需技能
設定 CI/CD 管線以管理資料湖的 IaC。

登入 AWS 管理主控台,並按照 SDLF 研討會初始設定章節中的步驟操作。這會建立初始的 CI/CD 資源,例如為資料湖佈建和 CodePipeline管理 IaC 的 CodeCommit儲存庫、 CodeBuild 環境和管道。

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

其他資源