compute-nest-best-practice/opensource/consul/single_consul.yaml (365 lines of code) (raw):
ROSTemplateFormatVersion: '2015-09-01'
Description:
zh-cn: 创建单个ECS实例部署Consul服务,配置安全组与数据盘,弹性IP提供公网访问选项。
en: Create a single ECS instance to deploy the Consul service, configure security
groups and data disks, with Elastic IP providing public internet access options.
Parameters:
VpcId:
AssociationProperty: ALIYUN::ECS::VPC::VPCId
Type: String
Description:
zh-cn: 控制台-VPC-专有网络下查询
en: Please search the ID starts with (vpc-xxx)from console-Virtual Private Cloud
Label:
zh-cn: 现有VPC的实例ID
en: Existing VPC ID
ZoneId:
AssociationProperty: ALIYUN::ECS::Instance::ZoneId
Type: String
Description:
zh-cn: 现有交换机的可用区ID
en: Availability ID for existing switches
Label:
zh-cn: 交换机可用区
en: VSwitch Zone ID
VSwitchId:
AssociationProperty: ALIYUN::ECS::VSwitch::VSwitchId
AssociationPropertyMetadata:
VpcId: VpcId
ZoneId: ZoneId
Type: String
Description:
zh-cn: 现有业务网络交换机的实例ID,控制台-VPC-专有网络-交换机下查询
en: Please search the business VSwitch ID starts with(vsw-xxx)from console-Virtual Private Cloud-VSwitches
Label:
zh-cn: 网络交换机ID
en: VSwitch ID
InstanceType:
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ZoneId
Type: String
Description:
zh-cn: 选择机型前请先确认当前可用区下该机型是否有货,部分机型需要提前报备
en: Before selecting the model please confirm that the current available zone under the model is in stock, some models need to be reported in advance
Label:
zh-cn: 实例规格
en: Instance Type
PayType:
Type: String
Label:
en: ECS Instance Charge Type
zh-cn: 付费类型
Default: PostPaid
AllowedValues:
- PostPaid
- PrePaid
AssociationProperty: ChargeType
AssociationPropertyMetadata:
LocaleKey: InstanceChargeType
PayPeriodUnit:
Type: String
Description:
en: Pay Period Unit
zh-cn: 购买资源时长周期
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
InstancePassword:
AssociationProperty: ALIYUN::ECS::Instance::Password
Type: String
Description:
zh-cn: 服务器登录密码,长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)
en: Server login password, Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in)
MinLength: 8
Label:
zh-cn: 实例密码
en: Instance Password
AllowedPattern: '[0-9A-Za-z\_\-\&:;''<>,=%`~!@#\(\)\$\^\*\+\|\{\}\[\]\.\?\/]+$'
NoEcho: true
MaxLength: 30
ConstraintDescription:
zh-cn: 长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)。
en: Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in).
AllocatePublicIp:
Type: Boolean
Description:
zh-cn: 是否开启公网访问
en: Whether to enable public network access
Label:
zh-cn: 是否开启公网访问
en: Whether to enable public network access
SystemDiskCategory:
Type: String
AllowedValues:
- cloud_efficiency
- cloud_essd
Label:
en: System Disk Category
zh-cn: 系统盘类型
Default: cloud_essd
AssociationPropertyMetadata:
LocaleKey: DiskCategory
SystemDiskSize:
Default: 100
Type: Number
Label:
zh-cn: 系统盘空间 (GB)
en: System Disk Space (GB)
DataDiskCategory:
Type: String
AllowedValues:
- cloud_efficiency # 高效云盘
- cloud_essd # ESSD云盘
Default: cloud_efficiency
Label:
en: Disk Type
zh-cn: 数据盘类型
AssociationPropertyMetadata:
LocaleKey: DiskCategory
DataDiskSize:
Default: 40
Type: Number
Description:
zh-cn: 数据盘大小, 取值范围:[40, 500], 单位:GB。
en: 'System disk size of each node, range of values: 40-500, units: GB.'
MinValue: 40
MaxValue: 500
Label:
zh-cn: 数据盘空间
en: Data Disk Space
Resources:
SecurityGroup:
Type: ALIYUN::ECS::SecurityGroup
Properties:
SecurityGroupName:
Ref: ALIYUN::StackName
SecurityGroupIngress:
- Priority: 1
PortRange: 8500/8500
NicType: intranet
SourceCidrIp: 0.0.0.0/0
IpProtocol: tcp
VpcId:
Ref: VpcId
ConsulServer:
DependsOn:
- SecurityGroup
Type: ALIYUN::ECS::InstanceGroup
Properties:
UserData:
Fn::Sub:
- |
#!/bin/bash
# 挂盘到/data
cat >> /root/InitDataDisk.sh << "EOF"
#!/bin/bash
echo "p
n
p
w
" | fdisk -u /dev/vdb
EOF
/bin/bash /root/InitDataDisk.sh
rm -f /root/InitDataDisk.sh
mkfs -t ext4 /dev/vdb1
cp /etc/fstab /etc/fstab.bak
mkdir /data
echo `blkid /dev/vdb1 | awk '{print $2}' | sed 's/\\\"//g'` /data ext4 defaults 0 0 >> /etc/fstab
mount -a
#环境初始化
HOSTNAME=`hostname`
IP_SELF=`hostname -I | awk '{print $1}'`
yum install -y java-1.8.0-openjdk-devel.x86_64
mkdir /opt/consul
cd /opt/consul
wget '{{ computenest::file::DemoFirst }}'
yum -y install unzip
unzip consul_1.7.2_linux_amd64.zip
ln -s /opt/consul/consul /usr/bin/consul
echo 'consul agent -dev -ui -node='$HOSTNAME' -bind='$IP_SELF '-client=0.0.0.0 -data-dir=/data/consul' >> /opt/consul/startConsul.sh
# 这里配置安装脚本
cat >> /usr/lib/systemd/system/consul.service << "EOF"
[Unit]
Description=consul
After=network.target
[Service]
ExecStart=/bin/bash /opt/consul/startConsul.sh
ExecStop=/bin/bash -c 'consul leave'
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
# 配置启动脚本
systemctl enable consul
systemctl start consul
${CurlCli} -d "{\"Data\" : \"Success\", \"status\" : \"SUCCESS\"}"
- CurlCli:
Fn::GetAtt:
- RosWaitConditionHandle
- CurlCli
ZoneId:
Ref: ZoneId
VpcId:
Ref: VpcId
Password:
Ref: InstancePassword
SecurityGroupId:
Ref: SecurityGroup
HostName: Consul-[0,3]
PeriodUnit:
Ref: PayPeriodUnit
Period:
Ref: PayPeriod
InstanceChargeType:
Ref: PayType
SystemDiskCategory:
Ref: SystemDiskCategory
SystemDiskSize:
Ref: SystemDiskSize
DiskMappings:
- Category:
Ref: DataDiskCategory
Size:
Ref: DataDiskSize
AllocatePublicIP:
Ref: AllocatePublicIp
IoOptimized: optimized
VSwitchId:
Ref: VSwitchId
ImageId: centos_7
InstanceName: CONSUL-[0,3]
InstanceType:
Ref: InstanceType
InternetMaxBandwidthOut:
Fn::If:
- AllocatePublicIpOn
- 10
- 0
MaxAmount: 1
RosWaitConditionHandle:
Type: ALIYUN::ROS::WaitConditionHandle
RosWaitCondition:
Type: ALIYUN::ROS::WaitCondition
Properties:
Count: 1
Handle:
Ref: RosWaitConditionHandle
Timeout: 1000
Conditions:
AllocatePublicIpOn:
Fn::Equals:
- true
- Ref: AllocatePublicIp
Outputs:
EcsInstanceIds:
Description:
zh-cn: Ecs 实例地址
en: Ecs InstanceId
Value:
Fn::GetAtt:
- ConsulServer
- InstanceIds
EcsPrivateIp:
Description:
zh-cn: Ecs 私网ip
en: Ecs private network Ip
Value:
Fn::Select:
- '0'
- Fn::GetAtt:
- ConsulServer
- PrivateIps
ConsulWebUrl:
Description:
zh-cn: consul服务访问URL,开启公网访问返回公网URL,否则是私网URL
en: Consul service access URL, open public network access and return public network URL, otherwise it is private network URL
Value:
Fn::If:
- AllocatePublicIpOn
- Fn::Sub:
- http://${OutIp}:8500
- OutIp:
Fn::Select:
- '0'
- Fn::GetAtt:
- ConsulServer
- PublicIps
- Fn::Sub:
- http://${OutIp}:8500
- OutIp:
Fn::Select:
- '0'
- Fn::GetAtt:
- ConsulServer
- PrivateIps
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- VpcId
- ZoneId
- VSwitchId
Label:
default:
zh-cn: 基础资源配置(必填)
en: Infrastructure Configuration
- Parameters:
- PayType
- PayPeriodUnit
- PayPeriod
Label:
default:
en: PayType Configuration
zh-cn: 付费类型配置
- Parameters:
- InstanceType
- SystemDiskCategory
- SystemDiskSize
- DataDiskCategory
- DataDiskSize
- InstancePassword
- AllocatePublicIp
Label:
default:
zh-cn: Consul 配置(必填)
en: Consul Configuration
TemplateTags:
- Creates ECS(Consul) - Existing Vpc