1
+ provider "alicloud" {
2
+ region = var. region_id
3
+ }
4
+
5
+ resource "random_id" "suffix" {
6
+ byte_length = 8
7
+ }
8
+
9
+ data "alicloud_kvstore_zones" "zones_ids" {
10
+ instance_charge_type = " PostPaid"
11
+ }
12
+
13
+ data "alicloud_images" "default" {
14
+ name_regex = " ^aliyun_3_x64_20G_alibase_*"
15
+ most_recent = true
16
+ owners = " system"
17
+ }
18
+
19
+ data "alicloud_instance_types" "default" {
20
+ cpu_core_count = 4
21
+ system_disk_category = " cloud_essd"
22
+ image_id = data. alicloud_images . default . images [0 ]. id
23
+ instance_type_family = " ecs.c6"
24
+ availability_zone = data. alicloud_kvstore_zones . zones_ids . zones [length (data. alicloud_kvstore_zones . zones_ids . zones ) - 1 ]. id
25
+ }
26
+
27
+ locals {
28
+ common_name = random_id. suffix . id
29
+ redis_install_script = <<- SCRIPT
30
+ #!/bin/bash
31
+ export ROS_DEPLOY=true
32
+ curl -fsSL https://static-aliyun-doc.oss-cn-hangzhou.aliyuncs.com/install-script/read-write-splitting-through-tair-proxy/install.sh | bash
33
+ SCRIPT
34
+ }
35
+
36
+ # VPC Resources
37
+ resource "alicloud_vpc" "vpc" {
38
+ vpc_name = " VPC_HZ"
39
+ cidr_block = " 192.168.0.0/16"
40
+ }
41
+
42
+ resource "alicloud_vswitch" "vswitch" {
43
+ vpc_id = alicloud_vpc. vpc . id
44
+ cidr_block = " 192.168.1.0/24"
45
+ zone_id = data. alicloud_kvstore_zones . zones_ids . zones [length (data. alicloud_kvstore_zones . zones_ids . zones ) - 1 ]. id
46
+ vswitch_name = " vsw_001"
47
+ }
48
+
49
+ # Security Group
50
+ resource "alicloud_security_group" "ecs_security_group" {
51
+ vpc_id = alicloud_vpc. vpc . id
52
+ security_group_name = " SecurityGroup_1"
53
+ security_group_type = " normal"
54
+ }
55
+
56
+ resource "alicloud_security_group_rule" "http" {
57
+ type = " ingress"
58
+ ip_protocol = " tcp"
59
+ port_range = " 80/80"
60
+ cidr_ip = " 0.0.0.0/0"
61
+ security_group_id = alicloud_security_group. ecs_security_group . id
62
+ }
63
+
64
+ # Redis Instance
65
+ resource "alicloud_kvstore_instance" "redis" {
66
+ db_instance_name = " redis"
67
+ instance_class = " redis.shard.small.2.ce"
68
+ engine_version = " 7.0"
69
+ password = var. db_password
70
+ payment_type = " PostPaid"
71
+ vswitch_id = alicloud_vswitch. vswitch . id
72
+ zone_id = data. alicloud_kvstore_zones . zones_ids . zones [length (data. alicloud_kvstore_zones . zones_ids . zones ) - 1 ]. id
73
+ read_only_count = 1
74
+ security_ips = [" 192.168.0.0/16" ]
75
+ }
76
+
77
+ # ECS Instance
78
+ resource "alicloud_instance" "ecs_instance" {
79
+ instance_name = " ecs-${ local . common_name } "
80
+ system_disk_category = data. alicloud_instance_types . default . system_disk_category
81
+ system_disk_size = 100
82
+ image_id = data. alicloud_images . default . images [0 ]. id
83
+ vswitch_id = alicloud_vswitch. vswitch . id
84
+ password = var. ecs_instance_password
85
+ instance_type = data. alicloud_instance_types . default . instance_types [0 ]. id
86
+ internet_max_bandwidth_out = 5
87
+ security_groups = [alicloud_security_group . ecs_security_group . id ]
88
+ }
89
+
90
+ # Install Redis Client Command
91
+ resource "alicloud_ecs_command" "install_redis_client" {
92
+ name = " install-redis-client-${ local . common_name } "
93
+ description = " Install Redis client on ECS instance"
94
+ type = " RunShellScript"
95
+ command_content = base64encode (local. redis_install_script )
96
+ timeout = 600
97
+ working_dir = " /root"
98
+ }
99
+
100
+ resource "alicloud_ecs_invocation" "install_redis_client" {
101
+ instance_id = [alicloud_instance . ecs_instance . id ]
102
+ command_id = alicloud_ecs_command. install_redis_client . id
103
+ depends_on = [alicloud_kvstore_instance . redis ]
104
+ timeouts {
105
+ create = " 10m"
106
+ }
107
+ }
0 commit comments