選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

使用 Step Functions 中的分散式映射複製大規模 CSV 資料

焦點模式
使用 Step Functions 中的分散式映射複製大規模 CSV 資料 - AWS Step Functions

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

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

本教學課程可協助您在分散式模式下開始使用 Map 狀態。設定為分散式Map的狀態稱為分散式映射狀態。您可以在工作流程中使用分散式地圖狀態,透過大規模的 Amazon S3 資料來源進行反覆運算。Map 狀態會以子工作流程執行的方式執行每個反覆運算,這可啟用高並行。如需分散式模式的詳細資訊,請參閱分散式模式中的映射狀態

在本教學課程中,您會使用分散式地圖狀態,在 Amazon S3 儲存貯體中的 CSV 檔案上反覆運算。然後,您會在另一個 Amazon S3 儲存貯體中傳回其內容,以及子工作流程執行的 ARN。首先在工作流程 Studio 中建立工作流程原型。接著,您將Map狀態的處理模式設定為分散式,指定 CSV 檔案做為資料集,並提供其位置給 Map 狀態。您也可以指定分散式映射狀態啟動為 Express 的子工作流程執行的工作流程類型。

除了這些設定之外,您也可以指定其他組態,例如並行子工作流程執行的數目上限,以及匯出Map結果的位置,以本教學課程中使用的範例工作流程。

先決條件

  • 將 CSV 檔案上傳至 Amazon S3 儲存貯體。您必須在 CSV 檔案中定義標頭列。如需有關對 CSV 檔案施加的大小限制以及如何指定標頭列的資訊,請參閱 Amazon S3 儲存貯體中的 CSV 檔案

  • 在儲存貯體內建立另一個 Amazon S3 儲存貯體和資料夾,以匯出Map狀態結果。

重要

請確定您的 Amazon S3 儲存貯體與您的狀態機器位於相同 AWS 帳戶 和 AWS 區域 之下。

步驟 1:建立工作流程原型

在此步驟中,您會使用 Workflow Studio 建立工作流程的原型。Workflow Studio 是 Step Functions 主控台中提供的視覺化工作流程設計工具。您可以從流程和動作索引標籤分別選擇所需的狀態和 API 動作。您將使用 Workflow Studio 的拖放功能來建立工作流程原型。

  1. 開啟 Step Functions 主控台,然後選擇建立狀態機器

  2. 選擇範本對話方塊中,選取空白

  3. 選擇選取以在 中開啟工作流程 Studio設計模式

  4. 流程索引標籤中,拖曳映射狀態,並將其拖放至標示為「拖曳」的第一個狀態的空白狀態

  5. 組態索引標籤中,針對狀態名稱,輸入 Process data

  6. 動作索引標籤中,拖曳AWS Lambda 叫用 API 動作,並將其放入程序資料狀態。

  7. AWS Lambda 調用狀態重新命名為 Process CSV data

步驟 2:設定映射狀態的必要欄位

在此步驟中,您可以設定分散式映射狀態的下列必要欄位:

  • ItemReader – 指定資料集及其Map狀態可從中讀取輸入的位置。

  • ItemProcessor – 指定下列值:

    • ProcessorConfig – 將 ModeEXPRESS分別ExecutionType設為 DISTRIBUTED和 。這會設定Map狀態的處理模式,以及分散式映射狀態啟動之子工作流程執行的工作流程類型。

    • StartAt – Map 工作流程中的第一個狀態。

    • States – 定義映射工作流程,這是一組在每個子工作流程執行中重複的步驟。

  • ResultWriter – 指定 Step Functions 寫入分散式映射狀態結果的 Amazon S3 位置。

    重要

    請確定您用來匯出 Map Run 結果的 Amazon S3 儲存貯體與您的狀態機器位於相同 AWS 帳戶 和 AWS 區域 下。否則,您的狀態機器執行會失敗並出現 States.ResultWriterFailed錯誤。

