@@ -2,20 +2,8 @@ variable "region" {
2
2
default = " cn-beijing"
3
3
}
4
4
5
- provider "alicloud" {
6
- region = var. region
7
- }
8
-
9
- # 可用区
10
- data "alicloud_zones" "example" {
11
- available_resource_creation = " VSwitch"
12
- available_disk_category = local. available_disk_category
13
- available_slb_address_ip_version = " ipv4"
14
- available_slb_address_type = " classic_internet"
15
- }
16
-
17
5
# ECS登录密码
18
- variable "password " {
6
+ variable "ecs_password " {
19
7
type = string
20
8
default = " Terraform@Example"
21
9
}
@@ -27,14 +15,35 @@ variable "host_name" {
27
15
description = " your domain name"
28
16
}
29
17
30
- locals {
31
- vpc_cidr_block = " 172.16.0.0/16"
32
- available_disk_category = " cloud_essd"
33
- image_id = " aliyun_2_1903_x64_20G_alibase_20240628.vhd"
34
- instance_type = " ecs.e-c1m1.large"
35
- master_vsw_cidr_block = " 172.16.0.0/24"
36
- backup_vsw_cidr_block = " 172.16.2.0/24"
18
+ # 主机记录
19
+ variable "host_record" {
20
+ type = string
21
+ default = " image"
22
+ description = " Host Record,like image"
23
+ }
37
24
25
+ provider "alicloud" {
26
+ region = var. region
27
+ }
28
+
29
+ # 查询支持ALB的可用区
30
+ data "alicloud_alb_zones" "example" {}
31
+
32
+ # 查询支持ECS云盘类型的可用区
33
+ data "alicloud_zones" "example" {
34
+ available_resource_creation = " VSwitch" // 交换机类型
35
+ available_disk_category = local. available_disk_category // 云盘类型
36
+ }
37
+
38
+ locals {
39
+ vpc_cidr_block = " 172.16.0.0/16" # 专有网络VPC的CIDR
40
+ available_disk_category = " cloud_essd" # 云盘类型
41
+ image_id = " aliyun_2_1903_x64_20G_alibase_20240628.vhd" # 镜像ID
42
+ ecs_instance_type = " ecs.e-c1m1.large" # ECS实例规格
43
+ master_vsw_cidr_block = " 172.16.0.0/24" # master交换机的CIDR
44
+ backup_vsw_cidr_block = " 172.16.2.0/24" # backup交换机的CIDR
45
+ # 提取地区交集
46
+ intersection_zones = tolist (setintersection (data. alicloud_alb_zones . example . ids , data. alicloud_zones . example . ids ))
38
47
# ECS中部署服务脚本
39
48
master_ecs_command = << EOS
40
49
yum install -y nginx
@@ -66,15 +75,15 @@ resource "alicloud_vpc" "example" {
66
75
resource "alicloud_vswitch" "master_vswitch" {
67
76
vpc_id = alicloud_vpc. example . id
68
77
cidr_block = local. master_vsw_cidr_block
69
- zone_id = data . alicloud_zones . example . zones [0 ]. id
78
+ zone_id = local . intersection_zones [0 ]
70
79
vswitch_name = " master_vswitch_test_${ random_integer . example . result } "
71
80
}
72
81
73
82
# backup交换机
74
83
resource "alicloud_vswitch" "backup_vswitch" {
75
84
vpc_id = alicloud_vpc. example . id
76
85
cidr_block = local. backup_vsw_cidr_block
77
- zone_id = data . alicloud_zones . example . zones [1 ]. id
86
+ zone_id = local . intersection_zones [1 ]
78
87
vswitch_name = " backup_vswitch_test_${ random_integer . example . result } "
79
88
}
80
89
@@ -110,32 +119,32 @@ resource "alicloud_security_group_rule" "egress" {
110
119
111
120
# mster ECS实例
112
121
resource "alicloud_instance" "master_example" {
113
- availability_zone = data . alicloud_zones . example . zones [0 ]. id
122
+ availability_zone = local . intersection_zones [0 ]
114
123
security_groups = alicloud_security_group. example . * . id
115
- instance_type = local. instance_type
124
+ instance_type = local. ecs_instance_type
116
125
system_disk_category = local. available_disk_category
117
126
system_disk_name = " master_system_disk_name_${ random_integer . example . result } "
118
127
system_disk_description = " master_system_disk_description_${ random_integer . example . result } "
119
128
image_id = local. image_id
120
129
instance_name = " master_instance_name_${ random_integer . example . result } "
121
130
vswitch_id = alicloud_vswitch. master_vswitch . id
122
131
internet_max_bandwidth_out = 10
123
- password = var. password
132
+ password = var. ecs_password
124
133
}
125
134
126
135
# backup ECS实例
127
136
resource "alicloud_instance" "backup_example" {
128
- availability_zone = data . alicloud_zones . example . zones [1 ]. id
137
+ availability_zone = local . intersection_zones [1 ]
129
138
security_groups = alicloud_security_group. example . * . id
130
- instance_type = local. instance_type
139
+ instance_type = local. ecs_instance_type
131
140
system_disk_category = local. available_disk_category
132
141
system_disk_name = " backup_system_disk_name_${ random_integer . example . result } "
133
142
system_disk_description = " backup_system_disk_description_${ random_integer . example . result } "
134
143
image_id = local. image_id
135
144
instance_name = " backup_instance_name_${ random_integer . example . result } "
136
145
vswitch_id = alicloud_vswitch. backup_vswitch . id
137
146
internet_max_bandwidth_out = 10
138
- password = var. password
147
+ password = var. ecs_password
139
148
}
140
149
141
150
# master ECS命令
@@ -147,6 +156,9 @@ resource "alicloud_ecs_command" "master_ecs_command" {
147
156
command_content = base64encode (local. master_ecs_command )
148
157
timeout = 3600
149
158
working_dir = " /root"
159
+ lifecycle {
160
+ ignore_changes = [command_content ]
161
+ }
150
162
}
151
163
152
164
# 在master ECS中执行命令
@@ -167,6 +179,9 @@ resource "alicloud_ecs_command" "backup_ecs_command" {
167
179
command_content = base64encode (local. backup_ecs_command )
168
180
timeout = 3600
169
181
working_dir = " /root"
182
+ lifecycle {
183
+ ignore_changes = [command_content ]
184
+ }
170
185
}
171
186
172
187
# 在backup ECS中执行命令
@@ -260,7 +275,7 @@ resource "alicloud_alb_listener" "example" {
260
275
resource "alicloud_dns_record" "example" {
261
276
name = var. host_name
262
277
type = " CNAME"
263
- host_record = " @ "
278
+ host_record = var . host_record
264
279
value = alicloud_alb_load_balancer. example . dns_name
265
280
ttl = 600
266
281
}
0 commit comments