@@ -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,6 +15,26 @@ variable "host_name" {
27
15
description = " your domain name"
28
16
}
29
17
18
+ # 主机记录
19
+ variable "host_record" {
20
+ type = string
21
+ default = " image"
22
+ description = " Host Record,like image"
23
+ }
24
+
25
+ provider "alicloud" {
26
+ region = var. region
27
+ }
28
+
29
+ # 查询支持NLB的可用区
30
+ data "alicloud_nlb_zones" "example" {}
31
+
32
+ # 可用区
33
+ data "alicloud_zones" "example" {
34
+ available_resource_creation = " VSwitch"
35
+ available_disk_category = local. available_disk_category
36
+ }
37
+
30
38
locals {
31
39
# 专有网络VPC网段
32
40
vpc_cidr_block = " 172.16.0.0/16"
@@ -35,10 +43,13 @@ locals {
35
43
# backup交换机网段
36
44
backup_vsw_cidr_block = " 172.16.2.0/24"
37
45
# ECS规格
38
- instance_type = " ecs.e-c1m1.large"
46
+ ecs_instance_type = " ecs.e-c1m1.large"
39
47
# ECS系统镜像
40
- image_id = " aliyun_2_1903_x64_20G_alibase_20240628.vhd"
48
+ image_id = " aliyun_2_1903_x64_20G_alibase_20240628.vhd"
49
+ # 磁盘类型
41
50
available_disk_category = " cloud_essd"
51
+ # 提取地区交集
52
+ intersection_zones = tolist (setintersection (data. alicloud_nlb_zones . example . ids , data. alicloud_zones . example . ids ))
42
53
# ECS中部署服务脚本
43
54
master_ecs_command = << EOS
44
55
yum install -y nginx
@@ -70,15 +81,15 @@ resource "alicloud_vpc" "example" {
70
81
resource "alicloud_vswitch" "master_vswitch" {
71
82
vpc_id = alicloud_vpc. example . id
72
83
cidr_block = local. master_vsw_cidr_block
73
- zone_id = data . alicloud_zones . example . zones [0 ]. id
84
+ zone_id = local . intersection_zones [0 ]
74
85
vswitch_name = " master_vswitch_test_${ random_integer . example . result } "
75
86
}
76
87
77
88
# backup交换机
78
89
resource "alicloud_vswitch" "backup_vswitch" {
79
90
vpc_id = alicloud_vpc. example . id
80
91
cidr_block = local. backup_vsw_cidr_block
81
- zone_id = data . alicloud_zones . example . zones [1 ]. id
92
+ zone_id = local . intersection_zones [1 ]
82
93
vswitch_name = " backup_vswitch_test_${ random_integer . example . result } "
83
94
}
84
95
@@ -114,32 +125,32 @@ resource "alicloud_security_group_rule" "egress" {
114
125
115
126
# mster ECS实例
116
127
resource "alicloud_instance" "master_example" {
117
- availability_zone = data . alicloud_zones . example . zones [0 ]. id
128
+ availability_zone = local . intersection_zones [0 ]
118
129
security_groups = alicloud_security_group. example . * . id
119
- instance_type = local. instance_type
130
+ instance_type = local. ecs_instance_type
120
131
system_disk_category = local. available_disk_category
121
132
system_disk_name = " master_system_disk_name_${ random_integer . example . result } "
122
133
system_disk_description = " master_system_disk_description_${ random_integer . example . result } "
123
134
image_id = local. image_id
124
135
instance_name = " master_instance_name_${ random_integer . example . result } "
125
136
vswitch_id = alicloud_vswitch. master_vswitch . id
126
137
internet_max_bandwidth_out = 10
127
- password = var. password
138
+ password = var. ecs_password
128
139
}
129
140
130
141
# backup ECS实例
131
142
resource "alicloud_instance" "backup_example" {
132
- availability_zone = data . alicloud_zones . example . zones [1 ]. id
143
+ availability_zone = local . intersection_zones [1 ]
133
144
security_groups = alicloud_security_group. example . * . id
134
- instance_type = local. instance_type
145
+ instance_type = local. ecs_instance_type
135
146
system_disk_category = local. available_disk_category
136
147
system_disk_name = " backup_system_disk_name_${ random_integer . example . result } "
137
148
system_disk_description = " backup_system_disk_description_${ random_integer . example . result } "
138
149
image_id = local. image_id
139
150
instance_name = " backup_instance_name_${ random_integer . example . result } "
140
151
vswitch_id = alicloud_vswitch. backup_vswitch . id
141
152
internet_max_bandwidth_out = 10
142
- password = var. password
153
+ password = var. ecs_password
143
154
}
144
155
145
156
# master ECS命令
@@ -151,6 +162,9 @@ resource "alicloud_ecs_command" "master_ecs_command" {
151
162
command_content = base64encode (local. master_ecs_command )
152
163
timeout = 3600
153
164
working_dir = " /root"
165
+ lifecycle {
166
+ ignore_changes = [command_content ]
167
+ }
154
168
}
155
169
156
170
# 在master ECS中执行命令
@@ -171,6 +185,9 @@ resource "alicloud_ecs_command" "backup_ecs_command" {
171
185
command_content = base64encode (local. backup_ecs_command )
172
186
timeout = 3600
173
187
working_dir = " /root"
188
+ lifecycle {
189
+ ignore_changes = [command_content ]
190
+ }
174
191
}
175
192
176
193
# 在backup ECS中执行命令
@@ -182,6 +199,23 @@ resource "alicloud_ecs_invocation" "backup_invocation" {
182
199
}
183
200
}
184
201
202
+ # nlb 实例
203
+ resource "alicloud_nlb_load_balancer" "example" {
204
+ load_balancer_name = " load_balancer_name_${ random_integer . example . result } "
205
+ load_balancer_type = " Network"
206
+ address_type = " Internet"
207
+ address_ip_version = " Ipv4"
208
+ vpc_id = alicloud_vpc. example . id
209
+ zone_mappings {
210
+ vswitch_id = alicloud_vswitch. master_vswitch . id
211
+ zone_id = alicloud_vswitch. master_vswitch . zone_id
212
+ }
213
+ zone_mappings {
214
+ vswitch_id = alicloud_vswitch. backup_vswitch . id
215
+ zone_id = alicloud_vswitch. backup_vswitch . zone_id
216
+ }
217
+ }
218
+
185
219
# nlb服务器组
186
220
resource "alicloud_nlb_server_group" "example" {
187
221
server_group_name = " server_group_name_${ random_integer . example . result } "
@@ -228,23 +262,6 @@ resource "alicloud_nlb_server_group_server_attachment" "attachment_backup_ecs" {
228
262
weight = 100
229
263
}
230
264
231
- # nlb 实例
232
- resource "alicloud_nlb_load_balancer" "example" {
233
- load_balancer_name = " load_balancer_name_${ random_integer . example . result } "
234
- load_balancer_type = " Network"
235
- address_type = " Internet"
236
- address_ip_version = " Ipv4"
237
- vpc_id = alicloud_vpc. example . id
238
- zone_mappings {
239
- vswitch_id = alicloud_vswitch. master_vswitch . id
240
- zone_id = alicloud_vswitch. master_vswitch . zone_id
241
- }
242
- zone_mappings {
243
- vswitch_id = alicloud_vswitch. backup_vswitch . id
244
- zone_id = alicloud_vswitch. backup_vswitch . zone_id
245
- }
246
- }
247
-
248
265
# nlb监听
249
266
resource "alicloud_nlb_listener" "default" {
250
267
listener_protocol = " TCP"
@@ -262,7 +279,7 @@ resource "alicloud_nlb_listener" "default" {
262
279
resource "alicloud_dns_record" "example" {
263
280
name = var. host_name
264
281
type = " CNAME"
265
- host_record = " @ "
282
+ host_record = var . host_record
266
283
value = alicloud_nlb_load_balancer. example . dns_name
267
284
ttl = 600
268
285
}
0 commit comments