使用分散式地圖處理 Amazon S3 儲存貯體中的資料 - AWS Step Functions

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

使用分散式地圖處理 Amazon S3 儲存貯體中的資料

此範例專案示範如何使用「分散式地圖」狀態來處理大型資料,例如分析歷史氣象資料,以及識別每月地球平均溫度最高的氣象站。氣象資料會記錄在超過 12,000 個CSV檔案中,而這些檔案又存放在 Amazon S3 儲存貯體中。

此範例專案包含兩個名為分散式 S3 副本NOA資料和 P 的分散式地圖狀態rocessNOAAData。分散式 S3 副本NOA資料會重複執行名為的公用 Amazon S3 儲存貯體中的CSV檔案,noaa-gsod-pds並將其複製到您 AWS 帳戶的. P 會rocessNOAAData重複複製的檔案,並包含執行溫度分析的 Lambda 函數。

範例專案會先透過呼叫 ListObjectsV2 API 動作來檢查 Amazon S3 儲存貯體的內容。根據回應此呼叫所傳回的金鑰數目,範例專案會執行下列其中一項決定:

  • 如果索引鍵計數大於或等於 1,專案會轉換為 P rocessNOAAData 狀態。此「分散式地圖」狀態包含一TemperatureFunction個名為的Lambda函數,可尋找每月平均溫度最高的氣象站。這個函數會傳回一個字典,其中包含氣象站做為值的資訊的字典。year-month

  • 如果傳回的金鑰計數不超過 1,分散式 S3 copy NOA Data 狀態會列出公用儲存貯體中的所有物件,noaa-gsod-pds並以 100 個批次反覆方式將個別物件複製到帳戶中的另一個儲存貯體。內聯映射執行對象的迭代複製。

    複製所有物件後,專案會轉換為 P rocessNOAAData 狀態以處理氣象資料。

示例項目最終轉換為減速器Lambda函數,該函數對TemperatureFunction函數返回的結果執行最終聚合,並將結果寫入Amazon DynamoDB表中。

使用分散式地圖,您一次最多可以執行 10,000 個 parallel 子工作流程執行。在此範例專案中,P rocessNOAAData 分散式地圖的最大並行設定為 3000,將其限制為 3000 個 parallel 子工作流程執行。

此範例專案會建立狀態機器、支援 AWS 資源,並設定相關IAM權限。探索此範例專案,瞭解如何使用分散式地圖來協調大規模的 parallel 工作負載,或將其用作您自己專案的起點。

重要

此範例專案僅在美國東部 (維吉尼亞北部) 區域提供。

AWS CloudFormation 模板和其他資源

您可以使用 CloudFormation 範本來部署此範例專案。此範本會在您的中建立下列資源 AWS 帳戶:

  • Step Functions 狀態機。

  • 狀態機器的執行角色。此角色授予狀態機器存取其他資源所需的權限 AWS 服務 ,例如 Lambda 函數的叫用動作。

  • 一個名為的 Amazon S3 桶NOAADataBucket。此值區包含含有氣象資料的CSV檔案。

  • 命名為的 Lambda 函數ReducerFunction,可執行氣象資料的最終彙總,並將結果寫入 Amazon DynamoDB 表格。

  • 減速器 Lambda 函數的執行角色。此角色授與存取其他的函數權限 AWS 服務。

  • 名為ResultsBucket用於存放天氣分析結果的 Amazon S3 輸出儲存貯體。

  • 名為的 DynamoDB 表格ResultsDynamoDBTable,其中包含由. ReducerFunction

  • 命名為的 Lambda 函數TemperatureFunction,用於查找最高的每月平均溫度。

  • Lambda 函數的執行角色。此角色授與存取其他的函數權限 AWS 服務。

  • 儲存與狀態機器執行歷程 CloudWatch 記錄相關資訊的記錄群組。

重要

每項服務均需收取標準費用。

步驟 1:建立狀態機器並佈建資源

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

  2. Distributed Map to process files in S3在搜尋方塊中輸入,然後選擇「分散式對應」,從傳回的搜尋結果中處理 S3 中的檔案

  3. 選擇 Next (下一步) 繼續。

  4. Step Functions 會列出您選取的範例專案中 AWS 服務 使用的項目。它也會顯示範例專案的工作流程圖表。將此項目部署到您的項目中, AWS 帳戶 或將其用作構建自己的項目的起點。根據您想要的進行方式,選擇 [執行示範] 或 [在其上建置]。

    如需將為此範例專案建立之資源的相關資訊,請參閱AWS CloudFormation 模板和其他資源

    下圖顯示了分散式地圖在 S3 範例專案中處理檔案的工作流程圖:

    處理 S3 範例專案中檔案的分散式對應工作流程圖。
  5. 選擇「使用範本」繼續進行選取。

  6. 執行以下任意一項:

    • 如果您選取「在其上建立」,Step Functions 會建立工作流程原型,但會在工作流程定義中部署資源,因此您可以繼續建置工作流程原型。

      在工作流 Studio 中設計模式,您可以將其他狀態納入您的工作流程原型。或者,您可以切換程式碼模式至使用整合的程式碼編輯器,從 Step Functions 主控台編輯狀態機器的 Amazon States Language (ASL) 定義。

      重要

      您可能需要更新範例專案中使用之資源的預留位置 Amazon 資源名稱 (ARN),才能執行工作流程

    • 如果您選取 [執行示範],Step Functions 會建立唯讀專案,該專案會使用 AWS CloudFormation 範本將該範本中的 AWS 資源部署到您的 AWS 帳戶. 您可以選擇「程式碼」模式來檢視狀態機定義。

      選擇部署並執行以部署專案並建立資源。

      請注意,建立資源和IAM權限最多可能需要 10 分鐘的時間。部署資源時,您可以開啟 AWS CloudFormation Stack ID 連結以查看正在佈建的資源。

      建立完所有資源之後,您應該會在主控台的 [狀態機器] 頁面上看到專案。

      重要

      CloudFormation 範本中使用的每項服務可能會收取標準費用。

步驟 2:運行狀態機

佈建和部署所有資源之後,您可以執行狀態機器。

  1. 在 [狀態電腦] 頁面上,選擇您的範例專案。

  2. 在範例專案頁面上,選擇 [開始執行]。

  3. 在 [開始執行] 對話方塊中,執行下列動作:

    1. (選擇性) 以JSON格式輸入輸入值以執行範例專案。

      如果您選擇執行示範,則不需要提供任何執行輸入。

      注意

      如果您部署的示範專案包含預先填入的執行輸入資料,請使用該輸入來執行狀態機器。

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

    3. (選擇性)「Step Functions」主控台會將您導向標題為執行 ID 的頁面。此頁面稱為「執行詳細資訊」頁面。在此頁面上,您可以在執行進行時或完成之後複查執行結果。

      執行完成後,請在「圖形」檢視中選擇個別的狀態,然後選擇步驟詳情窗格上的個別索引標籤,分別檢視每個狀態的詳細資訊,包括輸入、輸出和定義。

    4. (選擇性) 檢閱匯出至 Amazon S3 儲存貯體的執行結果。這些結果包括資料,例如執行輸入和輸出ARN,以及執行狀態。如需詳細資訊,請參閱ResultWriter (地圖)