场景介绍
把新代码部署到ECS实例后,需要创建一个新的ECS镜像并且修改指定伸缩组伸缩配置的镜像,之后还需要把伸缩组中已存在的实例的镜像一并修改。本文介绍如何通过OOS一键自动化实现以上流程。
解决方案
如下图所示,伸缩配置中的源镜像和伸缩组中实例的镜像都为:aliyun_2_1903_64_20G_alibase_20190829.vhd

登录OOS控制台。如果您之前从未开通过OOS服务,请点击“立即开通”按钮,即可一键开通。OOS运维编排是安全免费的服务,请放心开通。
开通后进入运维编排界面,点击自定义模板,点击创建模板。
点击空白模板,点击选取。
在创建模板页面Yaml栏中粘贴以下模板。
FormatVersion: OOS-2019-06-01
Description:
en: Creates an ECS image and modify scaling configuration.
zh-cn: 创建一个ECS镜像后更新伸缩组配置镜像。
Parameters:
instanceId:
Description:
en: The ID of ECS instance.
zh-cn: ECS实例ID。
Type: String
scalingConfigurationId:
Description:
en: The ID of the scaling configuration to be modified.
zh-cn: 待修改伸缩配置的ID。
Type: String
scalingGroupId:
Description:
en: The unique id of the scaling group.
zh-cn: 伸缩组ID。
Type: String
rateControl:
Description:
en: Concurrency ratio of task execution.
zh-cn: 任务执行的并发比率。
Type: Json
AssociationProperty: RateControl
OOSAssumeRole:
Description:
en: The RAM role to be assumed by OOS.
zh-cn: OOS扮演的RAM角色。
Type: String
Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
- Name: createImage
Action: 'ACS::ECS::CreateImage'
Description:
en: Create new image with the specified image name and instance ID.
zh-cn: 通过指定实例ID和镜像名称创建新的镜像。
Properties:
imageName: 'm-{{ACS::ExecutionId}}'
instanceId: '{{ instanceId }}'
Outputs:
imageId:
ValueSelector: imageId
Type: String
- Name: modifyScalingConfiguration
Action: 'ACS::ExecuteAPI'
Description:
en: Modify scaling configuration.
zh-cn: 修改伸缩配置。
Properties:
Service: ESS
API: ModifyScalingConfiguration
Parameters:
ScalingConfigurationId: '{{ scalingConfigurationId }}'
ImageId: '{{ createImage.imageId }}'
- Name: getInstance
Description:
en: Views the ECS instances.
zh-cn: 获取ECS实例。
Action: 'ACS::ExecuteApi'
Properties:
Service: ECS
API: DescribeInstances
Parameters:
Status: Running
Tags:
- Key: 'acs:autoscaling:scalingGroupId'
Value: '{{ scalingGroupId }}'
Outputs:
instanceIds:
Type: List
ValueSelector: 'Instances.Instance[].InstanceId'
- Name: replaceSystemDisk
Description:
en: replaces system disk.
zh-cn: 更换系统盘。
Action: 'ACS::ECS::ReplaceSystemDisk'
Properties:
instanceId: '{{ ACS::TaskLoopItem }}'
imageId: '{{ createImage.imageId }}'
Loop:
RateControl: '{{ rateControl }}'
Items: '{{ getInstance.instanceIds }}'
Outputs:
imageId:
Type: String
Value: '{{ createImage.imageId }}'
输入模板名称,点击创建模板。
在自定义模板页面找到刚创建的模板,点击创建执行。
选择自动执行,点击下一步:设置参数。
参数设置页面需要输入以下参数:
确认参数无误后点击创建执行。在执行详情页面可以看到模板执行的详细过程。
执行成功后,伸缩配置镜像已更换为新创建的镜像。
伸缩组中实例的镜像已更换为新创建的镜像。
欢迎使用OOS
OOS客户支持钉钉群:23330931
OOS管理控制台的链接 OOS帮助文档的链接