使用自動化營運手冊(Playbook)和執行腳本(Runbook)實現卓越營運

November 9, 2021

Stephen Salim, Well-Architected Solutions Architect, Amazon Web Services
Bob Yeh, Well-Architected Solutions Architect, Amazon Web Services
Shih-Yong Wang, Senior Solutions Architect, Amazon Web Services

卓越營運的一個重要觀念就是需要有明確定義的工作流程,用以執行各種不同場景下的指令與動作。在事件回應中,團隊需要一份明確的 營運手冊 (Playbook),其中包含他們可以採取的行動,以指導他們完成問題排查以及訊息傳遞。另外也需要執行腳本(Runbook) ,定義他們可以採取的動作,有可能是工具操作或是細步指令與參數設定,來解決遇到的問題事件。

通常在簡單的情況下,這些操作可以手動執行。例如,維運人員會在系統發生狀況後收到通知,讓他們可以通過查詢應用程式中的各種日誌和指標來進行調查。隨著時間的推移,工程師對這類問題的瞭解加深,他們就可以制定出更有效的監測方法來解決問題。此工作模式能有效執行,但在一定規模以後,依賴全人工執行所有的動作是無法達到預期的可靠性。

 

依賴人工執行的缺點

  • 單點故障:
依賴人工處理的方式,負責執行的工程人員會成為單一故障點的高風險因子。如果工程人員出於任何原因,無法即時回應,則會產生無法及時處理事件的風險。
  • 有效性難以保證:
操作手冊與與執行腳本是兩個不同層面的執行參考,大方向的決策判斷與細步的執行步驟是兩個分別的過程。因此在人工執行時很難保持有效性及一致性。而用人工測試營運手冊和運行腳本需要花費工程人員一定的時間成本,這對整體的資源是相對昂貴的花費。
  • 可追溯性變得困難:
人工執行的步驟會隨著未如預期的反應,或是時空環境而產生變化。而當事件的變因跨越系統架構中的多個區塊或系統元件,此時常無法正確追溯在系統與流程中的確切狀態與肇因。
  • 難以擴展規模:
人類的認知能力有限。當事件規模變大時,這些執行步驟可能需要跨越多個不同領域、有依賴性與條件限制。因此,一般來說,依賴人工執行營運手冊和運行腳本中的動作容易出錯,而且無法有效達到規模擴展。
 
因此,我們應該如何執行營運手冊和運行腳本呢?又該如何有效的將營運手冊和運行腳本進行規模化呢?
 

良好架構設計卓越營運

在 AWS 中,我們定義了"AWS Well-Architected 架構良好框架",這是您可以遵循的最佳實踐集合,以確保您在準備和構建工作負載時會考慮到各個重要領域。這些領域被歸納在精心設計框架的五個支柱中:卓越營運安全性可靠性效能效率成本最佳化。特別是在卓越營運支柱上,該支柱側重於最佳實踐,以確保您的系統與團隊已準備好穩定運行。而在白皮書內的設計準則可以協助達到目標,並且不斷的優化改善。

此支柱的設計原理之一是將基礎建設作為程式碼執行 (Infrastructure as Code),它提倡將您的基礎架構定義為程式碼,以及將操作過程編纂為自動化流程的做法。對於營運手冊和運行腳本裡,經由在程式化的檔案中定義詳細的指令、步驟及參數,以便您可以直接運行並自動執行操作。通過這樣做,您將預先設計好的流程以及對應動作,轉化成實際的執行指令。這使得您更容易驗證這些步驟,因為您可以測試它們,就好像您在測試您的應用程式原始碼一般。經由將動作編纂成可執行檔案的過程,也可以消除人力因素造成單點故障的可能,並給您更好的可擴展性。最重要的是:您將能夠更容易地追蹤實際操作的歷程,為您從操作失敗中吸取教訓打下更好的基礎,並能夠重新改進操作流程,這也是支柱中兩個設計原則。

現在,讓我們來看看如何使用 AWS 服務構建編營運手冊和運行腳本。

 

如何在 AWS 上構建自動化營運手冊和運行腳本。

您可以使用各種工具編纂自動化營運手冊和運行手冊。在 AWS 中,您可以閱讀 AWS Systems Manager Runbook - 以前稱為 Automated Document 自動化文件。使用 AWS Systems Manager中的此功能,您可以定義以 JSONYAML 格式定義的單個文件中執行指令操作。文件資源在 AWS  Systems Manager服務中創建和託管,然後由您調度操作,以 AWS 資源的工作流程條件以及您的 EC2 虚擬主機運行。這為您提供了一個集中控管營運手冊和執行腳本文件的方法。

AWS Systems Manager Runbook文件格式支援幾個預設的自動化操作(automation-actions),允許您以各種方式定義執行動作。其中之一是使用 ”aws:executeScript“ 操作將 Python PowerShell Scripts 直接嵌入執行腳本中。這允許您定義自己的邏輯以用於事件回應,如果您需要在自動化過程中執行複雜的邏輯運算,這項功能尤其有用。

假設在營運事件發生時,您想列出所有與事件相關的AWS 資源清單。此時您能參考的第一項資源細項是CloudWatch AlarmARN,利用" aws:executeScript ",建立邏輯用於定位報警標籤(tag),然後呼叫其他 AWS API 用以尋找相同標籤的其他資源,然後從這裡,您可以編輯清單以供後續處理。或者,您的服務或工作負載已經使用 AWS CloudFormation – 將基礎建設轉化為程式碼來建置,您可以直接找到帶有相關標籤的 CloudFormation Stacks,並列出其中的相關資源。

