compute-nest-best-practice/ecs-redis/template.yaml (248 lines of code) (raw):
ROSTemplateFormatVersion: '2015-09-01'
Description:
zh-cn: 部署一个带有安全组的ECS实例和Redis实例,配置了公网访问和自动扩展,支持指定付费方式和资源时长。
en: Deploy an ECS instance with a security group and a Redis instance, configured
for public network access and auto-scaling, accommodating specified payment methods
and resource duration.
Parameters:
ZoneId:
Type: String
Description:
zh-cn: 创建实例前,请确认可用区是否支持Redis资源的规格。
en: Before you create an instance, confirm that the Availability Zone
supports the specifications of Redis resources.
AssociationProperty: ALIYUN::ECS::Instance:ZoneId
Label:
en: Zone ID
zh-cn: 可用区
VpcId:
AssociationProperty: ALIYUN::ECS::VPC::VPCId
Type: String
Label:
zh-cn: VPC ID
en: VPC ID
VSwitchId:
Type: String
Label:
zh-cn: 交换机ID
en: VSwitch ID
Description:
zh-cn: 现有网络交换机的实例ID
en: The instance ID of an existing network switch.
AssociationProperty: ALIYUN::ECS::VSwitch::VSwitchId
AssociationPropertyMetadata:
VpcId: ${VpcId}
ZoneId: ${ZoneId}
PayType:
Type: String
Label:
zh-cn: 付费类型
en: ECS Instance Charge Type
AssociationProperty: ChargeType
AssociationPropertyMetadata:
LocaleKey: InstanceChargeType
Default: PostPaid
AllowedValues:
- PostPaid
- PrePaid
PayPeriodUnit:
Type: String
Label:
zh-cn: 购买资源时长周期
en: Pay Period Unit
AssociationProperty: PayPeriodUnit
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Not:
Fn::Equals:
- ${PayType}
- PostPaid
Default: Month
AllowedValues:
- Month
- Year
PayPeriod:
Type: Number
Label:
zh-cn: 购买资源时长
en: Period
AssociationProperty: PayPeriod
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Not:
Fn::Equals:
- ${PayType}
- PostPaid
Default: 1
AllowedValues:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
EcsInstanceType:
Type: String
Label:
en: Instance Type
zh-cn: 实例类型
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
InstanceChargeType: ${PayType}
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
Resources:
# 安全组
EcsSecurityGroup:
Type: ALIYUN::ECS::SecurityGroup
Properties:
# 使用默认名称
SecurityGroupName:
Ref: ALIYUN::StackName
VpcId:
Ref: VpcId
# 入方向开放80端口
SecurityGroupIngress:
- Priority: 1
PortRange: 80/80
NicType: internet
SourceCidrIp: 0.0.0.0/0
IpProtocol: tcp
# 出方向全开
SecurityGroupEgress:
- Priority: 1
PortRange: -1/-1
DestCidrIp: 0.0.0.0/0
NicType: intranet
IpProtocol: all
# ecs配置
EcsInstanceGroup:
Type: ALIYUN::ECS::InstanceGroup
Properties:
InstanceName:
Fn::Join:
- '-'
- - Ref: ALIYUN::StackName
- '[1,4]'
IoOptimized: optimized
PeriodUnit:
Ref: PayPeriodUnit
Period:
Ref: PayPeriod
InstanceChargeType:
Ref: PayType
SecurityGroupId:
Ref: EcsSecurityGroup
VSwitchId:
Ref: VSwitchId
MaxAmount: 1
SystemDiskCategory: cloud_essd
SystemDiskSize: 100
VpcId:
Ref: VpcId
ZoneId:
Ref: ZoneId
ImageId: centos_7
InstanceType:
Ref: EcsInstanceType
Password:
Ref: InstancePassword
AllocatePublicIP: true
InternetMaxBandwidthOut: 5
UserData:
Fn::Sub:
- |
#!/bin/bash
cat >> /root/conf.txt << "EOF"
DBConnectString=${DBConnectString}
EOF
- DBConnectString:
Fn::GetAtt:
- RedisInstance
- ConnectionDomain
# redis 实例配置
RedisInstance:
Type: ALIYUN::REDIS::Instance
Properties:
VpcId:
Ref: VpcId
VSwitchId:
Ref: VSwitchId
InstanceClass: redis.master.small.default
EngineVersion: '5.0'
EvictionPolicy: 'noeviction'
ZoneId:
Ref: ZoneId
InstanceName:
Ref: ALIYUN::StackName
Password:
Ref: InstancePassword
Whitelist:
Type: ALIYUN::REDIS::Whitelist
Properties:
InstanceId:
Fn::GetAtt:
- RedisInstance
- InstanceId
SecurityIps:
Fn::Join:
- ','
- Fn::GetAtt:
- EcsInstanceGroup
- PrivateIps
Metadata:
'ALIYUN::ROS::Interface':
ParameterGroups:
- Parameters:
- ZoneId
Label:
default:
zh-cn: 可用区配置
en: Zone Configuration
- Parameters:
- VpcId
- VSwitchId
Label:
default:
zh-cn: 选择已有基础资源配置
en: Choose existing Infrastructure Configuration
- Parameters:
- PayType
- PayPeriodUnit
- PayPeriod
Label:
default:
zh-cn: 付费类型配置
en: PayType Configuration
- Parameters:
- EcsInstanceType
- InstancePassword
Label:
default:
en: Instance
zh-cn: ECS实例配置
- Parameters:
- InstanceClass
Label:
default:
zh-cn: Redis配置
en: Redis Configuration
Outputs:
InstanceId:
Value:
'Fn::GetAtt':
- RedisInstance
- InstanceId