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