就像為應用程式編寫程式碼時一樣,您希望避免多次編寫相似的程式碼,這不但重複且浪費時間,同時也使您更難在更大的規模上測試其有效性。因此,從長遠來看,在構建營運手冊和運行腳本時,創建單獨且可重複使用的模組,將為您提供更好的可擴充性。每當您看到一系列指令動作在不同的營運手冊或運行腳本中重複出現,這便是一個很好的候選目標,將流程劃分成一個單獨的較小的獨立模組化文件。要使用此模組化文件,您可以利用”aws:executeAutomation“ ,這允許您定義營運手冊或執行手冊中的步驟,該步驟將作為流程的一部分去運行不同的文件腳本。

在我們之前的例子 - 生成與事件相關的資源清單,透過使用”aws:executeAutomation“操作,您可以將該檔案作為營運手冊的一個獨立部分模組,該營運手冊將接收模組產生的清單,並將其傳遞給另一個模組,並按照特定模式對實際資源進行調查。如果您以後有一個不同的投資項目,但您仍想比照之前的作法。您就可以重複使用同一營運手冊去產生資源清單,並將其與新的營運手冊配對。

如果您需要對特定的AWS服務執行API 呼叫,例如,您希望將某一個營運手冊中的調查報告發送到 Amazon SNS  主題,並通過電子郵件發送通知給工程人員。您可以使用”aws:executeAwsApi” 操作,從營運手冊或運行腳本中直接呼叫API,去指定執行的操作、傳遞參數及內容,而無需編寫任何附加的程式碼。

在構建營運手冊和運行腳本時,考慮到與現有業務流程的整合是相對的重要。在此情況下,您必須創建一個審核的機制,在繼續動作之前,流程需要得到決策人員的審核批准,例如調用備份資料、或是回溯系統版本等動作。為此,您可以使用"aws:approve"操作,並將其與Amazon SNS Topic 整合。此操作將向決策人員發送消息,並附上他們可用於批准或拒絕請求的 URL連結。

或者,您可能需要建立一個機制,讓決策人員有機會在一定時間內攔截該操作。對於此情況,您可以使用”aws:executeScript”的組合來運行一個單獨的程式,並等待一段時間,然後再自動批准請求。同時,您可以取消相同的"aws:approve"操作,讓決策人員有機會在自動批準被觸發之前拒絕請求。

有關此範例的更多詳細資訊和步驟,您可以按照在 AWS Well-Architected Labs 網站中的實作步驟,動手建立自動化操作。請參考內容 - 使用營運手冊和運行腳本實現操作自動化 

 

結論:

要實現卓越運營,您需要有一個明確定義的流程來建構您的營運手冊和運行腳本文件。但是,人工執行這些動作存在許多缺點,從長遠來看,這些操作不會使其成為可擴展的模式。這就是為什麼在 AWS Well-Architected 的卓越營運 (Operational Excellence) 支柱中,AWS 將執行操作定義為程式碼 (Infrastructure as Code) 作為設計原則之一。意思是:除了基礎設施是採用程式碼來定義和部署架構外,操作流程(如營運手冊和運行腳本)也必須以程式碼的做法來編纂和管理。

在 AWS 中,您可以閱讀AWS Systems Manager Runbook(以前稱為Automated Document
自動化文件), 以編纂您的營運手冊和運行手冊文件。活用不同的自動化功能(Automation Actions) ,例如 "aws:executeScript", "aws:executeAutomation", "aws:executeAwsApi", "aws:approve",可以讓您創建模組化元件,並擴展整合到您的現有業務流程之中。

如果您有興趣獲得成本最佳化小組的分析和建議,請聯繫您指定的 AWS 客戶經理。一如既往,我們邀請您繼續構建,與 Amazon Web Services 攜手共進。

 

作者簡介

 

Stephen Salim AWS架構良好團隊亞太區的資深專職架構師,專長於架構設計、DevOps、以及安全相關的議題,同時也著重在協助客戶建立安全高效、簡捷可靠的良好架構設計。

Stephen is a Senior Solutions Architect with multiple years of experience in Amazon Web Services. Certified AWS Solutions Architect Pro, AWS DevOps Engineer pro, and AWS Security Specialty. He is focused in helping customers build a secure, highly performing, resilient, and efficient architecture through AWS Well-Architected Framework.

 

Bob Yeh 目前服務於AWS架構良好團隊亞太區的專職架構師,協助客戶於最佳實踐審核架構完善的框架審核)及相關議題改善。

Bob Yeh, a Geo Solutions Architect from Well-Architected Team, APAC, AWS. He enjoys working with customer to evolve their architecture in fast pace, also dive deep into any Well-Architected related subject for better user cloud experiences.

 

Shih-Yong Wang 目前為 AWS 臺灣解決方案架構師,負責協助各個規模及不同產業的客戶,透過使用 AWS 實現其商業價值,並且為創新帶來無限契機。

Shih-Yong Wang, as a senior Solutions Architect for Amazon Web Services, helps customer from different territories or industries to deliver their business value by moving to the cloud. Also creates enormous opportunities for innovation.

Previous Article
《香港01》利用 AWS 服務開發 AI 演算法 提升廣告成效
《香港01》利用 AWS 服務開發 AI 演算法 提升廣告成效

《香港01》產品與技術研發中心(Product and Technology Development) 聯同 AWS 數碼創新團隊(Digital Innovation)及數據實驗室(Data Lab)合作,透過人...

Next Article
使用 AWS 架構完善框架 (Well-Architected Framework) 以實踐成本最佳化
使用 AWS 架構完善框架 (Well-Architected Framework) 以實踐成本最佳化

在本系列文章中,將會討論我們的完善的架構框架在其不同支柱中的方法,我們將從最受歡迎的主題之一開始:成本最佳化。在本文中,我們將借鑑專注於這些活動的團隊的經驗和實際工作:我們的成本最佳化小組。