compute-nest-best-practice/ack-app-rds/template.yaml (357 lines of code) (raw):
ROSTemplateFormatVersion: '2015-09-01'
Description:
zh-cn: 创建RDS实例与ACK集群部署,配置容器应用连接RDS数据库,含网络与支付设置。
en: Provisioning an RDS instance along with ACK cluster deployment, configuring
container applications to connect to the RDS database, including network and payment
configurations.
Parameters:
ZoneId:
Type: String
AssociationProperty: ALIYUN::ECS::Instance:ZoneId
Description:
en: Availability zone ID,<br><b>note: <font color='blue'>Before selecting, please confirm that the Availability Zone supports the specification of creating ECS resources</font></b>
zh-cn: 可用区ID
Label:
en: VSwitch Available Zone
zh-cn: 可用区
VpcId:
Type: String
AssociationProperty: ALIYUN::ECS::VPC::VPCId
VSwitchId:
Type: String
AssociationProperty: ALIYUN::ECS::VSwitch::VSwitchId
AssociationPropertyMetadata:
VpcId: ${VpcId}
ZoneId: ${ZoneId}
PayType:
AssociationProperty: ChargeType
AssociationPropertyMetadata:
LocaleKey: InstanceChargeType
Type: String
Label:
en: ECS Instance Charge Type
zh-cn: 付费类型
Default: PostPaid
AllowedValues:
- PostPaid
- PrePaid
PayPeriod:
Type: Number
Description:
en: The subscription period. Unit is months.
zh-cn: 购买时长,单位(月)
Label:
en: The subscription period. Unit is months.
zh-cn: 购买时长,单位(月)
Default: 1
AllowedValues:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 12
- 24
- 36
AssociationProperty: PayPeriod
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Or:
- Fn::Equals:
- ${PayType}
- PrePaid
- Fn::Equals:
- ${PayType}
- undefined
RdsInstanceClass:
Label: MySQL 实例规格
Type: String
Description:
zh-cn: 根据数据库引擎的类型和可用的区域支持选择实例规格;<br>请参见详细信息:<a href='https://help.aliyun.com/document_detail/26312.html' target='_blank'><b><font color='blue'>实例规格表</font></b></a>
en: 'Select the instance specification based on the type of database engine and the available area support;<br>see detail: <a href=''https://www.alibabacloud.com/help/doc-detail/26312.html'' target=''_blank''><b><font color=''blue''>Instance specification sheet</font></b></a>'
Default: rds.mysql.s2.large
RdsInstanceStorage:
Label: 磁盘大小
Type: Number
Description:
zh-cn: RDS 实例大小,范围为 20 - 2000,每 5 个增量,单位为 GB
en: The size range of RDS instances is 20 - 2000, Incrementing in every 5, unit GB
MinValue: 20
MaxValue: 2000
ConstraintDescription: The size range of RDS instances is 20 - 2000, Incrementing in every 5, unit GB
Default: 30
RdsInstanceStorageType:
Label:
zh-cn: 实例存储类型
en: Storage Type
Type: String
Description:
zh-cn: 实例存储类型;<br>请参见详细信息:<a href='https://help.aliyun.com/document_detail/69795.html' target='_blank'><b><font color='blue'>存储类型</font></b></a>
en: The storage type of DB instance; see detail <a href='https://www.alibabacloud.com/help/en/apsaradb-for-rds/latest/storage-types' target='_blank'><b><font color=''blue''>Storage types</font></b></a>'
AllowedValues:
- local_ssd
- cloud_ssd
- cloud_essd
- cloud_essd2
- cloud_essd3
RdsCategory:
Label:
zh-cn: 实例系列
en: DB Category
Type: String
AllowedValues:
- Basic
- HighAvailability
- AlwaysOn
- Finance
AssociationPropertyMetadata:
LocaleKey: RDSCategory
RdsAccountName:
Type: String
Label:
zh-cn: 用户名称
en: Account Name
Description:
zh-cn: MySQL 管理员用户名称
en: Account Name
Default: db_root
RdsAccountPassword:
Type: String
NoEcho: true
Label:
zh-cn: 用户密码
en: DB Account Password
Description:
zh-cn: |-
长度为8~32个字符。由大写英文字母、小写英文字母、数字、特殊字符中的任意三种组成。支持的特殊字符如下:
!@#$&%^*()_+-= 。
en: |-
The length is 8 ~ 32 characters. It is composed of uppercase English letters, lowercase English letters, numbers and special characters. The special characters supported are as follows:
!@#$& amp;%^* ()_+-= .
ClusterId:
Type: String
Description:
en: >-
The ID of Kubernetes ClusterId in which application deployed.
zh-cn: >-
部署应用程序的K8s集群ID
AllowedPattern: '[0-9a-z]+$'
Label:
en: Kubernetes ClusterId
zh-cn: K8s集群ID
AssociationProperty: ALIYUN::CS::Cluster::ClusterId
ConstraintDescription:
en: >-
must be lowercase letters or numbers
zh-cn: '集群ID必须由小写字母或者数字组成'
NameSpace:
Type: String
Description:
en: >-
The NameSpace in which application deployed.
zh-cn: >-
部署应用程序的K8s命名空间
SecurityIpList:
Type: String
Description:
en: >-
The IP whitelist of RDS instance, K8s application's private IP CIDR should be set here.
zh-cn: >-
RDS实例的IP白名单,需要将K8s应用的私网IP段设置在白名单里
Resources:
DBInstance:
Type: ALIYUN::RDS::DBInstance
Properties:
ZoneId:
Ref: ZoneId
VPCId:
Ref: VpcId
VSwitchId:
Ref: VSwitchId
Engine: MySQL
EngineVersion: "5.7"
DBInstanceClass:
Ref: RdsInstanceClass
DBInstanceStorage:
Ref: RdsInstanceStorage
DBInstanceStorageType:
Ref: RdsInstanceStorageType
Category:
Ref: RdsCategory
PayType:
Ref: PayType
PeriodType: Month
Period:
Ref: PayPeriod
SecurityIPList:
Ref: SecurityIpList
RdsAccount:
DependsOn: DBInstance
Type: ALIYUN::RDS::Account
Properties:
DBInstanceId:
Ref: DBInstance
AccountType: Super
AccountName:
Ref: RdsAccountName
AccountPassword:
Ref: RdsAccountPassword
RdsParameter:
Type: ALIYUN::RDS::DBInstanceParameterGroup
Properties:
DBInstanceId:
Ref: DBInstance
Parameters:
- Key: innodb_large_prefix
Value: 'ON'
- Key: innodb_adaptive_flushing_lwm
Value: '10'
Database:
Type: ALIYUN::RDS::Database
Properties:
CharacterSetName: UTF8
DBInstanceId:
Ref: DBInstance
DBName: springboot_demo
DependsOn:
- DBInstance
ClusterApplication:
DependsOn: Database
Type: ALIYUN::CS::ClusterApplication
Properties:
ClusterId:
Ref: ClusterId
YamlContent:
Fn::Sub:
- |
apiVersion: v1
kind: Namespace
metadata:
name: ${NameSpace}
---
apiVersion: v1
data:
.dockerconfigjson: {{ computenest::acr::dockerconfigjson }}
kind: Secret
metadata:
name: computenestrepo
namespace: ${NameSpace}
type: kubernetes.io/dockerconfigjson
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: springboot-demo-deployment
name: springboot-demo-deployment
namespace: ${NameSpace}
spec:
progressDeadlineSeconds: 600
replicas: 2
revisionHistoryLimit: 10
selector:
matchLabels:
app: springboot-demo-pod
template:
metadata:
labels:
app: springboot-demo-pod
spec:
containers:
- env:
- name: DB_HOST
value: ${RdsConnectString}
- name: DB_USER
value: ${DbUser}
- name: DB_PASSWORD
value: ${DbPassword}
image: {{ computenest::acrimage::springbootdemo }}
imagePullPolicy: Always
name: springboot-demo-container
ports:
- containerPort: 8080
protocol: TCP
imagePullSecrets:
- name: computenestrepo
restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
labels:
app: springboot-demo-svc
name: springboot-demo-svc
namespace: ${NameSpace}
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 8080
selector:
app: springboot-demo-pod
type: LoadBalancer
- NameSpace:
Ref: NameSpace
DbUser:
Ref: RdsAccountName
DbPassword:
Ref: RdsAccountPassword
RdsConnectString:
Fn::GetAtt:
- DBInstance
- InnerConnectionString
AppExternalIp:
Type: DATASOURCE::CS::ClusterApplicationResources
Properties:
Kind: Service
Name: springboot-demo-svc
ClusterId:
Ref: ClusterApplication
Namespace:
Ref: NameSpace
JsonPath: $.status.loadBalancer.ingress
FirstMatch: true
DependsOn: ClusterApplication
Outputs:
ExternalIp:
Value:
Ref: AppExternalIp
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- VpcId
- ZoneId
- VSwitchId
Label:
en: Network Configuration
zh-cn: 网络参数配置
- Parameters:
- ClusterId
- NameSpace
Label:
en: ACK Configuration
zh-cn: ACK参数配置
- Parameters:
- RdsInstanceClass
- RdsInstanceStorage
- RdsInstanceStorageType
- RdsCategory
- RdsAccountName
- RdsAccountPassword
- SecurityIpList
Label:
en: Database Configuration
zh-cn: 数据库参数配置
- Parameters:
- PayType
- PayPeriod
Label:
en: Payment Configuration
zh-cn: 支付配置