使用 AWS Step Functions 和 Amazon CloudWatch Events

排定無伺服器工作流程

自動化對 AWS 帳戶中資源的營運事件做出回應可以幫助減少 AWS 雲端基礎設施的營運開銷。比如,如果您是 DevOps 工程師或 IT 經理,則可能希望自動化 ETL 任務資料同步安全性

要解決此難題,您可以按時間表執行無伺服器工作流程。Amazon CloudWatch Events 提供近乎即時的系統事件串流,以描述 AWS 資源的變化並提供通知。從此串流中,您可以建立規則以將特定事件路由到 AWS Step Functions,並叫用狀態機器以執行進一步處理。借助 AWS Step Functions,您可以協調多個 AWS 服務成為無伺服器的工作流程,以便您快速建立及更新自動化程序。

在本教學中,您將使用 Step Functions 來協調無伺服器工作流程以回應 CloudWatch 事件。首先,您將使用 AWS Step Functions 建立一個非常簡單的狀態機器。然後,您將使用 Amazon CloudWatch Events 設定每分鐘執行狀態機器的規則。雖然本教學按時間表叫用工作流程,但實際上可以將其與其他可產生事件的 AWS 服務整合。

在本教學中,您將使用 AWS Step FunctionsAmazon CloudWatch。這兩種服務都納入 AWS 免費方案。

本教學需要 AWS 帳戶

Step Functions 或 CloudWatch 無須額外付費。您在本教學建立的資源符合免費方案資格。 

進一步了解免費方案 >>


步驟 1.建立 AWS Identity and Access Management (IAM) 角色

AWS Step Functions 能執行程式碼並存取其他 AWS 資源 (例如,存放在 Amazon S3 儲存貯體內的資料)。為維護安全起見,您必須使用 AWS Identity and Access Management (IAM),授與 Step Functions 對這些資源的存取權。


a.在新的瀏覽器視窗中,開啟 AWS 管理主控台,讓此逐步指南保持開啟狀態。當畫面載入時,請輸入您的使用者名稱和密碼以開始使用。在搜尋列輸入 IAM,然後選取 IAM 開啟服務主控台。

(按一下以放大)


b.  按一下角色,接著選擇建立角色

(按一下以放大)


c.在選取受信任實體的類型頁面的 AWS 服務之下,選取清單中的 Step Functions,接著選取下一步:許可

(按一下以放大)


d.在附加許可政策頁面,選擇下一步:檢閱

(按一下以放大)


e.在檢閱頁面,為角色名稱輸入 step_functions_basic_execution,按一下建立角色

(按一下以放大)


f.新的 IAM 角色建立完成。

(按一下以放大)


步驟 2.建立 AWS Step Functions 狀態機器

在此步驟中,您將使用「傳遞」狀態建立一個獨立執行的簡單狀態機器。「傳遞」狀態只是將其輸入傳遞到其輸出,實際上並沒有執行任何工作。

在現實中,無伺服器工作流程可以完成您需要它做的任何事情。您可以協調多個 Lambda 函數來執行任務、進行決策等等。不過出於教學方便,我們將建立簡單的工作流程。


a.開啟 AWS Step Functions 主控台。Step Functions 提供了各種預先定義的狀態機器作為範本。在本教學中,您將使用 Hello World 範本建立狀態機器。在建立狀態機器頁面上,選取範本,然後選取 Hello world

(按一下以放大)


b.在詳細資訊部分,對於狀態機器的名稱,輸入 ScheduledWorkflow,然後在 IAM 角色下,選取 我將使用現有角色。在現有 IAM 角色下,選取您建立的 IAM 角色 step_functions_basic_execution

(按一下以放大)


c.Step Functions 會自動填寫狀態機器的名稱。它還使用狀態機器的 Amazon 狀態語言描述在狀態機器定義窗格填入資訊。有關如何定義狀態機器的更多資訊,請參閱狀態機器結構

讓我們對狀態機器進行一些簡單的修改:

在第 2 行和第 5 行,用 "Do Something" 取代 "HelloWorld"
在第 7 行,用 "Work complete!" 取代 "Hello World!"

然後,按一下視覺化工作流程旁邊的重新整理按鈕,以更新狀態機器架構圖來反映您的變更。

(按一下以放大)


d.選擇建立狀態機器。您的狀態機器現在可以執行了。

(按一下以放大)


步驟 3.建立 Amazon CloudWatch 事件規則

現在,您已經建立了狀態機器,您可以建立 Amazon CloudWatch Events 規則,以根據排程執行狀態機器。Amazon CloudWatch Events 會提供近乎即時的系統事件串流,說明 Amazon Web Services (AWS) 資源的變動情形。使用可以快速設定的簡單規則,您可以匹配事件並將其路由到一個或多個目標函數或串流。


a.打開另一個瀏覽器標籤。透過在搜尋列中輸入 CloudWatch 導覽到 CloudWatch Events 主控台。

(按一下以放大)


b.選擇事件,然後選擇建立規則。 

(按一下以放大)


c.步驟 1:建立規則頁面將顯示。在事件來源部分,選取排程。在固定頻率:中,輸入 1 並保持單位「分鐘」選定。

(按一下以放大)


