如您正在使用自定义镜像,出于安全考虑,需及时更新镜像,例如安装最新的操作系统补丁、升级中间件软件、在镜像中安装最新的第三方软件等。您可以使用OOS提供镜像更新公共模板自动更新镜像,降低运维成本。
解决方案
OOS专门为更新镜像的场景提供了更新镜像的公共模板,实现了一键自动化的镜像更新服务。您只需选择一个源镜像(待更新的镜像),补充更新镜像所需的Shell命令(如果是Linux实例)等必要参数,然后点击创建执行就可以一键生成新镜像。使用OOS更新镜像,您无需安装任何额外工具,无需关心ECS的创建、登录、修改、释放等步骤,无需设置环境变量和登录密钥。您还可以自定义OOS模板,实现定时或者批量的自动化更新镜像。
更新镜像的其他方式及对比
构建方式 | 工具与依赖 | 优点 | 缺点 |
使用OOS创建和更新自定义镜像 | 开通即可,无其他依赖 |
| 无 |
| 无其他依赖 | ECS控制台操作,简单易用 |
|
使用Packer创建自定义镜像 | 需要安装Packer | 开源,多云的支持 |
|
操作步骤
登录系统运维管理控制台。
选择
。选择更新镜像,单击创建执行。
单击下一步:设置参数。
按需设置以下参数。
选择源镜像:指定您要更新的源镜像。
镜像设置:定义更新后镜像的名称与标签。
配置中转实例:设置临时ECS实例的规格与配置。
更新镜像配置:确定更新方式、命令类型及命令脚本。
高级选项:OOS默认使用当前登录用户的权限执行动作;如果指定了RAM角色名称,OOS扮演该RAM角色执行动作。
单击下一步:确认,单击确认风险并执行。
在
中可查看刚刚创建的执行,若创建执行成功,且执行状态处于运行中,则表示更新镜像正在进行中。当执行状态转换为成功时,则表示镜像更新成功,可在执行详情中查看新镜像ID。
如需更多了解镜像更新过程,当创建执行成功后,您可单击该执行的详情,查看执行日志,实时了解执行的进度和状态。
附录1:公共模板和背后逻辑
ACS-ECS-UpdateImage公共模板内容如下:
FormatVersion: OOS-2019-06-01
Description: Updates an existing ECS image via ECS Cloud Assistant then creates a
ECS image.
Parameters:
sourceImageId:
Description: The image ID for the ECS instances, centos_6_10_64_20G_alibase_20190326.vhd,
for example.
Type: String
AllowedPattern: '[A-Za-z0-9_\-\.]*'
MinLength: 1
MaxLength: 40
instanceType:
Description: The instance type for the ECS instances, ecs.g5.large, for example.
Type: String
AllowedPattern: ecs\.[A-Za-z0-9\.\-]*
MinLength: 1
MaxLength: 30
securityGroupId:
Description: The security group ID for the ECS instances, sg-xxxxxxxxxxxxxxxxxxxx,
for example.
Type: String
AllowedPattern: sg-[A-Za-z0-9]*
MinLength: 1
MaxLength: 30
vSwitchId:
Description: The virtual switch ID for the ECS instances, vsw-xxxxxxxxxxxxxxxxxxxx,
for example.
Type: String
AllowedPattern: vsw-[A-Za-z0-9]*
MinLength: 1
MaxLength: 30
commandContent:
Description: The content of command.
Type: String
commandType:
Description: The type of command to run in ECS instance.
Type: String
AllowedValues:
- RunBatScript
- RunPowerShellScript
- RunShellScript
MinLength: 1
MaxLength: 30
targetImageName:
Description: The name of image.
Type: String
AllowedPattern: '[A-Za-z0-9\-_]*'
MinLength: 1
MaxLength: 30
OOSAssumeRole:
Description: The RAM role to be assumed by OOS.
Type: String
Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
- Name: checkNewImageName
Action: ACS::CheckFor
Description: Check image name is available.
Properties:
Service: ECS
API: DescribeImages
Parameters:
ImageName: '{{ targetImageName }}'
DesiredValues:
- 0
PropertySelector: TotalCount
- Name: runInstances
Action: ACS::ECS::RunInstances
Description: Create a ECS instance for the cloud assistant.
Properties:
imageId: '{{ sourceImageId }}'
instanceType: '{{ instanceType }}'
securityGroupId: '{{ securityGroupId }}'
vSwitchId: '{{ vSwitchId }}'
Outputs:
instanceId:
ValueSelector: instanceIds[0]
Type: String
- Name: installCloudAssistant
Action: ACS::ECS::InstallCloudAssistant
Description: Install cloud assostant for ECS instance.
OnError: deleteInstance
Properties:
instanceId: '{{ runInstances.instanceId }}'
- Name: runCommand
Action: ACS::ECS::RunCommand
Description: Run command on ECS instance.
OnError: deleteInstance
Properties:
commandContent: '{{ commandContent }}'
commandType: '{{ commandType }}'
instanceId: '{{ runInstances.instanceId }}'
- Name: stopInstance
Action: ACS::ECS::StopInstance
Description: Stops the ECS instance by the instance ID.
Properties:
instanceId: '{{ runInstances.instanceId }}'
- Name: createImage
Action: ACS::ECS::CreateImage
Description: Create image with the specified image name and instance ID.
OnError: deleteInstance
Properties:
imageName: '{{ targetImageName }}'
instanceId: '{{ runInstances.instanceId }}'
Outputs:
imageId:
ValueSelector: imageId
Type: String
- Name: deleteInstance
Action: ACS::ExecuteAPI
Description: Deletes the ECS instance by the instance ID.
Properties:
Service: ECS
API: DeleteInstance
Risk: Normal
Parameters:
InstanceId: '{{ runInstances.instanceId }}'
Force: true
Outputs:
imageId:
Type: String
Value: '{{ createImage.imageId }}'
该模板顺序执行以下任务:
检查您打算为新镜像设置的名称是否可用。
创建并运行一台临时ECS实例。该实例会根据您输入的参数进行创建,即实例将使用的镜像是您待更新的源镜像,实例属性将是您参数中允许的实例属性。
如果临时ECS实例上没有安装云助手客户端,则需要进行安装。
在临时ECS实例上通过云助手执行用来更新的命令,并等待执行成功,更新命令成功。
当临时ECS实例执行更新命令成功后,停止临时ECS实例。
当临时ECS实例停止后,对该实例创建镜像,并等待镜像创建成功。
最后,删除临时ECS实例。