本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 AWS 步驟函數透過驗證、轉換和分割協調 ETL 管道
創建者:桑迪普甘加帕帝伊 (AWS)
環境:生產 | 技術:分析; 大數據; 數據湖;DevOps; 無伺服器 | AWS 服務:亞馬遜雅典娜; AWS 膠水; AWS 拉姆達; AWS 步驟函數 |
總結
此模式說明如何建置無伺服器擷取、轉換和載入 (ETL) 管道,以驗證、轉換、壓縮和分割大型 CSV 資料集,以達到效能和成本最佳化。該管道由 AWS Step Functions 協調,包括錯誤處理、自動重試和使用者通知功能。
將 CSV 檔案上傳到 Amazon 簡易儲存服務 (Amazon S3) 儲存貯體來源資料夾時,ETL 管道開始執行。管線會驗證來源 CSV 檔案的內容和結構描述,將 CSV 檔案轉換為壓縮的 Apache Parquet 格式,依年、月和日分割資料集,並將其儲存在分析工具的獨立資料夾中以供處理。
自動化此模式的代碼可用於GitHub,在具有 AWS 步驟功能的 ETL 管道
先決條件和限制
先決條件
作用中的 AWS 帳戶
使用 AWS 帳戶安裝和設定的 AWS 命令列界面 (AWS CLI),以便您可以透過部署 AWS 來建立 AWS 資源CloudFormation堆疊。建議使用 AWS CLI 第 2 版。如需安裝指示,請參閱安裝、更新和解除安裝 AWS CLI 第 2 版在 AWS CLI 文件中。如需 AWS CLI 組態設定的指示,請參閱組態和認證檔案設定在 AWS CLI 文件中。
Amazon S3 儲存貯體。
具有正確結構描述的 CSV 資料集。(該代碼存儲庫
此模式隨附提供範例 CSV 檔案,其中包含您可以使用的正確結構描述和資料類型。) 支援與 AWS 管理主控台搭配使用的網頁瀏覽器。(請參閱支援的瀏覽器清單
。) AWS Glue 主控台存取權。
AWS 步驟功能主控台存取。
限制
產品版本
用於 AWS 拉姆達的蟒蛇 3
AWS 膠水 2.0 版
架構

