使用基礎設施做為程式碼,在 AWS 雲端部署和管理無伺服器資料湖 - AWS Prescriptive Guidance

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

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

由基蘭庫馬爾 ‧ 錢德拉舍卡 (AWS) 和阿卜杜爾 ‧ 詹迪 (AWS) 創作

Envices (Env 生產

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

工作負載:所有其他工作負載

AWS 服務:Amazon S3; Amazon SQS; AWS CloudFormation; AWS Glue; Amazon DynamoDB 雲端觀察; AWS Lambda; AWS Step Functions; 亞馬遜 DynamoDB

Summary

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

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

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

此模式使用多個 AWS 無伺服器服務來簡化資料湖管理。這些功能包括 Amazon Simple Storage Service (Amazon S3) 和 Amazon DynamoDB、運算用的 AWS Lambda 和 AWS Glue,以及 Amazon CloudWatch Logs、Amazon CloudWatch Logs、Amazon Simple Queue Service (Amazon SQS) 和 AWS CloudWatch Logs。

AWS CloudFormation 和 AWS 程式碼服務充當 IAC 層,透過簡單的操作和管理,提供可重現且快速的部署。

先決條件和限制

先決條件

 

Architecture

架構圖說明了具有以下步驟的事件驅動的過程。 

  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 函式會從AWS Step Functions在 ETL 過程中。

  5. 然後在一批文件上應用重轉換。這項重大轉換是一項運算昂貴的作業,例如同步呼叫 AWS Glue 工作、AWS Fargate 任務、Amazon EMR 步驟或 Amazon SageMaker 筆記型電腦。表格中繼資料是使用 AWS Glue 檢索器從輸出檔案擷取,該檢索器會更新 AWS Glue 目錄。檔案中繼資料也會新增至 DynamoDB 的完整型錄表格中。最後,利用資料品質步驟迪庫也會執行。

技術堆疊

  • Amazon CloudWatch Events

  • AWS CloudFormation

  • AWS CodePipeline

  • AWS CodeBuild

  • AWS CodeCommit

  • Amazon DynamoDB

  • AWS Glue

  • AWS Lambda

  • Amazon S3

  • Amazon SQS

  • AWS Step Functions

Tools

  • Amazon CloudWatch Events— CloudWatch 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 函數和多個 AWS 服務排序到關鍵業務應用程式中。

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

  • 迪庫— Deequ 是一個工具,可以幫助您計算大型資料集的資料品質指標,定義和驗證資料品質限制,並隨時掌握資料分配的變化。

Code

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

Epics

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

登入 AWS 管理主控台,並遵循初始設定部分。這會建立初始 CI/CD 資源,例如程式 CodeCommit 可存放庫、CodeBuild 環境和 CodePipeline,以佈建和管理資料湖的 IAC。

DevOps 工程師
任務描述所需技能
克隆本地計算機上的 CodeCommit 存儲庫。

請遵循部署基礎部分。這可協助您將裝載 iAc 的 Git 存放庫複製到您的本機環境中。 

如需詳細資訊,請參閱「」連線至程式 CodeCommit 存放庫從 CodeCommit 文檔。

DevOps 工程師
修改 CloudFormation 範本。

使用您的本機工作站和程式碼編輯器,根據您的使用案例或需求修改 CloudFormation 範本。將它們提交到本地克隆的 Git 存儲庫。 

如需詳細資訊,請參閱「」使用 AWS CloudFormation 範本來自 AWS CloudFormation 文件。

DevOps 工程師
將變更推送到 CodeCommit 儲存庫。

您的基礎結構程式碼現在受版本控制,並且會追蹤您的程式碼庫的修改。當您將變更推送至 CodeCommit 存放庫時,CodePipeline 會自動將其套用至您的基礎結構,並將其傳送至 CodeBuild。 

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

DevOps 工程師

設定 CI/CD 管道,提供合作協議

IAC 的版本控制 

其他資源