d.在目標部分,選擇新增目標。從清單中選取 Step Functions 狀態機器,然後選取您的 ScheduledWorkflow 狀態機器。

選取設定輸入,然後選取匹配的事件。這樣,每次執行狀態機器執行個體時,會將 CloudWatch Event 的詳細資訊作為輸入傳遞給 Step Functions。

選取為此特定資源建立新的角色,然後按一下設定詳細資訊

(按一下以放大)


e.步驟 2:設定規則詳細資訊頁面將顯示。輸入 execute_state_machine 作為規則的名稱,保持為狀態啟用核取,然後選擇建立規則

規則建立完成並顯示規則頁面,其中列出了所有 CloudWatch Events 規則。

現在狀態機器將每分鐘執行一次。

(按一下以放大)


步驟 4.自訂狀態機器處理輸入和輸出的方式

接下來,您將自訂狀態機器處理輸入和輸出的方式。了解資訊如何在狀態之間流動,並學習如何篩選和操作這些資料,將幫助您有效地設計和實作 AWS Step Functions 中的工作流程。


a.返回到 Step Functions 主控台,您的 ScheduledWorkflow 狀態機器應該仍會顯示。按一下編輯

(按一下以放大)


b.在狀態機器定義視窗中,請參考狀態機器的第 7 行。「傳遞」狀態中的「結果」欄位指定應傳遞到下一個狀態的輸出。由於您的狀態機器只有一種狀態,因此訊息 "Work complete!" 將傳遞到工作流程的結束狀態。

您可能還記得,Step Functions 「傳遞」狀態只是將其輸入傳遞到其輸出。您可以使用 ResultPath 欄位來修改狀態的輸出。例如,您可以將狀態輸入替換為其產生的結果 (例如,「任務」狀態的 Lambda 函數輸出)。

要將狀態的輸入及其結果結合起來,請在第 7 行之後新增行並輸入:

"ResultPath": "$.taskresult",

這會將叫用狀態機器執行的 CloudWatch Event 的詳細資訊與「傳遞」狀態的輸出 (在本例中為 "Work complete!") 結合起來。如需詳細資訊,請參閱 Step Functions 中的輸入和輸出處理

(按一下以放大)


c.按一下儲存

(按一下以放大)


步驟 5.確認您的工作流程按預期工作

現在,您已啟用 CloudWatch Events 規則,CloudWatch 每分鐘觸發一次狀態機器工作流程的執行。在此步驟中,您將觀察這些執行,並驗證 Step Functions 已擷取 CloudWatch Event 的詳細資訊。


a.返回 Step Functions 主控台,按一下頁面頂部階層連結中的 ScheduledWorkflow

(按一下以放大)


b.在執行下,您可以觀察 CloudWatch Events 觸發的執行。您可以按一下整理按鈕來更新視窗,以觀察狀態機器的新執行。等待幾分鐘,以容許至少觸發兩個工作流程執行個體。

(按一下以放大)


c.在執行之一上按一下滑鼠右鍵,然後在新的瀏覽器標籤卡中打開連結。對狀態機器的另一個執行重複此操作。

在每個標籤上,按一下視覺化工作流程窗格中的「執行操作」狀態,以在右側的 Step 詳細資訊窗格填入資訊。

按一下輸入,您可以從 CloudWatch 查看匹配事件的詳細資訊。注意事件之間的差異,例如 "id" 和 "time" 欄位。

(按一下以放大)


d.在每個標籤上,展開 Step 詳細資訊窗格下的輸出。您可以看到輸入與「執行操作」狀態的輸出組合在一起。

(按一下以放大)


步驟 6.終止您的資源

在此步驟中,您將終止您的 AWS Step Functions 和 Amazon CloudWatch 相關資源。

重要:終止非使用中的資源可降低成本,這是最佳實務。未終止資源可能產生費用。


a.關閉狀態機器執行的標籤。在 Step Functions 視窗頂部,按一下狀態機器

(按一下以放大)


b.在狀態機器視窗中,按一下為本教學建立的狀態機器,然後選取刪除。透過選取對話方塊中的刪除狀態機器來確認此動作。在 Step Functions 確認所有處理中的執行都已完成後,您的狀態機器將在一兩分鐘內刪除。

(按一下以放大)


c.接下來,您將刪除您的 Amazon CloudWatch Events 規則。在 CloudWatch 主控台中,按一下動作,然後按一下刪除。透過再次按一下刪除來確認刪除。

(按一下以放大)


d.按一下服務,然後在搜尋列中輸入 IAM 以導覽到 IAM 主控台。

(按一下以放大)


e.按一下角色

(按一下以放大)


f.選取您為此教學建立的兩個 IAM 角色,然後按一下刪除角色。透過按一下對話方塊中的是,刪除以確認刪除。

您現在可以登出 AWS 管理主控台。

(按一下以放大)


恭喜您!

您已經成功排定了每分鐘執行一次的無伺服器工作流程。
借助 AWS Step Functions,您可以檢查和稽核重複執行的任務,以確認它們是否一致地得到執行。透過將 AWS Step Functions 與 Amazon CloudWatch Events 結合使用,您可以自動化每日、每周和每月的任務,或者在滿足某些條件時觸發 Step Functions 工作流程的執行。