圖中所示的工作流程包含下列高階步驟:
使用者將 CSV 檔案上傳到 Amazon S3 中的來源資料夾。
Amazon S3 通知事件會啟動 AWS Lambda 函數,以啟動步驟函數狀態機器。
Lambda 函數會驗證原始 CSV 檔案的結構描述和資料類型。
根據驗證結果:
如果來源檔案驗證成功,檔案會移至 stage 資料夾以供進一步處理。
如果驗證失敗,檔案會移至錯誤資料夾,並透過 Amazon 簡單通知服務 (Amazon SNS) 傳送錯誤通知。
AWS Glue 爬行者程式會從 Amazon S3 中的階段資料夾建立原始檔案的結構描述。
AWS Glue 任務會將原始檔案轉換、壓縮和分割成實木複合地板格式。
AWS Glue 任務也會將檔案移至 Amazon S3 中的轉換資料夾。
AWS Glue 爬行者程式會從轉換後的檔案建立結構描述。產生的結構描述可供任何分析工作使用。您也可以使用亞馬遜雅典娜執行臨時查詢。
如果配管完成時沒有發生錯誤,則結構描述檔案會移至封存資料夾。如果遇到任何錯誤,則會將檔案移至錯誤資料夾。
Amazon SNS 會根據管道完成狀態傳送通知,指出成功或失敗。
此模式中使用的所有 AWS 資源都是無伺服器的。沒有要管理的伺服器。
工具
AWS 服務
膠水
— AWS Glue 是全受管 ETL 服務,可讓客戶輕鬆準備和載入資料以進行分析。 AWS 步驟功能
— AWS Step Functions 是一種無伺服器協調服務,可讓您結合 AWS Lambda 函數和其他 AWS 服務來建立關鍵業務應用程式。透過 AWS Step Functions 圖形主控台,您可以將應用程式的工作流程視為一系列事件驅動的步驟。 亞馬遜 S3
— Amazon 簡單儲存服務 (Amazon S3) 是一種物件儲存服務,可提供業界領先的可擴展性、資料可用性、安全性和效能。 亞馬遜 SNS
— Amazon 簡單通知服務 (Amazon SNS) 是高可用性、耐用、安全且全受管的 Pub/sub 簡訊服務,可讓您分離微型服務、分散式系統和無伺服器應用程式。 AWS 拉姆達
— AWS Lambda 是一種運算服務,可讓您執行程式碼,而無需佈建或管理伺服器。AWS Lambda 只有在需要時才會執行程式碼,可自動從每天數項請求擴展成每秒數千項請求。
Code
此模式的代碼可在GitHub,在具有 AWS 步驟功能的 ETL 管道
template.yml
— AWSCloudFormation使用 AWS 步驟函數建立 ETL 管道的範本。parameter.json
— 包含所有參數和參數值。您可以更新此檔案以變更參數值,如史诗部分。myLayer/python
資料夾 — 包含為此專案建立所需 AWS Lambda 層所需的 Python 套件。lambda
資料夾 — 包含下列 Lambda 函數:move_file.py
— 將來源資料集移至封存、轉換或錯誤資料夾。check_crawler.py
— 檢查 AWS Glue 爬行程式的狀態,多次由RETRYLIMIT
在傳送失敗訊息之前的環境變數。start_crawler.py
— 啟動 AWS 膠合爬蟲程式。start_step_function.py
— 啟動 AWS 步驟功能。start_codebuild.py
— 啟動 AWSCodeBuild項目。validation.py
— 驗證輸入原始資料集。s3object.py
— 在 S3 儲存貯體內建立所需的目錄結構。notification.py
— 在管道結束時傳送成功或錯誤通知。
若要使用範例程式碼,請遵循史诗部分。
史诗
任務 | 描述 | 所需技能 |
---|---|---|
複製範例程式碼儲存庫。 |
| 開發人員 |
更新參數值。 | 在儲存庫的本機副本中,編輯
| 開發人員 |
將原始程式碼上傳至 S3 儲存貯體。 | 在您部署CloudFormation自動化 ETL 管線的範本,您必須封裝的來源檔案CloudFormation模板並將其上傳到 S3 存儲桶。若要這麼做,請使用預先設定的設定檔執行下列 AWS CLI 命令:
其中:
| 開發人員 |
任務 | 描述 | 所需技能 |
---|---|---|
部署CloudFormation範本。 | 若要部署CloudFormation範本中,執行下列 AWS CLI 命令:
其中:
| 開發人員 |
檢查進度。 | 在「」AWSCloudFormation安慰 | 開發人員 |
請記下 AWS Glue 資料庫名稱。 | 該輸出堆疊的索引標籤會顯示 AWS Glue 資料庫的名稱。金鑰名稱為 | 開發人員 |
任務 | 描述 | 所需技能 |
---|---|---|
啟動 ETL 管線。 |
| 開發人員 |
檢查已分割的資料集。 | 當 ETL 管道完成時,請確認分區資料集在 Amazon S3 轉換資料夾中是否可用 ( | 開發人員 |
檢查已分割的 AWS Glue 資料庫。 |
| 開發人員 |
執行查詢。 | (選擇性) 使用 Amazon Athena 在分區和轉換的資料庫上執行臨機操作查詢。如需指示,請參閱使用亞馬遜雅典娜運行 SQL 查詢在 AWS 文件中。 | 数据库分析 |
相關資源
AWS 服務文件
其他資訊
下圖顯示了從步驟函數獲得成功 ETL 管道的 AWS 步驟函數工作流程檢查員面板。

下圖顯示由於輸入驗證錯誤而失敗的 ETL 管道的 AWS 步驟函數工作流程,來自步驟函數檢查員面板。
