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