在自動化運維的一些場景中,有些特殊的操作需要被特殊關注,例如刪除重要資源,或使用費用較高的實例等。如果把這些操作也納入自動化的范疇,您可能會擔心失去控制,帶來風險。若不納入自動化的范疇,又會導致這些操作退化到手工執行或其他非自動化方式。而審批步驟剛好能夠讓您在自動化和特殊關注之間尋找一個平衡。
前提條件
已創建用于接收告警通知的釘釘群并獲取釘釘機器人Webhook地址。請參見獲取釘釘機器人Webhook地址。
解決方案
在系統運維管理 OOS(CloudOps Orchestration Service)中,當被執行模板中包括審批動作,且執行到審批動作所在任務時,OOS執行引擎會暫停執行,執行進入等待中狀態,并發送一個包含通知的審批鏈接到管理員用戶。當管理員單擊審批鏈接后,可根據業務需求做出審批決定,同意或拒絕,同意后則OOS引擎繼續執行后續任務,拒絕后引擎停止執行,執行狀態轉為已取消(Cancelled)。
操作步驟
登錄系統運維管理控制臺。
在
中,單擊創建模板,單擊下一步。單擊YAML,將附錄1:模板內容粘貼到空白編輯欄,單擊創建模板,填寫模板名稱,單擊完成創建。
在
中,找到剛創建成功的模板,單擊創建執行。單擊下一步:設置參數。
輸入以下的參數。
targets:必填,將重啟的實例范圍。
webHookUrl:必填,審批通知及鏈接將發送到的釘釘群助手WebHook。獲取方法可參考附錄2:釘釘WebHook獲取。
rateControl:選填,并發速率控制。
atMobiles:選填,發送審批通知時,在釘釘群中@的指定的用戶。
atAll:選填,發送審批通知時,是否@釘釘群中的所有成員。
OOSAssumeRole:選填。OOS默認使用當前登錄用戶的權限執行動作;如果指定了RAM角色名稱,OOS扮演該RAM角色執行動作。
單擊下一步:確定,單擊創建執行。
在
中可查看剛剛創建的執行,若創建執行成功,被指定的手機號的用戶,在釘釘群中會被@,且當前執行狀態處于等待中,用戶可以單擊審批鏈接,根據需要作出審批決定。
附錄1:模板(審批ECS實例重啟)
模板任務邏輯:
捕捉所選實例信息。
下發對實例重啟的審批通知及鏈接。
如審批通過,對所選實例進行重啟。
模板內容(YAML)
FormatVersion: OOS-2019-06-01 Description: en: Bulky restarts the ECS instances with Approval. zh-cn: 批量重啟ECS實例帶審批。 name-en: BulkyRebootInstancesWithApproval name-zh-cn: 批量重啟ECS實例帶審批 Parameters: targets: Type: Json AssociationProperty: Targets AssociationPropertyMetadata: ResourceType: 'ALIYUN::ECS::Instance' rateControl: Description: en: Concurrency ratio of task execution. zh-cn: 任務執行的并發比率。 Type: Json AssociationProperty: RateControl Default: Mode: Concurrency MaxErrors: 0 Concurrency: 100% webHookUrl: Description: en: >- The webHook url of dingtalk group assistant, e.g.https://oapi.dingtalk.com/robot/send?access_token=1234zxcvaksdq31414. zh-cn: >- 釘釘群助手的webhook地址,形如https://oapi.dingtalk.com/robot/send?access_token=1234zxcvaksdq31414。 Type: String atMobiles: Description: en: >- The telephone numbers of member in dingtalk group assistant @, when notify comes. zh-cn: 當群助手向釘釘群中發送審批通知時,要被@的群成員注冊釘釘所用手機號。 Type: List Default: - '1390000****' atAll: Description: en: 'assistant @ all members in dingtalk group or not, when notify comes.' zh-cn: 當群助手向釘釘群中發送審批通知時是否@所有人。 Type: String Default: 'false' OOSAssumeRole: Description: en: The RAM role to be assumed by OOS. zh-cn: OOS扮演的RAM角色。 Type: String Default: OOSServiceRole RamRole: '{{ OOSAssumeRole }}' Tasks: - Name: getInstance Description: en: Views the ECS instances. zh-cn: 獲取ECS實例。 Action: 'ACS::SelectTargets' Properties: ResourceType: 'ALIYUN::ECS::Instance' Filters: - '{{ targets }}' Outputs: instanceIds: Type: List ValueSelector: 'Instances.Instance[].InstanceId' instanceNames: Type: List ValueSelector: 'Instances.Instance[].InstanceName' - Name: approveRestart Action: 'ACS::Approve' Properties: NotifyType: WebHook WebHook: URI: '{{webhookUrl}}' Headers: Content-Type: application/json Content: msgtype: text text: content: >- Notify: please approve instances restart, instance names to approve are {{getInstance.instanceNames}}, sent by {{ACS::RegionId}} oos {{ACS::ExecutionId}}. at: atMobiles: '{{atMobiles}}' isAtAll: '{{atAll}}' - Name: rebootInstance Action: 'ACS::ECS::RebootInstance' Description: en: Restarts the ECS instances. zh-cn: 重啟實例。 Properties: instanceId: '{{ ACS::TaskLoopItem }}' Loop: RateControl: '{{ rateControl }}' Items: '{{ getInstance.instanceIds }}' Outputs: instanceIds: Type: List Value: '{{ getInstance.instanceIds }}'