背景和痛点 在自动化运维的一些场景中,有些特殊的操作需要被特殊关注,例如删除重要资源,或使用费用较高的实例等。如果把这些操作也纳入自动化的范畴,您可能会担心失去控制,带来风险。若不纳入自动化的范畴,又会导致这些操作退化到手工执行或其他非自动化方式。而审批步骤刚好能够让您在自动化和特殊关注之间寻找一个平衡。
解决方案 在运维编排服务中,当被执行模板中包括审批动作,且执行到审批动作所在任务时,OOS执行引擎会暂停执行,执行进入等待中状态,并发送一个包含通知的审批链接到管理员用户。当管理员点击审批链接后,可根据业务需求做出审批决定,同意或拒绝,同意后则OOS引擎继续执行后续任务,拒绝后引擎停止执行,执行状态转为已取消(Cancelled)。
操作步骤 首先登录到运维编排控制台 。 单击我的模版>创建模版,并选取空白模版。 单击YAML,将附录1:模版内容粘贴到空白编辑栏,输入模版名称,单击创建模版。oos 在我的模版中,找到刚创建成功的模版,单击创建执行。 单击 下一步,设置参数 。 输入以下的参数 。 targets: 必填,将重启的实例范围。 webHookUrl: 必填,审批通知及链接将发送到的钉钉群助手WebHook。获取方法可参考附录2:钉钉WebHook获取。 rateControl: 选填,并发速率控制。 atMobiles: 选填,发送审批通知时,在钉钉群中@的指定的用户。 atAll: 选填,发送审批通知时,是否@钉钉群中的所有成员。 OOSAssumeRole:选填。OOS默认使用当前登录用户的权限执行动作;如果指定了RAM角色名称,OOS扮演该RAM角色执行动作。oos 单击 下一步,确认 ,单击 创建执行 。
在执行管理中可查看刚刚创建的执行,若创建执行成功,被指定的手机号的用户,在钉钉群中会被@,且当前执行状态处于等待中,用户可以点击审批链接,根据需要作出审批决定。
附录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: - '12345678901' 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 }}' 附录2:钉钉WebHook获取 选择要添加群助手通知的群,单击 … 。1 单击智能群助手。2 单击添加机器人。3 单击自定义。4 单击添加。5 填写机器人名字,本示例安全设置选择自定义关键字,并输入WebHook通知内容中所包含的词汇作为关键字,比如本示例模版的通知内容中含”Notify”,于是在该处可填写”Notify”。单击完成。6 单击复制,获取到WebHook地址。7
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。