compute-nest-best-practice/master-slave-ecs/template.yaml (306 lines of code) (raw):
ROSTemplateFormatVersion: '2015-09-01'
Description:
zh-cn: 创建主从ECS架构,支持付费方式选择,自动配置安全组与脚本,实现主从节点间通信。
en: Establish a primary-replica ECS (Elastic Compute Service) architecture, facilitating
the selection of payment options, automated configuration of security groups,
and script deployment. Ensure seamless communication between the primary and replica
nodes.
Parameters:
PayType:
Type: String
Label:
en: ECS Instance Charge Type
zh-cn: 付费类型
Default: PostPaid
AllowedValues:
- PostPaid
- PrePaid
AssociationProperty: ChargeType
AssociationPropertyMetadata:
LocaleKey: InstanceChargeType
PayPeriodUnit:
Type: String
Label:
en: Pay Period Unit
zh-cn: 购买资源时长周期
Default: Month
AllowedValues:
- Month
- Year
AssociationProperty: PayPeriodUnit
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Not:
Fn::Equals:
- ${PayType}
- PostPaid
PayPeriod:
Type: Number
Description:
en: When the resource purchase duration is Month, the value of Period ranges from 1 to 9, 12, 24, 36, 48, or 60. <br><b><font color='red'> When ECS instance types are PrePaid valid </b></font>
zh-cn: 当购买资源时长为Month时,Period取值:1~9 <br><b><font color='red'>当ECS实例类型为PrePaid有效</b></font>
Label:
en: Period
zh-cn: 购买资源时长
Default: 1
AllowedValues:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
AssociationProperty: PayPeriod
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Not:
Fn::Equals:
- ${PayType}
- PostPaid
ZoneId:
Type: String
AssociationProperty: ALIYUN::ECS::Instance::ZoneId
Label:
en: VSwitch Availability Zone
zh-cn: 交换机可用区
VpcId:
AssociationProperty: ALIYUN::ECS::VPC::VPCId
Type: String
Description:
en: Please search the ID starting with (vpc-xxx) from console-Virtual Private Cloud
zh-cn: 现有虚拟专有网络的实例ID
Label:
en: VPC ID
zh-cn: 专有网络VPC实例ID
VSwitchId:
AssociationProperty: ALIYUN::ECS::VSwitch::VSwitchId
AssociationPropertyMetadata:
VpcId: ${VpcId}
ZoneId: ${ZoneId}
Type: String
Description:
en: Instance ID of existing business network switches, console-Virtual Private Cloud-VSwitches under query
zh-cn: 现有业务网络交换机的实例ID
Label:
en: VSwitch ID
zh-cn: 交换机实例ID
EcsInstanceType:
Type: String
Label:
en: Instance Type
zh-cn: 实例类型
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
InstanceChargeType: ${PayType}
SystemDiskCategory:
Type: String
AllowedValues:
- cloud_efficiency
- cloud_ssd
- cloud
- cloud_essd
Label:
en: System Disk Category
zh-cn: 系统盘类型
Default: cloud_essd
AssociationPropertyMetadata:
LocaleKey: DiskCategory
SystemDiskSize:
Default: 40
Type: Number
Label:
zh-cn: 系统盘空间 (GB)
en: System Disk Space (GB)
InstancePassword:
NoEcho: true
Type: String
Description:
en: Server login password, Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;<>,.?/ Special symbol in)
zh-cn: 服务器登录密码,长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;<>,.?/ 中的特殊符号)
Label:
en: Instance Password
zh-cn: 实例密码
ConstraintDescription:
en: Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;<>,.?/ Special symbol in)
zh-cn: 长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;<>,.?/ 中的特殊符号)
AssociationProperty: ALIYUN::ECS::Instance::Password
AllowedPattern: '^[a-zA-Z0-9-\(\)\`\~\!\@\#\$\%\^\&\*\_\-\+\=\|\{\}\[\]\:\;\<\>\,\.\?\/]*$'
MinLength: 8
MaxLength: 30
SlaveNodeCount:
Type: Number
Label:
en: Instance Count
zh-cn: Node节点数量
Default: 1
# 资源配置
Resources:
EcsSecurityGroup:
Type: ALIYUN::ECS::SecurityGroup
Properties:
SecurityGroupName:
Ref: ALIYUN::StackName
VpcId:
Ref: VpcId
SecurityGroupEgress:
- PortRange: '-1/-1'
Priority: 1
IpProtocol: all
DestCidrIp: 0.0.0.0/0
NicType: intranet
MasterInstanceGroup:
Type: ALIYUN::ECS::InstanceGroup
Properties:
# 实例名
InstanceName:
Fn::Join:
- '-'
- - 'master'
- '[1,4]'
IoOptimized: optimized
# 付费类型
InstanceChargeType:
Ref: PayType
PeriodUnit:
Ref: PayPeriodUnit
Period:
Ref: PayPeriod
# 网络配置
ZoneId:
Ref: ZoneId
VpcId:
Ref: VpcId
VSwitchId:
Ref: VSwitchId
SecurityGroupId:
Ref: EcsSecurityGroup
# 磁盘类型和大小
SystemDiskCategory:
Ref: SystemDiskCategory
SystemDiskSize:
Ref: SystemDiskSize
MaxAmount: 1
# 镜像
ImageId: centos_7
# 实例类型
InstanceType:
Ref: EcsInstanceType
Password:
Ref: InstancePassword
# 公网关闭
AllocatePublicIP: false
# 启动脚本
UserData: |-
#!/bin/bash
SlaveInstanceGroup:
Type: ALIYUN::ECS::InstanceGroup
Properties:
# 实例名
InstanceName:
Fn::Join:
- '-'
- - 'slave'
- '[1,4]'
IoOptimized: optimized
# 付费类型
InstanceChargeType:
Ref: PayType
PeriodUnit:
Ref: PayPeriodUnit
Period:
Ref: PayPeriod
# 网络配置
ZoneId:
Ref: ZoneId
VpcId:
Ref: VpcId
VSwitchId:
Ref: VSwitchId
SecurityGroupId:
Ref: EcsSecurityGroup
# 磁盘类型和大小
SystemDiskCategory:
Ref: SystemDiskCategory
SystemDiskSize:
Ref: SystemDiskSize
MaxAmount:
Ref: SlaveNodeCount
# 镜像
ImageId: centos_7_9_x64_20G_alibase_20220727.vhd
# 实例类型
InstanceType:
Ref: EcsInstanceType
Password:
Ref: InstancePassword
# 公网关闭
AllocatePublicIP: false
# 启动脚本
UserData: |-
#!/bin/bash
# 到master执行的命令
MasterRunCommand:
Type: ALIYUN::ECS::RunCommand
DependsOn:
- MasterInstanceGroup
- SlaveInstanceGroup
Properties:
CommandContent:
Fn::Sub:
# 将slave的ip数组输入到/root/conf.txt
# 可以在后续的步骤中通过conf.txt里的内容完成master的初始化
- |
#!/bin/bash
cat >> /root/conf.txt << "EOF"
SlaveIps=${SlaveIps}
EOF
- SlaveIps:
Fn::GetAtt:
- SlaveInstanceGroup
- PrivateIps
Type: RunShellScript
InstanceIds:
Fn::GetAtt:
- MasterInstanceGroup
- InstanceIds
Timeout: 300
# 到slave执行的命令
SlaveRunCommand:
Type: ALIYUN::ECS::RunCommand
DependsOn:
- MasterInstanceGroup
- SlaveInstanceGroup
Properties:
CommandContent:
Fn::Sub:
# 将master的ip输入到/root/conf.txt
# 可以在后续的步骤中通过conf.txt里的内容完成slave的初始化
- |
#!/bin/bash
cat >> /root/conf.txt << "EOF"
MasterIp=${MasterIp}
EOF
- MasterIp:
Fn::Select:
- 0
- Fn::GetAtt:
- MasterInstanceGroup
- PrivateIps
Type: RunShellScript
InstanceIds:
Fn::GetAtt:
- SlaveInstanceGroup
- InstanceIds
# 超时时间
Timeout: '300'
Metadata:
ALIYUN::ROS::Interface:
# 分组信息
ParameterGroups:
- Parameters:
- PayType
- PayPeriodUnit
- PayPeriod
Label:
default:
en: PayType Configuration
zh-cn: 付费类型配置
- Parameters:
- EcsInstanceType
- SystemDiskCategory
- SystemDiskSize
- InstancePassword
- SlaveNodeCount
Label:
default:
en: Instance
zh-cn: ECS实例配置
- Parameters:
- ZoneId
Label:
default:
zh-cn: 可用区配置
en: Zone Configuration
- Parameters:
- VpcId
- VSwitchId
Label:
default:
zh-cn: 选择已有基础资源配置
en: Choose existing Infrastructure Configuration