AWS Step Functions 使用案例
您可以使用 AWS Step Functions 自動化哪些功能? 從以下的熱門使用案例獲得一些靈感。AWS Step Functions 使您能將商業流程作為組成工作流程的一系列步驟實施。
工作流程中的個別步驟可以叫用 Lambda 函數或具有一些商務邏輯的容器,更新 DynamoDB 之類的資料庫,或在該步驟或整個工作流程執行完畢時,發布訊息到佇列。
AWS Step Functions 有兩種工作流程選項 - Standard 和 Express。當您的商業流程預計會花超過五分鐘的時間在單一執行上,您應該選擇 Standard。一些長時間執行的工作流程的範例為 ETL 協同運作管道,或者當工作流程中有任何步驟需等待人工回覆以進行到下一步時。
Express 工作流程適合用時少於五分鐘的工作流程,是您需要高執行量 (例如:每秒鐘 100,000 次叫用) 時的理想選擇。您可以個別使用 Standard 或 Express 工作流程,也可以結合兩者一起使用,如此一來,一個較長 Standard 工作流程會觸發多個並行執行的較短 Express 工作流程。
無伺服器微型服務協同運作
結合 Lambda 函數來建置以 web 為基礎的應用程式
在此簡單的銀行系統範例中,驗證客戶名稱與地址後,會建立一個新的銀行帳號。該工作流程由兩個 Lambda 函數 CheckName 和 CheckAddress 開始,以任務狀態並行執行。一旦兩者皆已完成,該工作流程會執行 ApproveApplication Lambda 函數。您可以定義重試並掌握條款,以處理來自任務狀態的錯誤。您可以使用工作流程中由 Lambda 函數產生的預先定義的系統錯誤或處理自訂錯誤。因為您的工作流程程式碼負責處理錯誤,所以 Lambda 函數可以專注於商務邏輯並且使用較少程式碼。Express 工作流程更適合此範例,因為 Lambda 函數執行的任務加起來用時少於五分鐘,並且沒有外部相依性。
結合 Lambda 函數來建置以 web 為基礎的應用程式 - 需要人工核准
有時您可能需要靠人工來檢視並核准或拒絕商業流程中的某個步驟,讓工作流程繼續進行到下一步。當工作流程需要等待人工,或外部系統響應時間可能超過五分鐘的流程,我們會建議您使用 Standard 工作流程。在此,我們透過中間的通知核准者步驟擴展了新的開立帳戶流程。該工作流程從並行執行的 CheckName 和 CheckAddress 任務狀態開始。下一個 ReviewRequired 狀態為一個選擇狀態,其有兩個可能的路徑 - 傳送 SNS 通知電子郵件給 NotifyApprover 任務中的核准者,或者進入 ApproveApplication 狀態。NotifyApprover 任務狀態會寄送電子郵件給核准者,並且在繼續進行到下一個選擇狀態「已核准」前,等待回應。根據核准者的決定,透過 Lambda 函數核准或拒絕帳戶申請,
叫用商業流程以應對使用 Express 工作流程的事件
在此範例中,自訂 Eventbridge 匯流排上的事件滿足一條規則,並叫用 Step Functions 工作流程當作目標。假設您有一個自訂客戶服務應用程式,該應用程式需要處理過期的客戶訂閱。EventBridge 規則會接聽訂閱過期事件,並叫用目標工作流程進行回應。訂閱過期工作流程將停用過期訂閱擁有的所有資源,而不會刪除這些資源,並透過電子郵件通知客戶訂閱過期一事。可以使用 Lambda 函數並行完成這兩個動作。在工作流程結束時,會透過 Lambda 函數傳送一個新事件到事件匯流排,指示已處理訂閱過期。在這個範例中,我們建議使用 Express 工作流程。隨著您的業務擴展,並開始將更多事件放到事件匯流排上,Express 工作流程每秒叫用 100,000 個工作流程執行的能力非常強大。請參閱此 Github 儲存庫中的實際應用範例。
安全與 IT 自動化
協同運作 IAM 政策的安全事件反應
您可以使用 AWS Step Functions,建立回應包含手動核准步驟的工作流程的自動化安全事件。在此範例中,建立 IAM 政策時,會觸發 Step Functions 工作流程。工作流程將政策動作與受限動作的自訂清單相比較。工作流程會暫時回復策略,接著通知管理員並等待他們核准或拒絕。您可以延伸此工作流程以自動修復,例如將備用動作或限制動作套用到特定 ARN。請在這裡參閱範例的實際應用。
回應您的 AWS 帳戶中的營運事件
透過自動化對 AWS 資源的營運事件做出回應,您可以減少維護 AWS 雲端基礎設施的營運開銷。Amazon EventBridge 提供近乎即時的系統事件串流,以描述多數 AWS 資源的變化並提供通知。從此串流中,您可以建立規則以將特定事件路由到 AWS Step Functions、AWS Lambda,以及其他 AWS 服務,以進一步處理並自動化動作。在此範例中,基於來自 AWS Health 的事件觸發了 AWS Step Functions 工作流程。AWS 會主動監控已被公開暴露的 IAM 存取金鑰的熱門程式碼儲存庫網站。假設有一個 IAM 存取金鑰在 GitHub 上曝光了。AWS Health 會在與暴露的金鑰相關的 AWS 帳戶中產生一個 AWS_RISK_CREDENTIALS_EXPOSED 事件。設定的 Amazon Eventbridge 規則偵測此事件並叫用 Step Functions 工作流程。有了 AWS Lambda 函數的協助,工作流程接著會刪除暴露的 IAM 存取金鑰,匯總暴露的金鑰最近的 API 活動,並將摘要訊息傳送到 Amazon SNS 主題以通知訂閱者,按照此順序進行。請在這裡參閱範例的實際應用。
來源和目標 S3 儲存貯體之間的同步資料
您可以使用 Amazon S3 託管靜態網站,以及使用 Amazon CloudFront 將內容分發到全世界。身為網站擁有者,您可能會需要兩個 S3 儲存貯體來上傳網站資料:一個用於暫存和測試,另一個用於製作。您想要使用暫存儲存貯體中的所有變更,來更新製作儲存貯體,而不需在每次更新網站時,從頭開始建立新的儲存貯體。在此範例中,Step Functions 工作流程在兩個並行且獨立的循環中執行任務:一個循環將所有物件從來源儲存貯體複製到目標儲存貯體,但忽略目標儲存貯體中已存在的物件。第二個循環刪除在來源儲存貯體中找不到的目標儲存貯體中的任何物件。一組 AWS Lambda 函數執行各個步驟:驗證輸入、從來源和目標儲存貯體中取得物件列表,以及批次複製或刪除物件。在這裡參閱範例與其程式碼的詳細資訊。在這裡了解如何在您的狀態機器中建立執行的平行分支的更多資訊。
資料處理與 ETL 協同運作
建置串流資料的資料處理管道
在此範例中,Freebird 建置了一個資料處理管道,即時處理來自多個來源的 Webhook 資料,並且執行修改資料的 Lambda 函數。在這個使用案例中,來自好幾個第三方應用程式的 Webhook 資料,透過 Amazon API Gateway 傳送到 Amazon Kinesis 資料串流。AWS Lambda 函數從該 Kinesis 串流中提取資料,並觸發 Express 工作流程。此工作流程透過一系列步驟來驗證、處理和標準化此資料。最後,Lambda 函數會更新 SNS 主題,該主題透過 SQS 佇列觸發訊息到下游 Lambda 函數以進行後續步驟。您每秒最多可以叫用此工作流程 100,000 次,以擴展資料處理管道。
ETL 流程的自動化步驟
您可以使用 Step Functions 協同運作具有不同資料來源和目標的 ETL 流程的所有步驟。
在此範例中,每當新資料在來源 S3 儲存貯體中可用時,Step Functions ETL 工作流程就會重新整理 Amazon Redshift。Step Functions 狀態機器會初始化一個 AWS Batch 任務,並監控其完成或錯誤的狀態。AWS Batch 任務從來源 (例如:Amazon S3) 擷取 ETL 工作流程 .sql script,並透過 PL/SQL 容器重新整理目標 (例如:Amazon Redshift)。.sql 檔案包含資料轉換中的每一個步驟的 SQL 程式碼。您可以透過 EventBridge 事件或手動透過 AWS CLI 或使用 AWS SDK 甚至自定自動化指令碼,來觸發 ETL 工作流程。您可以透過觸發電子郵件的 SNS 提醒管理員,工作流程的任何步驟或工作流程結束時發生故障。該 ETL 工作流程就是您可以使用 Standard 工作流程的一個範例。請在這裡參閱此範例詳細資訊。您可以在這裡了解更多透過範例專案提交 AWS Batch 任務的相關資訊。
並行執行具有多個任務的 ETL 管道
擷取、轉換和載入 (ETL) 操作將原始資料轉換為有用的資料集,將資料轉變為可行的見解。
您可以使用 Step Functions 並行執行多個 ETL 任務,其中您的來源資料集可能在不同時間為可用狀態,並且每個 ETL 任務只有在其對應的資料集可用時才會觸發。這些 ETL 任務可由不同的 AWS 服務管理,例如 AWS Glue、Amazon EMR、Amazon Athena 或其他非 AWS 服務。
在此範例中,您在 AWS Glue 上執行兩個獨立的 ETL 任務,分別處理銷售資料集和行銷資料集。一旦兩個資料集都處理完之後,第三個 ETL 任務會整合之前 ETL 任務的輸出,以產生整合資料集。Step Functions 工作流程會等到資料在 S3 中可用為止。當主要工作流程按照排程啟動時,在 Amazon S3 儲存貯體上設定了一個 EventBridge 事件處理常式,以便在將銷售或行銷資料集檔案上傳到儲存貯體時,狀態機器可以觸發 ETL 任務 “ProcessSales Data” 或 “ProcessMarketingData”,觸發取決於哪一個資料集變成可用狀態。
在這裡參閱架構細節,在您的 AWS 帳戶中設定 ETL 協同運作架構。在這裡了解如何管理來自 Step Functions 的 AWS Batch 任務。
大規模資料處理
您可以使用 Step Functions 在資料集中重複使用超過數以千萬計的項目,例如 JSON 陣列、S3 中的物件清單或 S3 儲存貯體中的 CSV 檔案。您接著可以使用高並行性並行處理資料。
在此範例中,Step Functions 工作流程使用分散式模式中的對應狀態來處理 S3 儲存貯體中的 S3 物件列表。Step Functions 重複使用物件清單,接著啟動數千個同時執行的平行工作流程來處理項目。您可以使用運算服務,例如 Lambda,協助您以任何受支援的語言撰寫程式碼。您也可以從超過 220 種專用 AWS 服務中進行選擇,以將其包含在對應狀態工作流程中。一旦子工作流程執行完畢,Step Functions 就可以將結果匯出至 S3 儲存貯體,以供審查或進一步處理。
機器學習營運
執行 ETL 任務,並建立、訓練和部署機器學習模型
在此範例中,Step Functions 工作流程按照由 EventBridge 觸發的排程執行,一天會執行一次。透過檢查 S3 中是否有可用的新資料來開始工作流程。接下來,會執行 ETL 任務以轉換資料。之後,會使用 Lambda 函數在該資料上訓練和部署機器學習模型,觸發 SageMaker 任務並等待該任務完成之後,工作流程才會進入下一步。最後,工作流程會觸發 Lambda 函數,產生儲存到 S3 的預測。進行逐步流程,在這裡建立該工作流程。
使用 AWS Step Functions 資料科學 SDK 自動化機器學習
AWS Step Functions 資料科學 SDK 是一個開放原始碼程式庫,使您能夠使用 Amazon SageMaker 和 AWS Step Functions 建立處理和發布機器學習模型的工作流程。SDK 提供了 Python API,其涵蓋機器學習管道的每一個步驟 - 訓練、微調、轉換、模型和設定端點。您可以在 Python 和 Jupyter 筆記本中直接管理與執行這些工作流程。以下範例說明機器學習工作流程的訓練與轉換步驟。訓練步驟會啟動 Sagemaker 訓練任務並將模型成品輸出到 S3。儲存模型步驟使用來自 S3 的模型成品,在 SageMaker 上建立一個模型。轉換步驟會啟動 SageMaker 轉換任務。建立端點設定步驟會定義 SageMaker 上的端點設定。建立端點步驟會將已訓練的模型部署到設定的端點。在這裡參閱筆記本。
媒體處理
從 PDF 或影像擷取資料以進行處理
在此範例中,您將會學習如何整合 AWS Step Functions、AWS Lambda 和 Amazon Textract 來掃描 PDF 發票,以擷取發票文字和資料來處理付款。Amazon Textract 分析發票中的文字和資料,並透過 SNS、SQS 和 Lambda 為每個成功完成的任務觸發 Step Functions 工作流程。工作流程從一個 Lambda 函數開始,將成功的發票分析結果儲存到 S3。這會觸發另一個 Lambda 函數,處理分析過的文件,判斷是否可為這張發票處理付款,並在 DynamoDB 中更新資訊。如果該發票為可處理,工作流程會檢查發票是否已核准付款。如果尚未核准該發票,其會透過 SNS 通知審核人,以手動核准發票。如果該發票已核准,Lambda 函數會將已處理的發票存檔,並結束工作流程。在這裡參閱範例與其程式碼的詳細資訊。
使用大規模平行化對影片進行分割和轉碼
在此範例中,Thomson Reuters 建置了一個使用 AWS Step Functions 和 AWS Lambda 的無伺服器分割影片轉碼解決方案。他們每天需要盡快將大約 350 個新聞影片進行剪輯轉碼,每個影片剪輯需要分為 14 種格式。該架構採用 FFmpeg,其為一個開放原始碼音訊與影片編碼器,僅會依序處理媒體檔案。為了提升輸送量以帶來最佳客戶體驗,解決方案為使用 AWS Step Functions 和 Amazon S3 進行並行處理。每段影片會分割成 3 秒的片段,並行處理片段,並在最後集合起來。
第一個步驟是一個稱為 Locate 關鍵影格的 Lambda 函數,其會識別切割影片的所需資訊。分割影片 Lambda 函數接著會依據關鍵影格分割影片,並將片段儲存在一個 S3 儲存貯體中。接著 Lambda 函數會並行處理各個片段,並放入目標儲存貯體。狀態機器遵循處理流程,直到處理完所有 N 個片段。其接著會觸發一個最終的 Lambda 函數,該函數串連處理過的片段,並將影片成果儲存在 S3 儲存貯體中。
使用 Amazon MediaConvert 建置無伺服器影片轉碼管道
在此範例中,我們要學習如何協同運作 AWS Step Functions、AWS Lambda 和 AWS Elemental MediaConvert,以實現隨需內容的全受管轉碼功能。此範例適用於擁有大量或不同數量來源影片內容的公司,這些公司希望在雲端處理影片內容,或希望在未來將工作負載轉移到雲中。
隨需影片解決方案有三個子工作流程,由主要 Step Functions 工作流程觸發:
- 擷取:這有可能是 Express 工作流程。放進 S3 的來源檔案會觸發該工作流程以擷取資料。
- 處理:該工作流程著眼於影片的高度和寬度,並建立編碼設定檔。進行處理後,會透過 AWS Elemental MediaConvert 觸發編碼任務。
- 發布:最後一個步驟會檢查素材在目標 S3 儲存貯體中是否可用,並通知管理員此任務已完成。
開始使用 AWS Step Functions