撰寫 Automation Runbook - AWS Systems Manager

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

撰寫 Automation Runbook

Automation 中的每個 Runbook (AWS Systems Manager 功能) 會定義自動化。Automation Runbook 會定義在自動化期間執行的動作。在 Runbook 內容中,您可以定義輸入參數、輸出和 Systems Manager 對受管執行個體和 AWS 資源執行的動作。

自動化包含數個預先定義的 Runbook,供您用來執行常見任務,像是重新啟動一個或多個 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體,或建立 Amazon Machine Image (AMI)。不過,您的使用案例可能會超出預先定義 Runbook 的功能。如果是這種情況,您可以建立自己的 Runbook,並根據您的需求進行修改。

Runbook 包含自動化動作、這些動作的參數,以及您指定的輸入參數。Runbook 的內容是以 YAML 或 JSON 撰寫。如果您不熟悉 YAML 或 JSON,則建議您在嘗試撰寫自己的 Runbook 之前使用文件建置器,或學習更多關於任一標記語言的資訊。如需 Document Builder 的詳細資訊,請參閱 使用文件建置器建立執行手冊

下列各節將協助您撰寫首個 Runbook。

識別您的使用案例

撰寫 Runbook 的第一個步驟是識別您的使用案例。例如,您排定了每天在所有生產 Amazon EC2 執行個體上執行的 AWS-CreateImage Runbook。在月底,您會決定是否擁有超過復原點所需數量的映像。接下來,在建立新 AMI 時,您想要自動刪除最舊的 Amazon EC2 執行個體 AMI。若要完成這項操作,您可以建立執行以下動作的新 Runbook:

  1. 執行 aws:createImage 動作,並在映像描述中指定執行個體 ID。

  2. available 前,執行 aws:waitForAwsResourceProperty 動作來輪詢圖像的狀態。

  3. 映像狀態為 available 後,aws:executeScript 動作會執行自訂 Python 指令碼,該指令碼會收集與您的 Amazon EC2 執行個體相關聯的所有映像 ID。指令碼會使用您在建立時指定之映像描述中的執行個體 ID 進行篩選。然後,指令碼會根據映像的 creationDate 對映像 ID 進行排序,並輸出最舊 AMI 的 ID。

  4. 最後,aws:deleteImage 動作會使用上一個步驟輸出的 ID 刪除最舊的 AMI。

在這個案例中,您已經使用 AWS-CreateImage Runbook,但發現您的使用案例需要更大的靈活性。這是常見的情況,因為 Runbook 和自動化動作之間可能會有重疊。因此,您可能必須調整您用於處理使用案例的 Runbook 或動作。

例如,aws:executeScriptaws:invokeLambdaFunction 動作都允許您在自動化過程中執行自訂指令碼。若要在兩者之間進行選擇,因為其他支援的執行時間語言,您可能偏好 aws:invokeLambdaFunction。但是,您可能偏好 aws:executeScript,因為它允許您直接在 YAML Runbook 中撰寫指令碼內容,並提供指令碼內容作為 JSON Runbook 的附件。您也可以考慮 aws:executeScript,在 AWS Identity and Access Management (IAM) 設定更簡單。因為它會使用 AutomationAssumeRole 中提供的許可,所以 aws:executeScript 不需要額外的 AWS Lambda 函數執行角色。

在任何給定的情況下,相較於另一個動作,一個動作可能會提供更多的靈活性或新增的功能。因此,建議您檢閱要使用之 Runbook 或動作的可用輸入參數,以判斷哪個最適合您的使用案例和偏好設定。

設定開發環境

識別您的使用案例以及您想要在 Runbook 中使用的預先定義 Runbook 或自動化動作之後,便是時候為 Runbook 內容設定開發環境了。若要開發 Runbook 內容,建議您使用 AWS Toolkit for Visual Studio Code 而非 Systems Manager 文件主控台。

Toolkit for VS Code 是 Visual Studio 程式碼 (VS 程式碼) 的開放原始碼延伸項目,提供比 Systems Manager 文件主控台更多的功能。實用的功能包括 YAML 和 JSON 的結構描述驗證、自動化動作類型的程式碼片段,以及對 YAML 和 JSON 各種選項的自動完成支援。

如需安裝 Toolkit for VS Code 的詳細資訊,請參閱安裝 AWS Toolkit for Visual Studio Code。如需使用 Toolkit for VS Code 開發 Runbook 的相關資訊,請參閱《AWS Toolkit for Visual Studio Code 使用者指南》中的使用 Systems Manager Automation 文件

開發 Runbook 內容

識別使用案例並設定環境後,即可準備開發 Runbook 適用的內容。您的使用案例和偏好設定主要會決定您在 Runbook 內容中使用的自動化動作或 Runbook。與允許您完成類似任務的另一個動作相比,某些動作僅支援輸入參數的子集。其他動作具有特定輸出,例如 aws:createImage,其中一些動作允許您定義自己的輸出,例如 aws:executeAwsApi

如果您不確定如何在 Runbook 中使用特定動作,建議您檢閱 Systems Manager Automation 動作參考 中動作的對應項目。也建議您檢閱預先定義的 Runbook 內容,以查看如何使用這些動作的真實世界範例。如需 Runbook 真實世界應用程式的更多範例,請參閱 其他執行手冊範例

為了展示 Runbook 內容提供的簡單性和靈活性差異,下列教學課程提供如何分階段修補 Amazon EC2 執行個體群組的範例:

  • 範例 1:建立父子 Runbook – 在此範例中,兩個 Runbook 會用於父子關係中。父系 Runbook 會啟動子系 Runbook 的速率控制自動化。

  • 範例 2:指令碼式 Runbook – 此範例示範如何透過將內容壓縮成單一 Runbook 並在 Runbook 中使用指令碼,來完成範例 1 的相同任務。