使用 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 Functions 和 Amazon CloudWatch。這兩種服務都納入 AWS 免費方案。
步驟 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 開啟服務主控台。
步驟 2.建立 AWS Step Functions 狀態機器
在此步驟中,您將使用「傳遞」狀態建立一個獨立執行的簡單狀態機器。「傳遞」狀態只是將其輸入傳遞到其輸出,實際上並沒有執行任何工作。
在現實中,無伺服器工作流程可以完成您需要它做的任何事情。您可以協調多個 Lambda 函數來執行任務、進行決策等等。不過出於教學方便,我們將建立簡單的工作流程。
a.開啟 AWS Step Functions 主控台。Step Functions 提供了各種預先定義的狀態機器作為範本。在本教學中,您將使用 Hello World 範本建立狀態機器。在建立狀態機器頁面上,選取範本,然後選取 Hello world 。
c.Step Functions 會自動填寫狀態機器的名稱。它還使用狀態機器的 Amazon 狀態語言描述在狀態機器定義窗格填入資訊。有關如何定義狀態機器的更多資訊,請參閱狀態機器結構。
讓我們對狀態機器進行一些簡單的修改:
在第 2 行和第 5 行,用 "Do Something" 取代 "HelloWorld"
在第 7 行,用 "Work complete!" 取代 "Hello World!"
然後,按一下視覺化工作流程旁邊的重新整理按鈕,以更新狀態機器架構圖來反映您的變更。
步驟 3.建立 Amazon CloudWatch 事件規則
現在,您已經建立了狀態機器,您可以建立 Amazon CloudWatch Events 規則,以根據排程執行狀態機器。Amazon CloudWatch Events 會提供近乎即時的系統事件串流,說明 Amazon Web Services (AWS) 資源的變動情形。使用可以快速設定的簡單規則,您可以匹配事件並將其路由到一個或多個目標函數或串流。
步驟 4.自訂狀態機器處理輸入和輸出的方式
接下來,您將自訂狀態機器處理輸入和輸出的方式。了解資訊如何在狀態之間流動,並學習如何篩選和操作這些資料,將幫助您有效地設計和實作 AWS Step Functions 中的工作流程。
b.在狀態機器定義視窗中,請參考狀態機器的第 7 行。「傳遞」狀態中的「結果」欄位指定應傳遞到下一個狀態的輸出。由於您的狀態機器只有一種狀態,因此訊息 "Work complete!" 將傳遞到工作流程的結束狀態。
您可能還記得,Step Functions 「傳遞」狀態只是將其輸入傳遞到其輸出。您可以使用 ResultPath 欄位來修改狀態的輸出。例如,您可以將狀態輸入替換為其產生的結果 (例如,「任務」狀態的 Lambda 函數輸出)。
要將狀態的輸入及其結果結合起來,請在第 7 行之後新增行並輸入:
"ResultPath": "$.taskresult",
這會將叫用狀態機器執行的 CloudWatch Event 的詳細資訊與「傳遞」狀態的輸出 (在本例中為 "Work complete!") 結合起來。如需詳細資訊,請參閱 Step Functions 中的輸入和輸出處理。
步驟 5.確認您的工作流程按預期工作
現在,您已啟用 CloudWatch Events 規則,CloudWatch 每分鐘觸發一次狀態機器工作流程的執行。在此步驟中,您將觀察這些執行,並驗證 Step Functions 已擷取 CloudWatch Event 的詳細資訊。
步驟 6.終止您的資源
在此步驟中,您將終止您的 AWS Step Functions 和 Amazon CloudWatch 相關資源。
重要:終止非使用中的資源可降低成本,這是最佳實務。未終止資源可能產生費用。
恭喜您!
您已經成功排定了每分鐘執行一次的無伺服器工作流程。
借助 AWS Step Functions,您可以檢查和稽核重複執行的任務,以確認它們是否一致地得到執行。透過將 AWS Step Functions 與 Amazon CloudWatch Events 結合使用,您可以自動化每日、每周和每月的任務,或者在滿足某些條件時觸發 Step Functions 工作流程的執行。