若要設定必要欄位:
  1. 選擇處理資料狀態,然後在組態索引標籤中執行下列動作:

    1. 針對處理模式,選擇分散式

    2. 針對項目來源,選擇 Amazon S3,然後從 S3 項目來源下拉式清單中選擇 S3 中的 CSV 檔案S3

    3. 執行下列動作來指定 CSV 檔案的 Amazon S3 位置:

      1. 對於 S3 物件,從下拉式清單中選取輸入儲存貯體和金鑰

      2. 針對儲存貯體,輸入包含 CSV 檔案的 Amazon S3 儲存貯體名稱。例如:amzn-s3-demo-source-bucket

      3. 針對金鑰,輸入您儲存 CSV 檔案的 Amazon S3 物件名稱。您也必須在此欄位中指定 CSV 檔案名稱。例如:csvDataset/ratings.csv

    4. 對於 CSV 檔案,您還必須指定資料欄標頭的位置。若要這樣做,請選擇其他組態,然後對於 CSV 標頭位置,如果 CSV 檔案的第一列是標頭,則保留第一列的預設選擇。否則,請選擇指定以在狀態機器定義中指定標頭。如需詳細資訊,請參閱ReaderConfig

    5. 針對子執行類型,選擇 Express

  2. 匯出位置中,若要將映射執行結果匯出至特定 Amazon S3 位置,請選擇匯出映射狀態的輸出至 Amazon S3

  3. 請執行下列操作:

    1. 對於 S3 儲存貯體,從下拉式清單中選擇輸入儲存貯體名稱和字首

    2. 針對儲存貯體,輸入您要匯出結果的 Amazon S3 儲存貯體名稱。例如:mapOutputs

    3. 對於字首,輸入您要將結果儲存到其中的資料夾名稱。例如:resultData

步驟 3:設定其他選項

除了分散式映射狀態的必要設定之外,您也可以指定其他選項。這些可以包括並行子工作流程執行的數目上限,以及匯出Map狀態結果的位置。

  1. 選擇處理資料狀態。然後,在項目來源中,選擇其他組態

  2. 請執行下列操作:

    1. 選擇使用 ItemSelector 修改項目,為每個子工作流程執行指定自訂 JSON 輸入。

    2. 輸入下列 JSON 輸入:

      { "index.$": "$$.Map.Item.Index", "value.$": "$$.Map.Item.Value" }

      如需如何建立自訂輸入的資訊,請參閱ItemSelector (地圖)

  3. 執行期設定中,針對並行限制,指定分散式映射狀態可以啟動的並行子工作流程執行次數。例如,​輸入 100

  4. 在瀏覽器上開啟新的視窗或索引標籤,並完成您將在此工作流程中使用的 Lambda 函數組態,如 中所述步驟 4:設定 Lambda 函數

步驟 4:設定 Lambda 函數

重要

