Skip to content

Commit 7896b3a

Browse files
author
shaobolin
committed
feat: 解决方案dts-cache-synchronization tf文件完成
1 parent 5ab7b50 commit 7896b3a

File tree

5 files changed

+228
-0
lines changed

5 files changed

+228
-0
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
## Introduction
2+
<!-- DOCS_DESCRIPTION_CN -->
3+
本示例用于实现解决方案[RDS 到 Redis 实时同步方案](https://www.aliyun.com/solution/tech-solution/rtsorarctebcc), 涉及到涉及到专有网络(VPC)、交换机(VSwitch)、云数据库(RDS)MySQL版、云数据库 Tair(兼容 Redis)等资源的创建。
4+
<!-- DOCS_DESCRIPTION_CN -->
5+
6+
<!-- DOCS_DESCRIPTION_EN -->
7+
This example demonstrates the implementation of the solution [Real time synchronization solution from RDS to Redis](https://www.aliyun.com/solution/tech-solution/rtsorarctebcc). It involves the creation, configuration, and deployment of resources such as Virtual Private Cloud (VPC), VSwitch, Elastic Compute Service (ECS), ApsaraDB RDS, Tair (Redis OSS-compatible).
8+
<!-- DOCS_DESCRIPTION_EN -->
9+
10+
<!-- BEGIN_TF_DOCS -->
11+
## Providers
12+
13+
| Name | Version |
14+
|------|---------|
15+
| <a name="provider_alicloud"></a> [alicloud](#provider\_alicloud) | 1.255.0 |
16+
17+
## Modules
18+
19+
No modules.
20+
21+
## Resources
22+
23+
| Name | Type |
24+
|------|------|
25+
| [alicloud_db_account.account](https://registry.terraform.io/providers/aliyun/alicloud/1.255.0/docs/resources/db_account) | resource |
26+
| [alicloud_db_database.database](https://registry.terraform.io/providers/aliyun/alicloud/1.255.0/docs/resources/db_database) | resource |
27+
| [alicloud_db_instance.rds](https://registry.terraform.io/providers/aliyun/alicloud/1.255.0/docs/resources/db_instance) | resource |
28+
| [alicloud_dts_synchronization_instance.dts](https://registry.terraform.io/providers/aliyun/alicloud/1.255.0/docs/resources/dts_synchronization_instance) | resource |
29+
| [alicloud_dts_synchronization_job.job](https://registry.terraform.io/providers/aliyun/alicloud/1.255.0/docs/resources/dts_synchronization_job) | resource |
30+
| [alicloud_kvstore_instance.redis](https://registry.terraform.io/providers/aliyun/alicloud/1.255.0/docs/resources/kvstore_instance) | resource |
31+
| [alicloud_vpc.vpc](https://registry.terraform.io/providers/aliyun/alicloud/1.255.0/docs/resources/vpc) | resource |
32+
| [alicloud_vswitch.vswitch](https://registry.terraform.io/providers/aliyun/alicloud/1.255.0/docs/resources/vswitch) | resource |
33+
| [alicloud_regions.default](https://registry.terraform.io/providers/aliyun/alicloud/1.255.0/docs/data-sources/regions) | data source |
34+
35+
## Inputs
36+
37+
| Name | Description | Type | Default | Required |
38+
|------|-------------|------|---------|:--------:|
39+
| <a name="input_db_instance_class"></a> [db\_instance\_class](#input\_db\_instance\_class) | 实例规格 | `string` | `"mysql.x4.medium.2c"` | no |
40+
| <a name="input_db_name"></a> [db\_name](#input\_db\_name) | RDS数据库名称。由2到16个小写字母组成,下划线。必须以字母开头,以字母数字字符结尾。 | `string` | `"demodb"` | no |
41+
| <a name="input_db_password"></a> [db\_password](#input\_db\_password) | RDS数据库密码,由字母、数字、下划线(\_)组成,长度为8~32个字符,必须包含3种不同类型的字符。 | `string` | n/a | yes |
42+
| <a name="input_dts_job_name"></a> [dts\_job\_name](#input\_dts\_job\_name) | 同步任务名称。建议配置具有业务意义的名称(无唯一性要求),便于后续识别。 | `string` | `"mysql2redis_dts"` | no |
43+
| <a name="input_rds_db_user"></a> [rds\_db\_user](#input\_rds\_db\_user) | RDS数据库账号。由2到16个小写字母组成,下划线。必须以字母开头,以字母数字字符结尾。 | `string` | `"demouser123"` | no |
44+
| <a name="input_redis_instance_class"></a> [redis\_instance\_class](#input\_redis\_instance\_class) | Tair规格。选择机型前请先确认当前可用区下该机型是否有库存,为节省测试成本,推荐使用2GB的规格,例如:tair.rdb.2g | `string` | `"tair.rdb.2g"` | no |
45+
| <a name="input_redis_password"></a> [redis\_password](#input\_redis\_password) | 实例密码。长度8-32个字符,可包含大小字母、数字及特殊符号(包含:!@#$%^&*()\_+-=) | `string` | n/a | yes |
46+
| <a name="input_region"></a> [region](#input\_region) | 地域 | `string` | `"cn-hangzhou"` | no |
47+
| <a name="input_zone_id"></a> [zone\_id](#input\_zone\_id) | 交换机可用区 | `string` | `"cn-hangzhou-k"` | no |
48+
<!-- END_TF_DOCS -->
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
locals {
2+
db_name = "demodb"
3+
dts_job_name = "mysql2redis_dts"
4+
}
5+
6+
data "alicloud_regions" "default" {
7+
current = true
8+
}
9+
10+
data "alicloud_kvstore_zones" "default" {
11+
instance_charge_type = "PostPaid"
12+
engine = "Redis"
13+
product_type = "OnECS"
14+
15+
}
16+
17+
data "alicloud_db_instance_classes" "default" {
18+
zone_id = data.alicloud_kvstore_zones.default.zones.0.id
19+
engine = "MySQL"
20+
engine_version = "8.0"
21+
instance_charge_type = "PostPaid"
22+
category = "Basic"
23+
db_instance_storage_type = "cloud_essd"
24+
}
25+
resource "alicloud_vpc" "vpc" {
26+
cidr_block = "192.168.0.0/16"
27+
}
28+
29+
resource "alicloud_vswitch" "vswitch" {
30+
vpc_id = alicloud_vpc.vpc.id
31+
cidr_block = "192.168.0.0/24"
32+
zone_id = data.alicloud_kvstore_zones.default.zones.0.id
33+
}
34+
35+
resource "alicloud_db_instance" "rds" {
36+
engine = "MySQL"
37+
engine_version = "8.0"
38+
instance_type = data.alicloud_db_instance_classes.default.instance_classes.0.instance_class
39+
instance_storage = 100
40+
vswitch_id = alicloud_vswitch.vswitch.id
41+
security_ips = ["192.168.0.0/16"]
42+
category = "HighAvailability"
43+
}
44+
45+
# 创建数据库账号
46+
resource "alicloud_db_account" "account" {
47+
db_instance_id = alicloud_db_instance.rds.id
48+
account_name = var.rds_db_user
49+
account_password = var.db_password
50+
account_type = "Normal"
51+
}
52+
53+
# 创建数据库
54+
resource "alicloud_db_database" "database" {
55+
instance_id = alicloud_db_instance.rds.id
56+
name = local.db_name
57+
character_set = "utf8mb4"
58+
}
59+
60+
resource "alicloud_kvstore_instance" "redis" {
61+
instance_class = var.redis_instance_class
62+
vswitch_id = alicloud_vswitch.vswitch.id
63+
security_ips = ["192.168.0.0/16"]
64+
password = var.redis_password
65+
engine_version = "6.0"
66+
zone_id = data.alicloud_kvstore_zones.default.zones.0.id
67+
}
68+
69+
resource "alicloud_dts_synchronization_instance" "dts" {
70+
payment_type = "PayAsYouGo"
71+
source_endpoint_engine_name = "MySQL"
72+
destination_endpoint_engine_name = "Redis"
73+
instance_class = "small"
74+
source_endpoint_region = data.alicloud_regions.default.regions.0.id
75+
destination_endpoint_region = data.alicloud_regions.default.regions.0.id
76+
sync_architecture = "oneway"
77+
}
78+
79+
resource "alicloud_dts_synchronization_job" "job" {
80+
dts_instance_id = alicloud_dts_synchronization_instance.dts.id
81+
dts_job_name = var.dts_job_name
82+
source_endpoint_region = data.alicloud_regions.default.regions.0.id
83+
source_endpoint_engine_name = "MySQL"
84+
source_endpoint_instance_type = "RDS"
85+
source_endpoint_instance_id = alicloud_db_instance.rds.id
86+
source_endpoint_user_name = var.rds_db_user
87+
source_endpoint_password = var.db_password
88+
source_endpoint_database_name = local.db_name
89+
destination_endpoint_engine_name = "REDIS"
90+
destination_endpoint_instance_type = "REDIS"
91+
destination_endpoint_instance_id = alicloud_kvstore_instance.redis.id
92+
destination_endpoint_password = var.redis_password
93+
db_list = jsonencode({
94+
db_name = { name = local.db_name, all = true }
95+
})
96+
structure_initialization = false
97+
data_initialization = true
98+
data_synchronization = true
99+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
output "vpc_id" {
2+
description = "VPC ID"
3+
value = alicloud_vpc.vpc.id
4+
}
5+
6+
output "vswitch_id" {
7+
description = "VSwitch ID"
8+
value = alicloud_vswitch.vswitch.id
9+
}
10+
11+
output "rds_instance_id" {
12+
description = "RDS Instance ID"
13+
value = alicloud_db_instance.rds.id
14+
}
15+
16+
output "redis_instance_id" {
17+
description = "Redis Instance ID"
18+
value = alicloud_kvstore_instance.redis.id
19+
}
20+
21+
output "dts_instance_id" {
22+
description = "DTS Instance ID"
23+
value = alicloud_dts_synchronization_instance.dts.id
24+
}
25+
26+
output "dts_job_id" {
27+
description = "DTS Job ID"
28+
value = alicloud_dts_synchronization_job.job.id
29+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
provider "alicloud" {
2+
region = var.region
3+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
variable "region" {
2+
description = "地域"
3+
type = string
4+
default = "cn-hangzhou"
5+
}
6+
7+
variable "rds_db_user" {
8+
type = string
9+
description = "RDS数据库账号。由2到16个小写字母组成,下划线。必须以字母开头,以字母数字字符结尾。"
10+
default = "demouser123"
11+
validation {
12+
condition = can(regex("^[a-z][a-z0-9_]{1,15}[a-z0-9]$", var.rds_db_user))
13+
error_message = "由2到16个小写字母组成,下划线。必须以字母开头,以字母数字字符结尾。"
14+
}
15+
}
16+
17+
variable "db_name" {
18+
type = string
19+
description = "RDS数据库名称。由2到16个小写字母组成,下划线。必须以字母开头,以字母数字字符结尾。"
20+
default = "demodb"
21+
validation {
22+
condition = can(regex("^[a-z][a-z0-9_]{1,15}[a-z0-9]$", var.db_name))
23+
error_message = "由2到16个小写字母组成,下划线。必须以字母开头,以字母数字字符结尾。"
24+
}
25+
}
26+
27+
variable "db_password" {
28+
type = string
29+
description = "RDS数据库密码,由字母、数字、下划线(_)组成,长度为8~32个字符,必须包含3种不同类型的字符。"
30+
sensitive = true
31+
}
32+
33+
variable "dts_job_name" {
34+
type = string
35+
description = "同步任务名称。建议配置具有业务意义的名称(无唯一性要求),便于后续识别。"
36+
default = "mysql2redis_dts"
37+
}
38+
39+
variable "redis_instance_class" {
40+
type = string
41+
description = "Tair规格。选择机型前请先确认当前可用区下该机型是否有库存,为节省测试成本,推荐使用2GB的规格,例如:tair.rdb.2g"
42+
default = "tair.rdb.2g"
43+
}
44+
45+
variable "redis_password" {
46+
type = string
47+
description = "实例密码。长度8-32个字符,可包含大小字母、数字及特殊符号(包含:!@#$%^&*()_+-=)"
48+
sensitive = true
49+
}

0 commit comments

Comments
 (0)