在之前的博客中我们提到了通过资源编排创建一个ECS实例。在实际的大规模使用中,还是非常不方便的。为了更快更方便的批量创建资源,我们提供了新的资源类型InstanceGroup
,它可以方便创建最多100台的同规格配置的资源,并且可以在创建的时候指定自动释放时间,您也可以不指定,当需要释放全部资源的时候通过删除该资源组或者通过ECS控制台释放这些实例。
-
ALIYUN::ECS::InstanceGroupClone
- 从已有的ECS实例快速Clone一组资源
ALIYUN::ECS::InstanceGroupClone
- 从已有的ECS实例快速Clone一组资源
-
ALIYUN::ECS::InstanceGroup
- 依据配置信息创建一组资源
ALIYUN::ECS::InstanceGroup
。
- 依据配置信息创建一组资源
InstanceGroup简介
相对于ALIYUN::ECS::Instance
, InstanceGroup
和InstanceGroupClone
提供了几个新的参数:
-
MaxAmount
- 当前资源组创建的最大的ECS实例的数量。目前最大支持100台。必填参数。
-
MinAmount
- 当前资源组创建的最小的ECS实例的数量,目前不生效,但是必须小于等于最大值,为未来扩展。必填参数。
-
AutoReleaseTime
- 由于资源编排创建的是按量付费的资源,所以可以指定自动的释放时间,格式为
yyyy-MM-ddTHH:mm:ssZ
。遵循ISO8601的UTC时间,相比北京时间要减去8个小时。如果您想在北京时间12月20日16点28分释放,您需要指定为2015-12-20T08:28:11Z
。时间范围为不小于当前时间半个小时,不大于当前时间3年。选填参数。
- 由于资源编排创建的是按量付费的资源,所以可以指定自动的释放时间,格式为
由于通过Group生成的资源为数组,所以这里的生成的模板返回的属性名称和类型也有不同。
-
InstanceIds:
- 当前实例组的实例Id数组,格式为['i-...1', 'i-...2',...]。
-
PublicIps
- 当前实例组的公网IP数组,格式为['##.##.##.##', '##.##.##.##',...]。
仅对经典网络有效
。
- 当前实例组的公网IP数组,格式为['##.##.##.##', '##.##.##.##',...]。
-
PrivateIps
- 当前实例组的私网IP数组,格式为['##.##.##.##', '##.##.##.##',...]。
仅对VPC网络有效
。
- 当前实例组的私网IP数组,格式为['##.##.##.##', '##.##.##.##',...]。
通过ALIYUN::ECS::InstanceGroupClone快速客隆一组ECS的资源
这个资源将会拷贝源实例:
- 实例规格
- 镜像ID
- 安全组ID
- 系统盘类型,名称,描述
- 数据盘类型,名称,描述,如果从快照创建,则从快照拷贝
- 网络配置,网络付费类型,网络带宽
- VPC类型的拷贝VSwitch
除了上面的属性,依然支持指定下面的属性,如果指定下面的属性就会覆盖默认属性的配置:
- 实例名称
- 实例描述
- 实例密码
- Tags配置
通过下面的模板可以快速的创建一组ECS的实例。这里您需要提供一个源实例ID来客隆,默认客隆1台同配置的ECS。
{
"ROSTemplateFormatVersion" : "2015-09-01",
"Parameters": {
"SourceInstanceId": {
"Type": "String"
},
"Password": {
"Type": "String",
"NoEcho": "true",
},
"MinAmount": {
"Type": "Number",
"Default": 1
},
"MaxAmount": {
"Type": "Number",
"Default": 1
},
},
"Resources" : {
"WebServer": {
"Type": "ALIYUN::ECS::InstanceGroupClone",
"Properties": {
"SourceInstanceId": {"Ref": "SourceInstanceId"},
"Password": {"Ref": "Password"},
"MinAmount": {"Ref": "MinAmount"},
"MaxAmount": {"Ref": "MaxAmount"}
}
}
},
"Outputs": {
"InstanceId": {
"Value" : {"Fn::GetAtt": ["WebServer","InstanceIds"]}
},
"PublicIp": {
"Value" : {"Fn::GetAtt": ["WebServer","PublicIps"]}
},
"PrivateIp": {
"Value" : {"Fn::GetAtt": ["WebServer","PrivateIps"]}
}
}
}
如果需要在创建的时候指定自动释放时间,您需要加上一个参数AutoReleaseTime
。
{
"ROSTemplateFormatVersion" : "2015-09-01",
"Parameters": {
"SourceInstanceId": {
"Type": "String"
},
"Password": {
"Type": "String",
"NoEcho": "true",
"Description": "实例的密码。8-30个字符,必须同时包含三项(大、小写字母,数字和特殊符号)"
},
"MinAmount": {
"Type": "Number",
"Default": 1
},
"MaxAmount": {
"Type": "Number",
"Default": 1
},
"AutoReleaseTime": {
"Type": "String",
"Description": "自动释放时间, 使用yyyy-MM-ddTHH:mm:ssZ格式的UTC0时间,相比北京时间减8个小时。暂时支持当前时间大于半个小时,不大于当年时间3年。"
}
},
"Resources" : {
"WebServer": {
"Type": "ALIYUN::ECS::InstanceGroupClone",
"Properties": {
"SourceInstanceId": {"Ref": "SourceInstanceId"},
"Password": {"Ref": "Password"},
"MinAmount": {"Ref": "MinAmount"},
"MaxAmount": {"Ref": "MaxAmount"},
"AutoReleaseTime": {"Ref": "AutoReleaseTime"}
}
}
},
"Outputs": {
"InstanceId": {
"Value" : {"Fn::GetAtt": ["WebServer","InstanceIds"]}
},
"PublicIp": {
"Value" : {"Fn::GetAtt": ["WebServer","PublicIps"]}
},
"PrivateIp": {
"Value" : {"Fn::GetAtt": ["WebServer","PrivateIps"]}
}
}
}
使用模板参数创建一组ECS实例
类似于创建一个ECS的实例,这里只需要添加新的参数MaxAmount
,MinAmount
, AutoReleaseTime
即可。
{
"ROSTemplateFormatVersion" : "2015-09-01",
"Description": "一个简配的ecs实例,包括一个安全组,用户只需要指定imageId",
"Parameters" : {
"ImageId": {
"Type" : "String",
"Description": "镜像文件 ID,表示启动实例时选择的镜像资源"
},
"InstanceType": {
"Type": "String",
"Description": "实例的资源规格"
},
"SecurityGroupId": {
"Type": "String",
"Description": "安全组Id"
},
"MinAmount": {
"Type": "Number",
"Default": 1
},
"MaxAmount": {
"Type": "Number",
"Default": 1
},
"AutoReleaseTime": {
"Type": "String",
"Description": "自动释放时间, 使用yyyy-MM-ddTHH:mm:ssZ格式的UTC0时间,相比北京时间减8个小时。暂时支持当前时间大于半个小时,不大于当年时间3年。"
}
},
"Resources" : {
"WebServer": {
"Type": "ALIYUN::ECS::InstanceGroup",
"Properties": {
"ImageId" : {"Ref": "ImageId"},
"InstanceType": {"Ref": "InstanceType"},
"SecurityGroupId": {"Ref": "SecurityGroupId"},
"MinAmount": {"Ref": "MinAmount"},
"MaxAmount": {"Ref": "MaxAmount"},
"AutoReleaseTime": {"Ref": "AutoReleaseTime"}
}
}
},
"Outputs": {
"InstanceId": {
"Value" : {"Fn::GetAtt": ["WebServer","InstanceIds"]}
},
"PublicIp": {
"Value" : {"Fn::GetAtt": ["WebServer","PublicIps"]}
},
"PrivateIp": {
"Value" : {"Fn::GetAtt": ["WebServer","PrivateIps"]}
}
}
}
如果需要创建IO优化的实例或者N2规格的机型,您还需要额外额外设置两个属性。"SystemDisk_Category": "cloud_efficiency"
and "IoOptimized": "optimized"
。 样例参照下文。
{
"ROSTemplateFormatVersion": "2015-09-01",
"Description": "一个简配的ecs实例,包括一个安全组,用户只需要指定imageId",
"Parameters": {
"AutoReleaseTime": {
"Description": "自动释放时间, 使用yyyy-MM-ddTHH:mm:ssZ格式的UTC0时间,相比北京时间减8个小时。暂时支持当前时间大于半个小时,不大于当年时间3年。",
"Type": "String"
},
"ImageId": {
"Description": "镜像文件 ID,表示启动实例时选择的镜像资源",
"Type": "String"
},
"InstanceType": {
"Description": "实例的资源规格",
"Type": "String"
},
"MaxAmount": {
"Default": 1,
"Type": "Number"
},
"MinAmount": {
"Default": 1,
"Type": "Number"
},
"SecurityGroupId": {
"Description": "安全组Id",
"Type": "String"
}
},
"Resources": {
"WebServer": {
"Properties": {
"AutoReleaseTime": {
"Ref": "AutoReleaseTime"
},
"ImageId": {
"Ref": "ImageId"
},
"InstanceType": {
"Ref": "InstanceType"
},
"IoOptimized": "optimized",
"MaxAmount": {
"Ref": "MaxAmount"
},
"MinAmount": {
"Ref": "MinAmount"
},
"SecurityGroupId": {
"Ref": "SecurityGroupId"
},
"SystemDisk_Category": "cloud_efficiency"
},
"Type": "ALIYUN::ECS::InstanceGroup"
}
},
"Outputs": {
"InstanceId": {
"Value": {
"Fn::GetAtt": [
"WebServer",
"InstanceIds"
]
}
},
"PrivateIp": {
"Value": {
"Fn::GetAtt": [
"WebServer",
"PrivateIps"
]
}
},
"PublicIp": {
"Value": {
"Fn::GetAtt": [
"WebServer",
"PublicIps"
]
}
}
}
}
欢饮提出您对资源编排的需求和反馈,谢谢!