本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
本教學課程可協助您在分散式模式下開始使用 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 的拖放功能來建立工作流程原型。
開啟 Step Functions 主控台
,然後選擇建立狀態機器。 在選擇範本對話方塊中,選取空白。
-
選擇選取以在 中開啟工作流程 Studio設計模式。
從流程索引標籤中,拖曳映射狀態,並將其拖放至標示為「拖曳」的第一個狀態的空白狀態。
在組態索引標籤中,針對狀態名稱,輸入
Process data
。從動作索引標籤中,拖曳AWS Lambda 叫用 API 動作,並將其放入程序資料狀態。
-
將AWS Lambda 調用狀態重新命名為
Process CSV data
。
步驟 2:設定映射狀態的必要欄位
在此步驟中,您可以設定分散式映射狀態的下列必要欄位:
ItemReader – 指定資料集及其
Map
狀態可從中讀取輸入的位置。ItemProcessor – 指定下列值:
ProcessorConfig
– 將Mode
和EXPRESS
分別ExecutionType
設為DISTRIBUTED
和 。這會設定Map
狀態的處理模式,以及分散式映射狀態啟動之子工作流程執行的工作流程類型。StartAt
– Map 工作流程中的第一個狀態。States
– 定義映射工作流程,這是一組在每個子工作流程執行中重複的步驟。
ResultWriter – 指定 Step Functions 寫入分散式映射狀態結果的 Amazon S3 位置。
重要
請確定您用來匯出 Map Run 結果的 Amazon S3 儲存貯體與您的狀態機器位於相同 AWS 帳戶 和 AWS 區域 下。否則,您的狀態機器執行會失敗並出現
States.ResultWriterFailed
錯誤。
若要設定必要欄位:
選擇處理資料狀態,然後在組態索引標籤中執行下列動作:
針對處理模式,選擇分散式。
針對項目來源,選擇 Amazon S3,然後從 S3 項目來源下拉式清單中選擇 S3 中的 CSV 檔案。 S3
執行下列動作來指定 CSV 檔案的 Amazon S3 位置:
對於 S3 物件,從下拉式清單中選取輸入儲存貯體和金鑰。
針對儲存貯體,輸入包含 CSV 檔案的 Amazon S3 儲存貯體名稱。例如:
amzn-s3-demo-source-bucket
。針對金鑰,輸入您儲存 CSV 檔案的 Amazon S3 物件名稱。您也必須在此欄位中指定 CSV 檔案名稱。例如:
csvDataset/ratings.csv
。
對於 CSV 檔案,您還必須指定資料欄標頭的位置。若要這樣做,請選擇其他組態,然後對於 CSV 標頭位置,如果 CSV 檔案的第一列是標頭,則保留第一列的預設選擇。否則,請選擇指定以在狀態機器定義中指定標頭。如需詳細資訊,請參閱
ReaderConfig
。針對子執行類型,選擇 Express。
在匯出位置中,若要將映射執行結果匯出至特定 Amazon S3 位置,請選擇匯出映射狀態的輸出至 Amazon S3。
請執行下列操作:
對於 S3 儲存貯體,從下拉式清單中選擇輸入儲存貯體名稱和字首。
針對儲存貯體,輸入您要匯出結果的 Amazon S3 儲存貯體名稱。例如:
mapOutputs
。對於字首,輸入您要將結果儲存到其中的資料夾名稱。例如:
resultData
。
步驟 3:設定其他選項
除了分散式映射狀態的必要設定之外,您也可以指定其他選項。這些可以包括並行子工作流程執行的數目上限,以及匯出Map
狀態結果的位置。
選擇處理資料狀態。然後,在項目來源中,選擇其他組態。
請執行下列操作:
選擇使用 ItemSelector 修改項目,為每個子工作流程執行指定自訂 JSON 輸入。
輸入下列 JSON 輸入:
{
"index.$":
"$$.Map.Item.Index"
,"value.$":
"$$.Map.Item.Value"
}如需如何建立自訂輸入的資訊,請參閱
ItemSelector (地圖)
。
在執行期設定中,針對並行限制,指定分散式映射狀態可以啟動的並行子工作流程執行次數。例如,輸入
100
。-
在瀏覽器上開啟新的視窗或索引標籤,並完成您將在此工作流程中使用的 Lambda 函數組態,如 中所述步驟 4:設定 Lambda 函數。
步驟 4:設定 Lambda 函數
重要
確保您的 Lambda 函數與您的 AWS 區域 狀態機器位於相同位置。
-
開啟 Lambda 主控台
,然後選擇建立函數。 -
在 Create function (建立函數) 頁面上,選擇 Author from scratch (從頭開始撰寫)。
-
在基本資訊區段中,設定您的 Lambda 函數:
-
針對函數名稱,請輸入
distributedMapLambda
。 -
針對 Runtime (執行時間),選擇 Node.js 。
-
保留所有預設選項,然後選擇建立函數。
-
建立 Lambda 函數後,複製頁面右上角顯示的函數 Amazon Resource Name (ARN)。您需要在工作流程原型中提供此資訊。以下是範例 ARN:
arn:aws:lambda:us-east-2:123456789012:function:distributedMapLambda
-
-
複製 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 } };
-
選擇部署。函數部署後,請選擇測試以查看 Lambda 函數的輸出。
步驟 5:更新工作流程原型
在 Step Functions 主控台中,您將更新工作流程以新增 Lambda 函數的 ARN。
返回您建立工作流程原型的索引標籤或視窗。
選擇程序 CSV 資料步驟,然後在組態索引標籤中執行下列動作:
針對整合類型,選擇最佳化。
針對函數名稱,開始輸入 Lambda 函數的名稱。從顯示的下拉式清單中選擇函數,或選擇輸入函數名稱並提供 Lambda 函數 ARN。
步驟 6:檢閱自動產生的 Amazon States 語言定義並儲存工作流程
當您從動作和流程索引標籤將狀態拖放到畫布上時,Workflow Studio 會自動即時編寫工作流程的 Amazon States 語言定義。您可以視需要編輯此定義。
-
(選用) 在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" } } } }
-
為您的狀態機器指定名稱。若要執行此操作,請選擇 MyStateMachine 預設狀態機器名稱旁的編輯圖示。然後,在狀態機器組態中,在狀態機器名稱方塊中指定名稱。
針對本教學課程,輸入名稱
DistributedMapDemo
。 -
(選用) 在狀態機器組態中,指定其他工作流程設定,例如狀態機器類型及其執行角色。
在此教學課程中,請保留狀態機器組態中的所有預設選擇。
-
在確認角色建立對話方塊中,選擇確認以繼續。
您也可以選擇檢視角色設定以返回狀態機器組態。
注意
如果您刪除 Step Functions 建立的 IAM 角色,Step Functions 稍後無法重新建立該角色。同樣地,如果您修改角色 (例如,從 IAM 政策中的主體移除 Step Functions),Step Functions 稍後無法還原其原始設定。
步驟 7:執行狀態機器
執行是您狀態機器的執行個體,您可以在其中執行工作流程來執行任務。
-
在 DistributedMapDemo 頁面上,選擇開始執行。
-
在開始執行對話方塊中,執行下列動作:
-
(選用) 輸入自訂執行名稱以覆寫產生的預設值。
非 ASCII 名稱和記錄
Step Functions 接受包含非 ASCII 字元的狀態機器、執行、活動和標籤名稱。由於這類字元不適用於 Amazon CloudWatch,因此我們建議您僅使用 ASCII 字元,以便在 CloudWatch 中追蹤指標。
-
(選用) 在輸入方塊中,輸入 JSON 格式的輸入值來執行工作流程。
-
選擇 Start execution (開始執行)。
-
Step Functions 主控台會引導您前往標題為執行 ID 的頁面。此頁面稱為執行詳細資訊頁面。在此頁面上,您可以在執行進行時或完成後檢閱執行結果。
若要檢閱執行結果,請在圖形檢視中選擇個別狀態,然後選擇步驟詳細資訊窗格上的個別索引標籤,分別檢視每個狀態的詳細資訊,包括輸入、輸出和定義。如需您可以在執行詳細資訊頁面上檢視之執行資訊的詳細資訊,請參閱 執行詳細資訊概觀。
例如,選擇
Map
狀態,然後選擇 Map Run 以開啟 Map Run 詳細資訊頁面。在此頁面上,您可以檢視分散式映射狀態的所有執行詳細資訊,以及啟動的子工作流程執行。如需此頁面的相關資訊,請參閱檢視地圖執行。 -