- 應用程式整合›
- AWS Step Functions›
- 常見問答集
AWS Step Functions 常見問答集
概觀
什麼是 AWS Step Functions?
AWS Step Functions 是一項全受管服務,可讓您使用視覺化的工作流程,更輕鬆地協調分散式應用程式與微型服務的元件。使用可執行獨立功能的個別元件建立應用程式,可協助您更輕鬆地擴展及迅速變更應用程式。
Step Functions 是協調元件與逐步執行應用程式函數的可靠方式。Step Functions 提供圖形式主控台,可將應用程式元件安排並視覺化成一連串的步驟。這讓建立和執行多步驟應用程式的工作變得更簡單。
Step Functions 會自動觸發和追蹤每個步驟,並在發生錯誤時重試,讓您的應用程式能如預期依序執行。Step Functions 會記錄每個步驟的狀態,一旦有哪個環節出了差錯,您就能更迅速地診斷並偵錯問題。您甚至不必撰寫程式碼,就能變更及新增步驟,所以您能更輕鬆地開發應用程式,並加快創新速度。
設計應用程式時使用協調有哪些好處?
將應用程式分解為服務元件 (或步驟),可確保一個元件發生故障不會導致整個系統崩潰。每個元件獨立擴展,並且可以更新該元件,而無須在每次變更後重新部署整個系統。
服務元件的協同運作包括根據應用程式的邏輯流程來管理執行相依性、排程及並行。在這類應用程式中,您可以利用服務協同運作來這樣做以及處理失敗情形。
常見的 Step Functions 使用案例有哪些?
Step Functions 可協助處理能分成一系列步驟的任何運算問題或業務流程。它還可用於建立端對端工作流,以管理具有相依性的任務。常用案例包括:
- 資料處理:將來自多個資料庫的資料整合到統一報告中,將大型資料集細化並減少為有用的格式,使用高並行工作流程反覆運作和處理 Amazon Simple Storage Service (S3) 儲存貯體中的數百萬個檔案,或協調多步驟分析和機器學習工作流程
- 建置無伺服器生成式 AI 應用程式:善用 Step Functions 來協調與 Amazon Bedrock 基礎模型的互動、進行提示鏈結、微調,以及擴充 220 多項 AWS 服務的功能
- DevOps 和 IT 自動化:建立用於持續整合和持續部署的工具,或建立自動回應基礎設施變化的事件驅動應用程式
- 電子商務:自動化關鍵任務業務流程,例如訂單填寫和庫存追蹤
- Web 應用程式:實作健全的使用者註冊流程和登入身份驗證
AWS Step Functions 如何運作?
在您使用 AWS Step Functions 時,您可以定義狀態機器。狀態機器將工作流程描述為一系列步驟,並描述它們關係以及它們的輸入和輸出。狀態機器包含許多狀態,每個狀態代表工作流程圖中的步驟。
狀態可以執行工作,做出選擇,傳遞參數,啟動平行執行,管理超時或終止工作流程 (可能成功也可能失敗)。
視覺化主控台會依照執行順序自動繪製每個狀態,以便更輕鬆地設計多步驟應用程式。主控台會反白顯示每個步驟的即時狀態,並提供每個執行的詳細歷史記錄。
如需更多資訊,請參閱 Step Functions 開發人員指南中的 Step Functions 運作方式。
Step Functions 如何連線至我的資源?
您可以使用服務整合來協調任何 AWS 服務,也可以使用活動任務來協調任何自主管理的應用程式元件。
服務整合可協助您建構對 AWS 服務的呼叫並將回應包含到您的工作流程中。AWS–SDK 服務整合可協助您直接從您的工作流程中叫用來自 200 多項服務的 9,000 多個 AWS API 動作之一。
最佳化服務整合進一步簡化了 AWS Lambda、Amazon Elastic Container Service (ECS)、AWS Glue 或 Amazon EMR 等常見服務的使用,其功能包括 IAM 政策產生和自動等待非同步任務完成的 RunAJob 模式。
活動任務與您在所選位置中 (包括在 Amazon Elastic Compute Cloud (EC2)、Amazon ECS、行動裝置或內部部署伺服器上) 執行的活動工作整合。活動工作者就工作輪詢 Step Functions,從 Step Functions 中獲取任何輸入,使用您的程式碼執行工作並返回結果。由於活動工作者請求工作,因此可更輕鬆地使用部署在防火牆後面的工作者。
Step Functions 狀態機器可以包含服務整合和活動任務的組合。Step Functions 應用程式還可以結合在資料中心執行的活動工作者與在雲端中執行的服務任務。資料中心的工作者與任何雲端服務工作者會繼續照常執行。
如何開始使用 Step Functions?
您可以透過多種方式開始使用 Step Functions:
- 在 Step Functions 主控台中瀏覽範例專案
- 閱讀 Step Functions 開發人員指南
- 嘗試使用我們的 10 分鐘教學
Step Functions 使用何種語言?
AWS Step Functions 狀態機使用宣告式 Amazon States Language 在 JSON 中定義。
建立活動工作者時,您可以使用任何程式設計語言,只要您能夠使用 Web 服務 API 與 Step Functions 通訊即可。
為了方便,您可以使用適合您所選語言的 AWS 開發套件。Lambda 支援以 Node.js (JavaScript)、Python、Golang (Go) 和 C# (使用 .NET Core 執行時間和其他語言) 編寫的程式碼。如需 Lambda 程式設計模型的更多資訊,請參閱 Lambda 開發人員指南。
我的工作流程含有一些標準工作流程的屬性,也有一些 Express 工作流程的屬性。我要如何取得充分利用這兩者呢?
您可以組合兩種工作流程類型:
- 透過將快速工作流程作為標準工作流程的子工作流程來執行︰Express 工作流程是從父協同運作工作流程中的任務狀態叫用的,並從父項來看 Express 工作流程整體上為成功或是失敗。這將受該任務的父重試政策而定。
- 透過從 Express 工作流中呼叫 Express 工作流程,只要所有工作流程不超過父工作流程的持續時間限制︰如果您的使用案例組合了長時間執行或只執行一次和短期高比率的步驟,您可選擇以此方式分解工作流程。
Step Functions 如何支援平行處理?
Step Functions 包括用於動態平行處理的映射狀態。映射狀態有兩種操作模式,內嵌和分散,這兩種模式對項目集合執行一組相同的步驟。在內嵌模式下,映射可支援 40 個平行分支的並行和 25,000 個事件的執行歷史限制,或工作流程中約 6,500 個狀態轉換。在分散模式下,您可以並行執行多達 10,000 個平行分支。分散式映射已針對 Amazon S3 進行最佳化,可協助您更輕鬆地反覆運作 S3 儲存貯體中的物件。請參閱整合部分的常見問答集。分散式映射的反覆運作被拆分為平行執行,以協助您克服負載和執行歷史限制。您還可以選擇每次反覆運作是由等冪的標準工作流程,還是由速度更快、成本更低但並非等冪的快速工作流程執行。進一步了解映射狀態。
如何在 AWS Step Functions 中指派和參考變數?
您現在可以使用新的「指派」欄位來定義工作流程變數,並稍後使用 $varName 語法參考這些變數。如果 StateK 需要參考早期 StateA 產生的資料,則必須明確地將資料傳遞通過所有中間狀態 (不使用變數);而使用變數時,則將值指派給 StateA 中的變數,然後在 StateK 中參考該變數。
什麼是 JSONata?
JSONata 是一種用於 JSON 資料的開放原始碼資料查詢/轉換語言,與 JSONPath 類似,但其可以執行更強大的操作,例如日期和時間產生以及數學計算。使用該語言,您可以採用精簡而強大的標記法表達複雜的查詢。JSONata 提供內建的運算子和函數來操作和組合資料,並且可以使用熟悉的 JSON 物件和陣列語法將查詢結果格式化為任何 JSON 輸出結構。
我是否可以在現有的工作流程中使用變數和 JSONata?
是。透過指派變數,可以將其新增至任何現有工作流程。透過將 "QueryLanguage":"JSONata" 宣告為個別狀態或整個工作流程的查詢語言,可在任何現有工作流程中使用 JSONata 的增強資料轉換。目前擁有生產工作負載的客戶可以在現有工作流程中利用變數和 JSONata,並且可以選擇在新工作流程中使用改進的資料指令。變數和 JSONata 引入的功能共同套用,為新客戶在目前的 ASL 版本中加入 Step Functions 提供了更簡單的學習路徑。藉助此方法,所有未來的 Step Functions 功能都將可供所有客戶使用,而無需他們升級工作流程以使用新版本的 ASL。
如何使用 JSONata 操作資料?
您將使用 JSONata,而不是像目前一樣使用 JSONPath 和內建函數來執行資料選取與轉換。要使用 "QueryLanguage":"JSONata" 編寫 JSONata 表達式,請將該表達式括在 {% %} 中,如下所示:"{% JSONata expression %}"。例如,您可以按如下所示建構今天的日期:"DateStamp": "{% $now() %}"。
"QueryLanguage":"JSONata" 如何簡化資料處理?
JSONPath 使用五個主要欄位 (InputPath、Parameters、ResultSelector、ResultPath 和 OutputPath) 的不同組合來查詢和轉換每個狀態內的資料,這對開發人員提出了挑戰。藉助 JSONata,您現在可以選擇使用 "QueryLanguage":"JSONata",並以兩個新欄位 (Arguments 和 Output) 取代這五個欄位。新的 Arguments 欄位提供了建構值以傳送至 API 或子工作流程的附加功能,而新的 Output 欄位提供了建構狀態輸出的附加功能。這兩個欄位均接受 JSONata 進行資料操作。"QueryLanguage":"JSONata" 提供了一組簡化的規則,其中不再將「$」約定用於欄位名稱,而是將 JSONata 表達式括在 {% %} 中。您現在可以使用新的 Condition 欄位在單一行上寫入「選擇」狀態條件。Condition 欄位接受布林值或字串值,這些值必須是 JSONPath 或 JSONata 表達式,具體取決於 QueryLanguage 設定。
比較
何時應使用 AWS Step Functions?Amazon Simple Queue Service (SQS)?
當您開發可高度擴展和可稽核的應用程式時,若需協調服務元件,則應使用 AWS Step Functions。當您需要可靠、可高度擴展、託管的佇列以便在服務之間傳送、存放和接收訊息時,則使用 Amazon Simple Queue Service (Amazon SQS)。
- Step Functions 可追蹤應用程式中的所有任務和事件,Amazon SQS 則需要自行實作應用程式層級追蹤,特別在應用程式使用多個佇列時。
- Step Functions 主控台和可見性 API 提供以應用程式為中心的檢視,讓您可以搜尋執行,深入檢視執行的詳細資訊以及管理執行。SQS 需要實作額外功能。
- Step Functions 提供了一些可加速應用程式開發的功能,例如,在各任務之間傳送資料以及分發任務的彈性,而 SQS 會要求您實現應用程式級功能。
- Step Functions 具有開箱即用的功能來建置工作流程,以協調您的分散式應用程式。SQS 允許您建置基本的工作流程,但功能有限。
何時應使用 AWS Step Functions?Amazon Simple Workflow Service (SWF)?
您應該考慮為所有新應用程式使用 Step Functions,因為它提供更具生產力和更靈活的方法,利用視覺化工作流程來協調應用程式元件。如果您需要外部信號來介入程序,或是想要啟動子程序將結果傳回父程序,則應考慮使用 Amazon Simple Workflow Service (Amazon SWF)。
利用 SWF 就不需要以宣告式 JSON 撰寫狀態機器,而是撰寫決策程式,將活動步驟與決策步驟區分開來。這讓您可以完全控制協同運作邏輯,但會增加開發應用程式的複雜程度。您可以使用所選的程式設計語言來撰寫決策程式,或是以 Flow Framework 來使用程式設計結構為您建構非同步互動。
Step Functions 的 HTTPS 端點整合如何與 Amazon EventBridge API destination 關聯?
Amazon EventBridge 是一種無伺服器服務,可使用事件將應用程式元件連接在一起,讓開發人員更輕鬆建置可擴充的事件導向應用程式。API Destinations 是 EventBridge 的一項功能,可讓您建立各種規則,將事件轉寄至第三方端點,以將事件生產者和取用者分離。
AWS Step Functions 的 HTTPS 端點整合可讓您調用以 HTTPS 為基礎的服務,並接收回應,該回應可用於根據業務邏輯來控制執行流程。Amazon EventBridge 專注於路由事件,而 Step Functions 則專注於工作流程的協同運作和狀態管理。EventBridge API Destinations 與 Step Functions 的 HTTPS 端點整合可支援身分驗證連線,因此您可在各項服務中重複使用身分驗證憑證。這兩項服務可結合使用,以建置高度可擴展且穩健的分散式應用程式。
整合
Step Functions 如何連線和協調其他 AWS 服務?
使用 Step Functions 建立的工作流程可以透過服務整合連線和協調 200 多項 AWS 服務。 例如,您可以:
- 叫用 AWS Lambda 函數
- 執行 ECS 或 AWS Fargate 任務
- 從 Amazon DynamoDB 表中獲取現有項目或將新項目放入 DynamoDB 表中
- 提交 AWS Batch 任務並等待其完成
- 調用 Amazon Bedrock 基礎模型
- 將訊息發佈到 SNS 主題
- 將訊息傳送到 Amazon SQS 佇列
- 啟動 AWS Glue 任務執行
- 建立 Amazon SageMaker 任務以訓練機器學習模型或批次轉換資料集
如需了解使用 Step Functions 連線至其他 AWS 服務的更多資訊,請參閱 Step Functions 開發人員指南。您還可以在執行應用程式的狀態機器中建立任務,請參閱概觀部分中的常見問答集:Step Functions 如何連線至我的資源?
Step Functions 如何與第三方應用程式整合?
使用 AWS Step Functions 的 HTTPS 端點整合,您可直接與以 HTTP 為基礎的服務整合,包括 SaaS 應用程式。使用視覺化介面,您可建置和協調由 AWS 服務和 SaaS 應用程式組成的分散式應用程式。
如何測試、分析我的執行或偵錯?
您可使用 TestState API 來測試工作流程的單一步驟,從而實現更快的意見回饋週期以加速開發。TestState 可讓您直接呼叫服務和端點,修改輸入以模擬不同案例,並檢閱回應。您可透過 Workflow Studio 存取 TestState,讓您在建置時輕鬆地進行測試,而無需部署工作流程。TestState 接受單一狀態定義和輸入,然後同步傳回狀態輸出,以及進行中間資料轉換。執行工作流程之後,您可透過 Amazon CloudWatch Logs、AWS X-Ray,以及直接在 Step Functions 主控台中,以視覺化操作人員體驗來分析執行並偵錯,進而協助您快速識別問題區域。
Step Functions 如何協助我處理 Amazon S3 中的大型資料集?
您可以在分散模式下使用映射狀態建立工作流程,以執行日誌、媒體檔案、銷售交易或 IoT 感應器資料等資料的大規模處理。Step Functions 將反覆運作項目,並立即啟動平行工作流程執行,從而允許您大規模建置隨需資料處理。分散式映射狀態已經過最佳化,可與 S3 配合使用。您可以指定帶有篩選條件的 S3 儲存貯體、S3 清單檔案、JSON 集合,或存放在 S3 中的 CSV 檔案做為您的工作流程的輸入。此外,您還可以針對分散式映射的執行輸出指定 S3 儲存貯體。
Step Functions 如何與 Amazon API Gateway 搭配運作?
您可以將 Step Functions API 與 Amazon API Gateway 關聯,以便在將 HTTPS 請求傳送到您定義的 API 方法時,這些 API 會叫用狀態機器。
您可以使用 API Gateway API 啟動協調分散式後端應用程式元件的 Step Functions 狀態機器,並整合人工活動任務到應用程式的步驟中,例如批准請求和回應。
也可以向應用程式使用的服務 API 發出無伺服器非同步呼叫。如需更多資訊,請參閱我們的教學:使用 API Gateway 建立 Step Functions API。
AWS Step Functions 如何與 Amazon EventBridge 配合使用?
編排和協同運作是分散式服務兩種不同模型相互通訊方式。在協同運作中,通訊受到更嚴格的控制,協同運作服務 Step Functions 會協調叫用服務的互動和順序。
編排無需嚴格控制即可實現通訊。使用 Amazon EventBridge,無須集中協調事件即可在服務之間流動。許多應用程式針對不同的使用案例同時使用編排和協同運作。
您可以結合使用 Step Functions 和 EventBridge 的方式範例包括傳送事件或使用 EventBridge Scheduler 建立排程以觸發 AWS Step Functions 工作流程,然後在工作流程的不同步驟發出事件。
什麼是 AWS Step Functions 與AWS Lambda
AWS Lambda 是一種無伺服器、事件推動的運算服務,可讓您針對幾乎任何類型的應用程式或後端服務執行程式碼,不必佈建或管理伺服器。Step Functions 是一種無伺服器協同運作服務,可讓您輕鬆地將多個 Lambda 函數協調為易於偵錯和變更的彈性工作流程。Step Functions 將透過為您觸發和追蹤您的應用程式的每個步驟,來使 Lambda 函數不受其他邏輯的影響。
AWS Step Functions 是無伺服器服務嗎?
是,Step Functions 是一種無伺服器協同運作服務。為了因應不斷變化的工作流程,Step Functions 會為您自動擴展操作及基本運算來執行應用程式的步驟。Step Functions 具有內容的容錯能力,可在各區域中跨多個可用區域維護服務容量,保護應用程式不受個別機器或資料中心故障的影響。這可協助確保服務本身與其運作的應用程式工作流程都有高可用性。
Step Functions 提供依用量計費帳單模式,以提高敏捷性和最佳化成本。進一步了解 Step Functions 定價。
Step Functions 的日誌和監控如何工作?
AWS Step Functions 將指標傳送到 Amazon CloudWatch 和 AWS CloudTrail 以進行應用程式監控。CloudWatch 可收集和追蹤指標、設定警示,以及自動對 AWS Step Functions 變更做出反應。
CloudTrail 將 Step Functions 的所有 API 呼叫捕獲為事件,包括來自 Step Functions 主控台的呼叫以及對 Step Functions API 的程式碼呼叫。Step Functions 還支援工作流程中每個整合服務的 CloudWatch Events 受管規則,並將根據需要在您的 AWS 帳戶中建立和管理 CloudWatch Events 規則。
如需更多資訊,請參閱 Step Functions 開發人員指南中的監控和記錄。
如果 Express 工作流程因為用盡重試或未受管的例外情況而失敗,會有什麼情況發生?
透過預設,Express 工作流程會對 CloudWatch Logs 報告所有結果,包含工作流程輸入、輸出與完成的步驟。您可以選取不同層級的日誌,只用來記錄錯誤,並且您可以選擇不去紀錄輸入與輸出。用盡重試或發生不受管例外情況的工作流程,應該要從頭開始重新執行。
Step Functions 如何協助您建置生成式 AI 應用程式?
Step Functions 與 Amazon Bedrock 進行了最佳化整合。您可使用自然語言,直接透過 Step Functions 的工作流程調用 Bedrock 的基礎模型。這讓您能夠執行下列操作:
- 使用生成式 AI 功能,擴充 Step Functions 處理的資料,以減少處理資料的複雜性,例如文字總結、影像產生或個人化。
- 從資料庫擷取資訊,例如最新的產品定價和使用者個人化資料,並使用 Step Functions 內部函數將其注入提示中,確保 LLM 使用最新的資料來改善回應的準確性。
- 透過讓 Step Functions 瀏覽文件、擷取資料、將文件分塊,然後將資料從數位文字轉換為內嵌項目,來產生內嵌項目,以做為多步驟程序。這可排程為定期程序。
- 使用 Step Function 工作流程進行提示鏈結。您可協調多次 LLM 呼叫,並為鏈結的每個階段選擇最佳模型,形成自訂處理階段鏈結,從基礎模型中策劃更具情境感知和準確的回應。
- 與生成式 AI 工作流程建立人工參與 (HITL) 互動,以調節答案來避免幻覺,或建置邏輯來處理基礎模型不支援的回應。
安全性
我能否在不連上網際網路的情況下存取來自 Amazon VPC 幕後資源的 Step Functions?
Step Functions 也使用 AWS PrivateLink 支援 VPC 端點 (VPCE)。你可從啟用 VPC 的 AWS Lambda 函數和其他 AWS 服務存取 Step Functions,而無需穿越公共網際網路。
如需了解詳細資訊,請參閱《Step Functions 開發人員指南》中的 Step Functions 的 Amazon VPC 端點。
合規
Step Functions 支援哪些合規標準?
Step Functions 符合 HIPAA、FedRAMP、SOC、GDPR 以及其他常見的合規標準。請參閱 AWS 雲端安全網站,取得所支援的合規標準明細表。