compute-nest-best-practice/ecs-polardb/template.yaml (345 lines of code) (raw):

ROSTemplateFormatVersion: '2015-09-01' Description: zh-cn: 创建一个ECS实例与PolarDB数据库集群,支持付费方式、资源时长配置,自动设置安全组、系统盘类型与大小,并通过脚本初始化ECS连接数据库。 en: Provision an ECS (Elastic Compute Service) instance along with a PolarDB database cluster, enabling selection of payment options and configuration of resource duration. Automatically configure security groups, system disk type, and disk size, and initialize the ECS to connect to the database via script. 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: 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 InstanceCount: Type: Number Label: en: Instance Count zh-cn: Node节点数量 Default: 1 PolarDBNodeClass: Type: String Label: PolarDB Mysql资源规格大小 Default: polar.mysql.x4.large AssociationProperty: ALIYUN::PolarDB::Instance::InstanceType PolarDBAccountName: Type: String Default: polar_root Label: zh-cn: polarDB 用户名 en: polarDB Account Name PolarDBPassword: NoEcho: true Type: String Description: en: 'Length 8-32 characters, can contain size letters, Numbers and special symbols, including:! @ # $ % ^ & * ( ) _ + - =' zh-cn: 长度8-32个字符,可包含大小字母、数字及特殊符号(包含:!@#$%^&*()_+-=) Label: en: PolarDB Password zh-cn: PolarDB密码 ConstraintDescription: en: '8-32 characters, can contain size letters, Numbers and special symbols, including:! @ # $ % ^ & * ( ) _ + - =' zh-cn: 8-32个字符,可包含大小字母、数字及特殊符号(包含:!@#$%^&*()_+-=) AllowedPattern: '^[a-zA-Z0-9-\!\@\#\$\%\^\&\*\-\+\=\_]*$' MinLength: 8 MaxLength: 32 Metadata: ALIYUN::ROS::Interface: ParameterGroups: - Parameters: - PayType - PayPeriodUnit - PayPeriod Label: default: en: PayType Configuration zh-cn: 付费类型配置 - Parameters: - EcsInstanceType - SystemDiskCategory - SystemDiskSize - InstancePassword - InstanceCount Label: default: en: Instance zh-cn: ECS实例配置 - Parameters: - PolarDBNodeClass - PolarDBAccountName - PolarDBPassword Label: default: en: Database zh-cn: PolarDB数据库配置 - Parameters: - ZoneId Label: default: zh-cn: 可用区配置 en: Zone Configuration - Parameters: - VpcId - VSwitchId Label: default: zh-cn: 选择已有基础资源配置 en: Choose existing Infrastructure Configuration Mappings: {} Conditions: {} Outputs: {} 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 Database: Type: ALIYUN::POLARDB::DBCluster Properties: ZoneId: Ref: ZoneId VpcId: Ref: VpcId VSwitchId: Ref: VSwitchId DBType: MySQL DBVersion: '5.7' DBNodeClass: Ref: PolarDBNodeClass SecurityIPList: Fn::Join: - ',' - Fn::GetAtt: - InstanceGroup - PrivateIps PayType: Ref: PayType PeriodUnit: Ref: PayPeriodUnit Period: Ref: PayPeriod PolarDBAccount: Type: ALIYUN::POLARDB::Account DependsOn: - Database Properties: DBClusterId: Ref: Database AccountDescription: PolarDB数据库管理账号 AccountName: Ref: PolarDBAccountName AccountType: Super AccountPassword: Ref: PolarDBPassword InstanceGroup: Type: ALIYUN::ECS::InstanceGroup Properties: InstanceName: Fn::Join: - '-' - - Ref: ALIYUN::StackName - '[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: InstanceCount ImageId: centos_7 InstanceType: Ref: EcsInstanceType Password: Ref: InstancePassword AllocatePublicIP: false UserData: '-|' WaitCondition: Type: ALIYUN::ROS::WaitCondition DependsOn: - Database - InstanceGroup - PolarDBAccount Properties: Count: 1 Handle: Ref: WaitConditionHandle Timeout: 300 WaitConditionHandle: Type: ALIYUN::ROS::WaitConditionHandle InstanceRunCommand: Type: ALIYUN::ECS::RunCommand DependsOn: - Database - PolarDBAccount Properties: CommandContent: Fn::Sub: - | #!/bin/bash cat >> /root/conf.txt << "EOF" PolarDBAccountName=${PolarDBAccountName} PolarDBPassword=${PolarDBPassword} PolarDBConnectString=${PolarDBConnectString} EOF # 继续进行初始化 在这里补上自己的代码 数据库的初始化可以用shell mysqldump完成 # init.sh /root/conf.txt # init.sh ${PolarDBAccountName} ${PolarDBPassword} ${PolarDBConnectString} 也是可以的 # 执行成功回调WaitCondition结束waitCondition的等待 ${CurlCli} -d "{\"Data\" : \"Success\", \"status\" : \"SUCCESS\"}" - PolarDBAccountName: Ref: PolarDBAccountName PolarDBPassword: Ref: PolarDBPassword PolarDBConnectString: Fn::GetAtt: - Database - ClusterConnectionString CurlCli: Fn::GetAtt: - WaitConditionHandle - CurlCli Type: RunShellScript InstanceIds: Fn::GetAtt: - InstanceGroup - InstanceIds Timeout: '300'