確保您的 Lambda 函數與您的 AWS 區域 狀態機器位於相同位置。

  1. 開啟 Lambda 主控台,然後選擇建立函數

  2. Create function (建立函數) 頁面上,選擇 Author from scratch (從頭開始撰寫)

  3. 基本資訊區段中,設定您的 Lambda 函數:

    1. 針對函數名稱,請輸入 distributedMapLambda

    2. 針對 Runtime (執行時間),選擇 Node.js

    3. 保留所有預設選項,然後選擇建立函數

    4. 建立 Lambda 函數後,複製頁面右上角顯示的函數 Amazon Resource Name (ARN)。您需要在工作流程原型中提供此資訊。以下是範例 ARN:

      arn:aws:lambda:us-east-2:123456789012:function:distributedMapLambda
  4. 複製 Lambda 函數的下列程式碼,並將其貼到 distributedMapLambda 頁面的程式碼來源區段。

    exports.handler = async function(event, context) { console.log("Received Input:\n", event); return { 'statusCode' : 200, 'inputReceived' : event //returns the input that it received } };
  5. 選擇部署。函數部署後,請選擇測試以查看 Lambda 函數的輸出。

步驟 5:更新工作流程原型

在 Step Functions 主控台中,您將更新工作流程以新增 Lambda 函數的 ARN。

  1. 返回您建立工作流程原型的索引標籤或視窗。

  2. 選擇程序 CSV 資料步驟,然後在組態索引標籤中執行下列動作:

    1. 針對整合類型,選擇最佳化

    2. 針對函數名稱,開始輸入 Lambda 函數的名稱。從顯示的下拉式清單中選擇函數,或選擇輸入函數名稱並提供 Lambda 函數 ARN。

步驟 6:檢閱自動產生的 Amazon States 語言定義並儲存工作流程

當您從動作流程索引標籤將狀態拖放到畫布上時,Workflow Studio 會自動即時編寫工作流程的 Amazon States 語言定義。您可以視需要編輯此定義。

  1. (選用) 在Inspector 面板面板上選擇定義,並檢視狀態機器定義。

    提示

    您也可以在 Workflow Studio 程式碼編輯器 的 中檢視 ASL 定義。在程式碼編輯器中,您也可以編輯工作流程的 ASL 定義。

    下列範例程式碼顯示工作流程自動產生的 Amazon States 語言定義。

    { "Comment": "Using Map state in Distributed mode", "StartAt": "Process data", "States": { "Process data": { "Type": "Map", "MaxConcurrency": 100, "ItemReader": { "ReaderConfig": { "InputType": "CSV", "CSVHeaderLocation": "FIRST_ROW" }, "Resource": "arn:aws:states:::s3:getObject", "Parameters": { "Bucket": "amzn-s3-demo-source-bucket", "Key": "csvDataset/ratings.csv" } }, "ItemProcessor": { "ProcessorConfig": { "Mode": "DISTRIBUTED", "ExecutionType": "EXPRESS" }, "StartAt": "Process CSV data", "States": { "Process CSV data": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:distributedMapLambda" }, "End": true } } }, "Label": "Processdata", "End": true, "ResultWriter": { "Resource": "arn:aws:states:::s3:putObject", "Parameters": { "Bucket": "mapOutputs", "Prefix": "resultData" } }, "ItemSelector": { "index.$": "$$.Map.Item.Index", "value.$": "$$.Map.Item.Value" } } } }
  2. 為您的狀態機器指定名稱。若要執行此操作,請選擇 MyStateMachine 預設狀態機器名稱旁的編輯圖示。然後,在狀態機器組態中,在狀態機器名稱方塊中指定名稱。

    針對本教學課程,輸入名稱 DistributedMapDemo

  3. (選用) 在狀態機器組態中,指定其他工作流程設定,例如狀態機器類型及其執行角色。

    在此教學課程中,請保留狀態機器組態中的所有預設選擇。

  4. 確認角色建立對話方塊中,選擇確認以繼續。

    您也可以選擇檢視角色設定以返回狀態機器組態

    注意

    如果您刪除 Step Functions 建立的 IAM 角色,Step Functions 稍後無法重新建立該角色。同樣地,如果您修改角色 (例如,從 IAM 政策中的主體移除 Step Functions),Step Functions 稍後無法還原其原始設定。

步驟 7:執行狀態機器

執行是您狀態機器的執行個體,您可以在其中執行工作流程來執行任務。

  1. DistributedMapDemo 頁面上,選擇開始執行

  2. 開始執行對話方塊中,執行下列動作:

    1. (選用) 輸入自訂執行名稱以覆寫產生的預設值。

      非 ASCII 名稱和記錄

      Step Functions 接受包含非 ASCII 字元的狀態機器、執行、活動和標籤名稱。由於這類字元不適用於 Amazon CloudWatch,因此我們建議您僅使用 ASCII 字元,以便在 CloudWatch 中追蹤指標。

    2. (選用) 在輸入方塊中,輸入 JSON 格式的輸入值來執行工作流程。

    3. 選擇 Start execution (開始執行)

    4. Step Functions 主控台會引導您前往標題為執行 ID 的頁面。此頁面稱為執行詳細資訊頁面。在此頁面上,您可以在執行進行時或完成後檢閱執行結果。

      若要檢閱執行結果,請在圖形檢視中選擇個別狀態,然後選擇步驟詳細資訊窗格上的個別索引標籤,分別檢視每個狀態的詳細資訊,包括輸入、輸出和定義。如需您可以在執行詳細資訊頁面上檢視之執行資訊的詳細資訊,請參閱 執行詳細資訊概觀

    例如,選擇 Map 狀態,然後選擇 Map Run 以開啟 Map Run 詳細資訊頁面。在此頁面上,您可以檢視分散式映射狀態的所有執行詳細資訊,以及啟動的子工作流程執行。如需此頁面的相關資訊,請參閱檢視地圖執行

隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。