使用 AWS Step Functions 透過驗證、轉換和分割來協調 ETL 管線 - AWS Prescriptive Guidance

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

使用 AWS Step Functions 透過驗證、轉換和分割來協調 ETL 管線

由桑迪普岡帕迪耶 (AWS) 創建

:环境 生產

技能:分析;大數據;資料湖;DevOps;無伺服器

AWS 服務:Amazon Athena;AWS Glue;AWS Lambda;AWS Step Functions

Summary

此模式描述如何建置無伺服器擷取、轉換和載入 (ETL) 管線,以驗證、轉換、壓縮和分割大型 CSV 資料集,以達到效能和成本最佳化。管道由 AWS Step Functions 協調,包括錯誤處理、自動重試和使用者通知功能。

當 CSV 檔上傳至 Amazon SSimple Storage Service (Amazon S3) 貯體來源資料夾時,ETL 管道會開始執行。管線會驗證來源 CSV 檔案的內容和結構描述、將 CSV 檔案轉換為壓縮的 Apache Parquet 格式、依年、月和日分割資料集,並將其儲存在個別資料夾中供分析工具處理。

自動化此模式的代碼可以在 GitHub 上使用,位於搭配 AWS Step Functions 的 ETL 管線儲存庫。

先決條件和限制

先決條件

  • 作用中的 AWS 帳戶

  • 使用您的 AWS 帳戶安裝和設定 AWS 命令列界面 (AWS CLI),以便您可以透過部署 AWS CloudFormation 堆疊來建立 AWS 資源。建議使用 AWS CLI 版本 2。如需安裝指示,請參閱安裝、更新和解除安裝 AWS CLI 版本 2,以取得 AWS CLI 文件中的資料。如需 AWS CLI 組態指示,請參閱組態與登入資料檔案設定,以取得 AWS CLI 文件中的資料。

  • Amazon S3 儲存貯體。

  • 具有正確結構描述的 CSV 資料集。(程式碼儲存庫提供範例 CSV 檔案,其中包含您可以使用的正確結構描述和資料類型。)

  • 支援與 AWS 管理主控台搭配使用的 Web 瀏覽器。(請參閱《》。支援的瀏覽器清單。)

  • AWS Glue 主控台存取權。

  • AWS Step Functions 主控台存取。

限制

  • 在 AWS Step Functions 中,保留歷史記錄日誌的最大限制為 90 天。如需詳細資訊,請參閱「」配額標準工作流程的配額,在 AWS Step Functions 文件中。

產品版本

  • 適用於 AWS Lambda 的 Python 3

  • AWS Glue 2.0 版

Architecture

圖表中說明的工作流程包含下列高階步驟:

  1. 使用者將 CSV 檔案上傳到 Amazon S3 中的來源資料夾中。

  2. Amazon S3 通知事件會啟動啟動 Step Functions 狀態機的 AWS Lambda 函數。

  3. Lambda 函數會驗證原始 CSV 檔案的結構描述和資料類型。

  4. 根據驗證結果:

    1. 如果來源檔案的驗證成功,檔案會移至階段資料夾以供進一步處理。

    2. 如果驗證失敗,檔案會移至錯誤資料夾,並透過 Amazon Simple Notification Service (Amazon SNS) 傳送錯誤通知。

  5. AWS Glue 爬蟲程式會從 Amazon S3 中的階段資料夾建立原始檔案的結構描述。

  6. AWS Glue 工作會將原始檔案轉換、壓縮和分割成實木地板格式。

  7. AWS Glue 任務也會將檔案移至 Amazon S3 中的轉換資料夾。

  8. AWS Glue 爬蟲程式會從轉換後的檔案建立結構描述。產生的結構描述可供任何分析工作使用。您也可以使用 Amazon Athena,來執行臨時查詢。

  9. 如果管線完成而沒有錯誤,架構檔案會移至封存資料夾。如果遇到任何錯誤,檔案會改為移至錯誤資料夾。

  10. Amazon SNS 會根據管道完成狀態傳送通知,指出成功或失敗。

此模式中使用的所有 AWS 資源都是無伺服器的。沒有伺服器可以管理。

Tools

AWS 服務

  • AWS Glue— AWS Glue 是一項完全受管的 ETL 服務,可讓客戶輕鬆準備和載入資料以進行分析。

  • AWS Step Functions— AWS Step Functions 是無伺服器協調服務,可讓您結合 AWS Lambda 功能和其他 AWS 服務,以建置關鍵業務應用程式。透過 AWS Step Functions 圖形主控台,您可以將應用程式的工作流程視為一系列事件驅動步驟。

  • Amazon S3— Amazon Simple Storage Service (Amazon S3) 是一項物件儲存服務,提供領先業界的可擴展性、資料可用性、安全性和效能。

  • Amazon SNS— Amazon Simple Notification Service (Amazon SNS) 是一種高可用性、耐用、安全且完全受管的發佈/訂閱訊息服務,可讓您分離微服務、分散式系統和無伺服器應用程式。

  • AWS Lambda— AWS Lambda 是一項運算服務,可讓您執行程式碼,無需佈建或管理伺服器。AWS Lambda 只有在需要時才會執行程式碼,可自動從每天數項請求擴展成每秒數千項請求。

Code

