compute-nest-best-practice/ecs-adbpg/template.yaml (354 lines of code) (raw):
ROSTemplateFormatVersion: '2015-09-01'
Description:
zh-cn: 该模板用于创建一个包含ECS实例、安全组、Greenplum数据库实例以及执行初始化脚本的资源栈。支持预付费和按量付费模式选择,自定义实例规格、系统盘配置、网络设置及数据库账户安全设置。
en: This template is designed to provision a resource stack comprising an Elastic
Compute Service (ECS) instance, security group, Greenplum Database instance, and
the execution of initialization scripts. It accommodates both prepaid and pay-as-you-go
payment models, with options for customizing instance specifications, system disk
configurations, network setups, as well as security settings for database accounts.
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::Or':
- 'Fn::Equals':
- '${PayType}'
- PrePaid
- 'Fn::Equals':
- '${PayType}'
- undefined
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)
InstanceCount:
Type: Number
Label:
en: Instance Count
zh-cn: Node节点数量
Default: 1
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
DBMasterUserName:
Type: String
Description:
en: Primary account name of the database instance.
zh-cn: 数据库实例的主账号名称。
ConstraintDescription:
en: Consist of 2 to 16 characters of lowercase letters, underline. Must begin with a letter and be end with an alphanumeric character
zh-cn: 由 2 到 16 个小写字母组成,下划线。必须以字母开头,以字母数字字符结尾
Label:
zh-cn: 数据库账号名称
en: DB Username
Default: rdsuser
MaxLength: 16
MinLength: 2
DBMasterPassword:
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,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;<>,.?/ 中的特殊符号)
AllowedPattern: '^[a-zA-Z0-9-\(\)\`\~\!\@\#\$\%\^\&\*\_\-\+\=\|\{\}\[\]\:\;\<\>\,\.\?\/]*$'
MinLength: 8
MaxLength: 30
Default: 'pleasechangeThis'
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
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
Password:
Ref: InstancePassword
ImageId: centos_7
InstanceType:
Ref: EcsInstanceType
AllocatePublicIP: true
# 公网带宽
InternetMaxBandwidthOut: 20
GPDB:
Type: ALIYUN::GPDB::ElasticDBInstance
Properties:
MasterNodeNum: 1
SegNodeNum: 4
InstanceSpec: 8C32G
EngineVersion: '6.0'
ZoneId:
Ref: ZoneId
VPCId:
Ref: VpcId
PayType:
Ref: PayType
VSwitchId:
Ref: VSwitchId
Period:
Ref: PayPeriod
PeriodUnit:
Ref: PayPeriodUnit
DBInstanceCategory: Basic
SegStorageType: cloud_essd
StorageSize: 400
SecurityIPList:
Fn::Join:
- ','
- Fn::GetAtt:
- InstanceGroup
- PrivateIps
GPDBAccount:
Type: ALIYUN::GPDB::Account
Properties:
DBInstanceId:
Fn::GetAtt:
- GPDB
- DBInstanceId
AccountPassword:
Ref: DBMasterPassword
AccountName:
Ref: DBMasterUserName
WaitCondition:
Type: ALIYUN::ROS::WaitCondition
DependsOn:
- GPDB
- GPDBAccount
Properties:
Count: 1
Handle:
Ref: WaitConditionHandle
Timeout: 300
WaitConditionHandle:
Type: ALIYUN::ROS::WaitConditionHandle
InstanceRunCommand:
Type: ALIYUN::ECS::RunCommand
Properties:
CommandContent:
'Fn::Sub':
- |
#!/bin/bash
cat >> /root/conf.txt << "EOF"
ConnectionString=${DBConnectString}
echo ${DBMasterUserName} ${DBMasterPassword} ${DBConnectString}
EOF
# 安装资源rpm
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# 安装postgresql11客户端,服务端
yum install -y postgresql11
yum install -y postgresql11-server
# 连接数据库
# psql -h ${DBConnectString} -p 5432 -U ${DBMasterUsername}
# 输入密码即可连接
# ${DBMasterPassword}
# 执行成功回调WaitCondition结束waitCondition的等待
${CurlCli} -d "{\"Data\" : \"Success\", \"status\" : \"SUCCESS\"}"
# 获取到waitConditionHandle的地址放到 ${CurlCli}变量里
- DBMasterUsername:
Ref: DBMasterUserName
DBMasterPassword:
Ref: DBMasterPassword
# 从Database的Output中拿到内网连接串
DBConnectString:
Fn::GetAtt:
- GPDB
- ConnectionString
CurlCli:
Fn::GetAtt:
- WaitConditionHandle
- CurlCli
Type: RunShellScript
InstanceIds:
'Fn::GetAtt':
- InstanceGroup
- InstanceIds
Timeout: '300'
# 定义输出
Outputs:
# 将数据库连接地址显示在控制台
ConnectionAddress:
Value:
Fn::Sub:
- https://gpdbnext.console.aliyun.com/gpdb/cn-hangzhou/list/nav/${DBClusterId}/storageelastic/basic
- DBClusterId:
Fn::GetAtt:
- GPDB
- DBInstanceId
Metadata:
'ALIYUN::ROS::Interface':
ParameterGroups:
- Parameters:
- VpcId
- ZoneId
- VSwitchId
Label:
default:
zh-cn: 选择已有基础资源配置
en: Choose existing Infrastructure Configuration
- Parameters:
- PayType
- PayPeriodUnit
- PayPeriod
Label:
default:
en: PayType Configuration
zh-cn: 付费类型配置
- Parameters:
- EcsInstanceType
- SystemDiskCategory
- SystemDiskSize
- InstanceCount
- InstancePassword
Label:
default:
en: Instance
zh-cn: ECS实例配置
- Parameters:
- DBMasterUserName
- DBMasterPassword
Label:
default:
en: Database
zh-cn: ADB