当我们的应用上线的时候,首先要做服务器选型,在做系统配置,最后应用环境配置,然后部署机器验证,看我们搭建的环境是否符合需求。当一切都搞定了,应用需要大规模上线,或者由于业务发展需要扩展我们的应用部署,这个时候我们再一步一步再配置一遍,拷贝数据吗。以前可能需要需要这么做,但是现在这些步骤完全可以自动化的完成。通过资源编排可以非常方便的实现一台ECS的全量克隆。那么所有的事情都变得非常简单。
ECS 一键完全克隆
通过下面的链接就可以很方便的一键克隆任意多台源ECS。应用部署和应用扩展就是分分钟的事。
点击这个链接后,会看如下的页面,在对应的框中输入具体的参数,点击创建,然后就开始ECS的完全克隆。
具体说一下这些参数的含义:
-
已选地域
:选择在哪个region克隆机器,可以通过上一步
,调整region -
栈名
:指定ROS资源栈的名称,必须全局唯一 -
创建超时
:克隆机器的超时时间 -
失败回滚
:克隆机器失败后,是不是删除部分创建成功的其他资源 -
Source ECS Instance ID
:将要克隆的源 ECS -
ECS Login Password
:克隆的新机器的 root 用户登录密码 -
Source ECS system disk ID
:将要克隆的源 ECS 的系统盘 ID -
Source ECS data disk ID
:将要克隆的源 ECS 的数据盘 ID -
Number of Cloned ECS
:将要克隆多少台完全一样的 ECS
模板详解
ROS 是通过模板来实现ECS的一键完全克隆。在这个模板中,主要用到了一下三个资源:
ALIYUN::ECS::Snapshot 资源是给磁盘做快照; ALIYUN::ECS::CustomImage 基于系统盘快照做系统镜像;最终通过ALIYUN::ECS::InstanceGroupClone 基于系统盘镜像和数据盘快照完整克隆ECS。它们各自详细的参数都可以通过链接看到。
完整的模板如下:
{
"ROSTemplateFormatVersion": "2015-09-01",
"Description": "Clone ECS Instance",
"Parameters": {
"SourceEcsDataDiskId": {
"Type": "String",
"Description": "Create snapshot based on source ECS data disk",
"Label": "Source ECS data disk ID"
},
"SourceEcsSystemDiskId": {
"Type": "String",
"Description": "Create custom image based on source ECS system disk",
"Label": "Source ECS system disk ID"
},
"SourceEcsInstanceId": {
"Type": "String",
"Description": "Source ECS Instance",
"Label": "Source ECS Instance ID"
},
"LoginPassword": {
"NoEcho": true,
"Type": "String",
"Description": "ECS Login Password",
"AllowedPattern": "[a-zA-Z0-9-\\(\\)\\`\\~\\!@\\#\\$%\\^&\\*-+=\\|\\{\\}\\[\\]\\:\\;\\‘\\,\\.\\?\\/]*",
"Label": "ECS Login Password",
"MinLength": 8,
"MaxLength": 41
},
"NumberOfClonedEcs": {
"Type": "Number",
"Description": "The number of nodes will be cloned",
"MinValue": 1,
"Label": "Number of Cloned ECS",
"MaxValue": 100,
"Default": 1
}
},
"Resources": {
"CustomImage": {
"Type": "ALIYUN::ECS::CustomImage",
"Properties": {
"SnapshotId": {
"Ref": "SystemDiskSnapshot"
},
"Timeout": 600
}
},
"NewEcsInstance": {
"Type": "ALIYUN::ECS::InstanceGroupClone",
"Properties": {
"DiskMappings": [
{
"SnapshotId": {
"Fn::GetAtt": [
"DataDiskSnapshot",
"SnapshotId"
]
},
"Size": 20
}
],
"MinAmount": {
"Ref": "NumberOfClonedEcs"
},
"ImageId": {
"Ref": "CustomImage"
},
"SourceInstanceId": {
"Ref": "SourceEcsInstanceId"
},
"MaxAmount": {
"Ref": "NumberOfClonedEcs"
},
"Password": {
"Ref": "LoginPassword"
}
}
},
"DataDiskSnapshot": {
"Type": "ALIYUN::ECS::Snapshot",
"Properties": {
"DiskId": {
"Ref": "SourceEcsDataDiskId"
}
}
},
"SystemDiskSnapshot": {
"Type": "ALIYUN::ECS::Snapshot",
"Properties": {
"Timeout": 300,
"DiskId": {
"Ref": "SourceEcsSystemDiskId"
}
}
}
},
"Outputs": {
"NewEcsInstanceIds": {
"Value": {
"Fn::GetAtt": [
"NewEcsInstance",
"InstanceIds"
]
}
}
}
}
总结
在很多情况下,我们需要完全克隆一台ECS,例如应用扩容,ECS整体迁移等等,但是当前情况下,很多时候我们克隆ECS只能是手动创建,然后手动做数据迁移,这个在需要快速做应用部署,大量的运维的情况下是不可行的。ROS 基于模板实现了自动化的,快捷的,ECS完全克隆的解决方案。可以大大提高大家运维效率和减少运维的失误。