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