此模式的代碼可以在 GitHub 上使用搭配 AWS Step Functions 的 ETL 管線儲存庫。程式碼儲存庫包含下列檔案和資料夾:

  • template.yml— 用於使用 AWS Step Functions 建立 ETL 管道的 AWS CloudFormation 範本。

  • parameter.json— 包含所有參數和參數值。您可以更新此檔案以變更參數值,如史詩部分。

  • myLayer/python資料夾 — 包含為此專案建立所需 AWS Lambda 層所需的 Python 套件。

  • lambda資料夾 — 包含下列 Lambda 函數:

    • move_file.py— 將來源資料集移至封存、轉換或錯誤資料夾。

    • check_crawler.py— 檢查 AWS Glue 爬蟲程式的狀態次數與RETRYLIMIT 環境變數,才會傳送失敗訊息。

    • start_crawler.py— 啟動 AWS Glue 爬取程式。

    • start_step_function.py— 啟動 AWS Step Functions。

    • start_codebuild.py— 啟動 AWS CodeBuild 專案。

    • validation.py— 驗證輸入原始資料集。

    • s3object.py— 在 S3 儲存貯體內建立所需的目錄結構。

    • notification.py— 在管線終點傳送成功或錯誤通知。

若要使用範例程式碼,請依照史詩部分。

Epics

任務描述所需技能
複製範例程式碼儲存庫。
  1. 開啟搭配 AWS Step Functions 的 ETL 管線儲存庫。

  2. 選擇程式碼位於主存放庫頁面的檔案清單上方,然後複製以 HTTPS 複製

  3. 將您的工作目錄變更為您要在中儲存範例檔的位置。

  4. 在終端機或命令提示字元中,輸入命令:

    git clone <repoURL>

    where

    <repoURL>

    是指您在步驟 2 中複製的 URL。

開發人員
更新參數值。

在您的本地存儲庫副本中,編輯parameter.json檔案並更新預設參數值,如下所示:

  • pS3BucketName─ 用於存放資料集的 S3 儲存貯體名稱。範本將為您建立此儲存貯體。儲存貯體名稱必須是全域唯一的。

  • pSourceFolder─ 將用來上傳來源 CSV 檔案的 S3 儲存貯體中的資料夾名稱。

  • pStageFolder─ 在程序期間將用作暫存區域之 S3 儲存貯體內的資料夾名稱。

  • pTransformFolder─ S3 儲存貯體內用來儲存轉換和分割資料集的資料夾名稱。

  • pErrorFolder─ 如果無法驗證來源 CSV 檔案,將移至 S3 儲存貯體內的資料夾。

  • pArchiveFolder ─ 將用於封存來源 CSV 檔案的 S3 儲存貯體內的資料夾名稱。

  • pEmailforNotification─ 用於接收成功/錯誤通知的有效電子郵件地址。

  • pDatasetSchema─ 來源檔案將會被驗證的資料集結構描述。金耳柏魯 Python 軟件包用於源數據集驗證。如需詳細資訊,請參閲 。天鷹網站。

開發人員
將原始程式碼上傳至 S3 儲存貯體。

在部署自動化 ETL 管線的 CloudFormation 範本之前,您必須封裝 CloudFormation 範本的來源檔案,並將它們上傳到 S3 儲存貯體。若要進行這項動作,請使用您預先設定的描述檔來執行下列 AWS CLI 命令:

aws cloudformation package --template-file template.yml --s3-bucket <bucket_name> --output-template-file packaged.template --profile <profile_name>

 其中:

  • <bucket_name>是 AWS 區域中您要部署堆疊的現有 S3 儲存貯體名稱。此存儲桶用於存儲 CloudFormation 模板的源代碼包。

  • <profile_name>是您在設定 AWS CLI 時預先設定的有效 AWS CLI 設定檔。

開發人員
任務描述所需技能
部署 CloudFormation 範本。

若要部署 CloudFormation 範本,請執行下列 AWS CLI 命令:

aws cloudformation deploy --stack-name <stack_name> --template-file packaged.template  --parameter-overrides file://parameter.json --capabilities CAPABILITY_IAM --profile <profile_name>

其中:

  • <stack_name>是 CloudFormation 堆疊的唯一識別符。

  • <profile-name>是您預先設定的 AWS CLI 設定檔。

開發人員
檢查進度。

AWS CloudFormation 主控台,請檢查堆疊開發的進度。當狀態為CREATE_COMPLETE,則堆疊已成功部署。

開發人員
請注意 AWS Glue 資料庫名稱。

所以此輸出索引標籤會顯示 AWS Glue 資料庫的名稱。金鑰名稱是GlueDBOutput

開發人員
任務描述所需技能
啟動 ETL 管線。
  1. 導覽至原始資料夾 (source中設定的資料夾名稱,或是您在parameter.json文件)放在 S3 儲存貯體中。

  2. 將範例 CSV 檔案上傳至此資料夾。(代碼庫提供了一個名為Sample_Bank_Transaction_Raw_Dataset.csv,您可以使用。) 上傳文件將通過 Step Functions 啟動 ETL 管道。

  3. Step Functions 主控台,請檢查 ETL 管線狀態。

開發人員
檢查分割的資料集。

ETL 管線完成後,請確認已分割的資料集在 Amazon S3 轉換資料夾 (transform中設定的資料夾名稱,或是您在parameter.json檔案)。

開發人員
檢查已分割的 AWS Glue 資料庫。
  1. AWS Glue 主控台,請選取堆疊建立的 AWS Glue 資料庫 (這是您在上一個史詩中記下的資料庫)。

  2. 確認 AWS Glue Data Catalog 是否可用已分割的資料表。

開發人員
執行查詢。

(選擇性) 使用 Amazon Athena 在分割和轉換的資料庫上執行臨機操作查詢。如需說明,請參閱「」使用 Amazon Athena,執行 SQL 查詢在 AWS 文件中。

資料庫分析員

相關資源

AWS 服務文件

其他資訊

下圖顯示了成功 ETL 管道的 AWS Step Functions 工作流程,從 Step FunctionsInspector面板。

下圖顯示由於輸入驗證錯誤而失敗之 ETL 管線的 AWS Step Functions 工作流程,來自 Step FunctionsInspector面板。