运维编排(OOS) 简介
什么是OOS
Operation Orchestration Service,简称OOS,是全面、免费的云上自动化运维平台,提供运维任务的管理和执行。典型使用场景包括:事件驱动运维,批量操作运维,定时运维任务,跨地域运维等,OOS为重要运维场景提供审批,通知等功能。OOS帮您实现标准化运维任务,从而实践运维即代码(Operations as Code)的先进理念。关于OOS更详细的介绍请查阅 运维编排服务。
场景介绍
对于规模比较大的企业,不同部门的ECS实例可能会分布在多个账号中。多个账号中ECS实例的补丁的集中管理成为摆在企业资产管理者面前的重要问题。本文将介绍如何通过补丁管理功能跨账号跨地域的集中修复ECS实例操作系统补丁。
实现原理
在跨账号补丁修复的场景中,阿里云账号分为两个角色。
-
管理账号
-
资源账号
其中资源账号可以有一个或者多个,管理账号本身也可以是一个资源账号。
通过在所有资源账号下创建管理账号可以扮演的RAM角色的方式,授权补丁修复所需要的相关权限。从而可以达到在管理账号内跨账号跨地域集中修复补丁的效果。
前置条件
如果需要设置自定义的补丁基线,可以通过 ROS或者 Terraform统一管理所有资源账号下的自定义补丁基线。
操作步骤
在资源账号中创建RAM角色
需要在所有资源账号中都创建用于补丁管理的RAM角色,并授权管理账号扮演。步骤如下:
-
登录 运维编排控制台。
-
单击 公共模板,选择 创建角色并授予自定义权限策略。
-
单击 创建执行。
-
单击 设置参数。
-
新建角色名称。可自定义角色名称,例如 PatchRole。
-
角色信任的云账号。填写管理账号的阿里云id,默认 { { ACS::AccountId }} 是授权给本账号。
-
新建并授予的自定义权限策略名称。可自定义权限策略名称,例如 PatchPolicy。
-
授权的自定义权限策略脚本。应该填入
-
{
"Version": "1",
"Statement": [
{
"Action": [
"ecs:DescribeInvocationResults",
"ecs:DescribeInstances",
"ecs:RunCommand",
"ecs:RebootInstance",
"ecs:DescribeCloudAssistantStatus",
"ecs:DescribeInvocations"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"oos:ListInstancePatchStates"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
-
单击 确定,单击 创建执行。等待执行完成。
补丁修复
-
登录 运维编排控制台。
-
使用 附录中的模板创建跨账号执行模板来跨账号跨地域补丁修复。
-
执行模板。
-
accountRoleAndRegions。分别在资源账号下上海和北京地域运行补丁修复操作。
-
[
{
"OOSAssumeRole": "|${资源账号uid}/PatchRole",
"RegionId": "cn-shanghai"
},
{
"OOSAssumeRole": "|${资源账号uid}/PatchRole",
"RegionId": "cn-beijing"
}
]
-
templateName。选择 ACS-ECS-BulkyApplyPatchBaseline。
-
templateParameters。模板参数参考《 立即修复》,可以如下设置。
{
"regionId": "{
{ regionId }}",
"targets": {
"Type": "All",
"RegionId": "{
{ regionId }}",
"Parameters": {
"RegionId": "{
{ regionId }}",
"Status": "Running"
}
},
"action": "install",
"rebootIfNeed": true,
"rateControl": {
"Mode": "Concurrency",
"MaxErrors": 0,
"Concurrency": 10
},
"OOSAssumeRole": "",
"timeout": 86400
}
-
单击 确定,单击 创建执行。
-
创建执行成功后,您可单击该执行的 详情,查看 执行日志,实时了解执行的进度和状态。
附录
跨账号跨地域执行模板
FormatVersion: OOS-2019-06-01
Description:
en: Multi account to execute specified template
zh-cn: 跨账号执行指定模板
name-en: MultiAccountToExecuteTemplate
name-zh-cn: 跨账号执行指定模板
Parameters:
accountRoleAndRegions:
Type: Json
templateName:
Type: String
AssociationProperty: TemplateName
templateParameters:
Description:
en: Template paremeters to execute with.
zh-cn: 触发执行模板的参数。
Type: Json
AssociationProperty: TemplateParameter
AssociationPropertyMetadata:
TemplateName: $templateName
rateControl:
Description:
en: Concurrency ratio of task execution.
zh-cn: 任务执行的并发比率。
Type: Json
AssociationProperty: RateControl
Default:
Mode: Concurrency
MaxErrors: 0
Concurrency: 10
OOSAssumeRole:
Description:
en: The RAM role to be assumed by OOS.
zh-cn: OOS扮演的RAM角色。
Type: String
Default: OOSServiceRole
RamRole: '{
{ OOSAssumeRole }}'
Tasks:
- Name: executeTemplate
Action: 'ACS::Template'
Description:
en: Execute template.
zh-cn: 执行模板。
Properties:
TemplateName: '{
{ templateName }}'
Parameters:
'Fn::MergeMap':
- '{
{ templateParameters }}'
- regionId:
'Fn::Select':
- RegionId
- '{
{ACS::TaskLoopItem}}'
- OOSAssumeRole:
'Fn::Select':
- OOSAssumeRole
- '{
{ACS::TaskLoopItem}}'
Loop:
RateControl: '{
{ rateControl }}'
Items: '{
{ accountRoleAndRegions }}'