Skip to content

Commit f4459b4

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

File tree

5 files changed

+229
-0
lines changed

5 files changed

+229
-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+
本示例用于实现解决方案[{{解决方案名称}}]({{解决方案地址}}), 涉及到{{资源列表}}等资源的创建。
4+
<!-- DOCS_DESCRIPTION_CN -->
5+
6+
<!-- DOCS_DESCRIPTION_EN -->
7+
This example demonstrates the implementation of the solution [{{解决方案名称}}]({{解决方案地址}}). It involves the creation, configuration, and deployment of resources such as {资源列表}.
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: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
terraform {
2+
required_providers {
3+
alicloud = {
4+
source = "aliyun/alicloud"
5+
version = "1.255.0"
6+
}
7+
}
8+
}
9+
10+
locals {
11+
db_name = "demodb"
12+
dts_job_name = "mysql2redis_dts"
13+
}
14+
15+
data "alicloud_regions" "default" {
16+
current = true
17+
}
18+
19+
data "alicloud_kvstore_zones" "default" {
20+
instance_charge_type = "PostPaid"
21+
engine = "Redis"
22+
product_type = "OnECS"
23+
24+
}
25+
26+
data "alicloud_db_instance_classes" "default" {
27+
zone_id = data.alicloud_kvstore_zones.default.zones.0.id
28+
engine = "MySQL"
29+
engine_version = "8.0"
30+
instance_charge_type = "PostPaid"
31+
category = "Basic"
32+
db_instance_storage_type = "cloud_essd"
33+
}
34+
resource "alicloud_vpc" "vpc" {
35+
cidr_block = "192.168.0.0/16"
36+
}
37+
38+
resource "alicloud_vswitch" "vswitch" {
39+
vpc_id = alicloud_vpc.vpc.id
40+
cidr_block = "192.168.0.0/24"
41+
zone_id = data.alicloud_kvstore_zones.default.zones.0.id
42+
}
43+
44+
resource "alicloud_db_instance" "rds" {
45+
engine = "MySQL"
46+
engine_version = "8.0"
47+
instance_type = data.alicloud_db_instance_classes.default.instance_classes.0.instance_class
48+
instance_storage = 100
49+
vswitch_id = alicloud_vswitch.vswitch.id
50+
security_ips = ["192.168.0.0/16"]
51+
category = "HighAvailability"
52+
}
53+
54+
# 创建数据库账号
55+
resource "alicloud_db_account" "account" {
56+
db_instance_id = alicloud_db_instance.rds.id
57+
account_name = var.rds_db_user
58+
account_password = var.db_password
59+
account_type = "Normal"
60+
}
61+
62+
# 创建数据库
63+
resource "alicloud_db_database" "database" {
64+
instance_id = alicloud_db_instance.rds.id
65+
name = local.db_name
66+
character_set = "utf8mb4"
67+
}
68+
69+
resource "alicloud_kvstore_instance" "redis" {
70+
instance_class = var.redis_instance_class
71+
vswitch_id = alicloud_vswitch.vswitch.id
72+
security_ips = ["192.168.0.0/16"]
73+
password = var.redis_password
74+
engine_version = "6.0"
75+
zone_id = data.alicloud_kvstore_zones.default.zones.0.id
76+
}
77+
78+
resource "alicloud_dts_synchronization_instance" "dts" {
79+
payment_type = "PayAsYouGo"
80+
source_endpoint_engine_name = "MySQL"
81+
destination_endpoint_engine_name = "Redis"
82+
instance_class = "small"
83+
source_endpoint_region = data.alicloud_regions.default.regions.0.id
84+
destination_endpoint_region = data.alicloud_regions.default.regions.0.id
85+
sync_architecture = "oneway"
86+
}
87+
88+
resource "alicloud_dts_synchronization_job" "job" {
89+
dts_instance_id = alicloud_dts_synchronization_instance.dts.id
90+
dts_job_name = var.dts_job_name
91+
source_endpoint_region = data.alicloud_regions.default.regions.0.id
92+
source_endpoint_engine_name = "MySQL"
93+
source_endpoint_instance_type = "RDS"
94+
source_endpoint_instance_id = alicloud_db_instance.rds.id
95+
source_endpoint_user_name = var.rds_db_user
96+
source_endpoint_password = var.db_password
97+
source_endpoint_database_name = local.db_name
98+
destination_endpoint_engine_name = "REDIS"
99+
destination_endpoint_instance_type = "REDIS"
100+
destination_endpoint_instance_id = alicloud_kvstore_instance.redis.id
101+
destination_endpoint_password = var.redis_password
102+
db_list = jsonencode({
103+
db_name = { name = local.db_name, all = true }
104+
})
105+
structure_initialization = false
106+
data_initialization = true
107+
data_synchronization = true
108+
}
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: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
provider "alicloud" {}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
variable "rds_db_user" {
2+
type = string
3+
description = "RDS数据库账号。由2到16个小写字母组成,下划线。必须以字母开头,以字母数字字符结尾。"
4+
default = "demouser123"
5+
validation {
6+
condition = can(regex("^[a-z][a-z0-9_]{1,15}[a-z0-9]$", var.rds_db_user))
7+
error_message = "由2到16个小写字母组成,下划线。必须以字母开头,以字母数字字符结尾。"
8+
}
9+
}
10+
11+
variable "db_name" {
12+
type = string
13+
description = "RDS数据库名称。由2到16个小写字母组成,下划线。必须以字母开头,以字母数字字符结尾。"
14+
default = "demodb"
15+
validation {
16+
condition = can(regex("^[a-z][a-z0-9_]{1,15}[a-z0-9]$", var.db_name))
17+
error_message = "由2到16个小写字母组成,下划线。必须以字母开头,以字母数字字符结尾。"
18+
}
19+
}
20+
21+
variable "db_password" {
22+
type = string
23+
description = "RDS数据库密码,由字母、数字、下划线(_)组成,长度为8~32个字符,必须包含3种不同类型的字符。"
24+
sensitive = true
25+
}
26+
27+
variable "dts_job_name" {
28+
type = string
29+
description = "同步任务名称。建议配置具有业务意义的名称(无唯一性要求),便于后续识别。"
30+
default = "mysql2redis_dts"
31+
}
32+
33+
variable "redis_instance_class" {
34+
type = string
35+
description = "Tair规格。选择机型前请先确认当前可用区下该机型是否有库存,为节省测试成本,推荐使用2GB的规格,例如:tair.rdb.2g"
36+
default = "tair.rdb.2g"
37+
}
38+
39+
variable "redis_password" {
40+
type = string
41+
description = "实例密码。长度8-32个字符,可包含大小字母、数字及特殊符号(包含:!@#$%^&*()_+-=)"
42+
sensitive = true
43+
}

0 commit comments

Comments
 (0)