@@ -2,29 +2,35 @@ variable "region" {
2
2
default = " cn-beijing"
3
3
}
4
4
5
- provider "alicloud" {
6
- region = var. region
5
+ # ECS登录密码
6
+ variable "ecs_password" {
7
+ type = string
8
+ default = " Terraform@Example"
7
9
}
8
10
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 = " ipv6"
14
- available_slb_address_type = " classic_internet"
11
+ # 域名
12
+ variable "host_name" {
13
+ type = string
14
+ default = " tf-example.com"
15
15
}
16
16
17
- # ECS登录密码
18
- variable "password " {
17
+ # 主机记录
18
+ variable "host_record " {
19
19
type = string
20
- default = " Terraform@Example "
20
+ default = " image "
21
21
}
22
22
23
- # 域名(改为您的域名)
24
- variable "host_name" {
25
- type = string
26
- default = " tf-example.com"
27
- description = " your domain name"
23
+ provider "alicloud" {
24
+ region = var. region
25
+ }
26
+
27
+ # 查询支持ALB的可用区
28
+ data "alicloud_alb_zones" "example" {}
29
+
30
+ # 查询支持ECS云盘类型的可用区
31
+ data "alicloud_zones" "example" {
32
+ available_resource_creation = " VSwitch" // 交换机
33
+ available_disk_category = local. available_disk_category // 云盘类型
28
34
}
29
35
30
36
locals {
@@ -39,6 +45,8 @@ locals {
39
45
# ECS系统镜像
40
46
image_id = " aliyun_2_1903_x64_20G_alibase_20240628.vhd"
41
47
available_disk_category = " cloud_essd"
48
+ # 提取地区交集
49
+ intersection_zones = tolist (setintersection (data. alicloud_alb_zones . example . ids , data. alicloud_zones . example . ids ))
42
50
# ECS中部署服务脚本
43
51
master_ecs_command = << EOS
44
52
yum install -y nginx
@@ -77,7 +85,7 @@ resource "alicloud_vswitch" "master_vswitch" {
77
85
vpc_id = alicloud_vpc. example . id
78
86
enable_ipv6 = true
79
87
cidr_block = local. master_vsw_cidr_ipv4_block
80
- zone_id = data . alicloud_zones . example . zones [0 ]. id
88
+ zone_id = local . intersection_zones [0 ]
81
89
ipv6_cidr_block_mask = 64
82
90
vswitch_name = " master_vswitch_test_${ random_integer . example . result } "
83
91
}
@@ -87,32 +95,11 @@ resource "alicloud_vswitch" "backup_vswitch" {
87
95
vpc_id = alicloud_vpc. example . id
88
96
enable_ipv6 = true
89
97
cidr_block = local. backup_vsw_cidr_ipv4_block
90
- zone_id = data . alicloud_zones . example . zones [1 ]. id
98
+ zone_id = local . intersection_zones [1 ]
91
99
ipv6_cidr_block_mask = 54
92
100
vswitch_name = " backup_vswitch_test_${ random_integer . example . result } "
93
101
}
94
102
95
- # alb 实例
96
- resource "alicloud_alb_load_balancer" "example" {
97
- load_balancer_edition = " Basic"
98
- load_balancer_name = " load_balancer_name_${ random_integer . example . result } "
99
- address_type = " Internet"
100
- address_ip_version = " DualStack"
101
- address_allocated_mode = " Fixed"
102
- vpc_id = alicloud_vpc. example . id
103
- load_balancer_billing_config {
104
- pay_type = " PayAsYouGo"
105
- }
106
- zone_mappings {
107
- vswitch_id = alicloud_vswitch. master_vswitch . id
108
- zone_id = alicloud_vswitch. master_vswitch . zone_id
109
- }
110
- zone_mappings {
111
- vswitch_id = alicloud_vswitch. backup_vswitch . id
112
- zone_id = alicloud_vswitch. backup_vswitch . zone_id
113
- }
114
- }
115
-
116
103
# 安全组
117
104
resource "alicloud_security_group" "example" {
118
105
security_group_name = " security_group_name_${ random_integer . example . result } "
@@ -145,7 +132,7 @@ resource "alicloud_security_group_rule" "egress" {
145
132
146
133
# mster ECS实例
147
134
resource "alicloud_instance" "master_example" {
148
- availability_zone = data . alicloud_zones . example . zones [0 ]. id
135
+ availability_zone = local . intersection_zones [0 ]
149
136
security_groups = alicloud_security_group. example . * . id
150
137
instance_type = local. instance_type
151
138
system_disk_category = local. available_disk_category
@@ -155,13 +142,13 @@ resource "alicloud_instance" "master_example" {
155
142
instance_name = " master_instance_name_${ random_integer . example . result } "
156
143
vswitch_id = alicloud_vswitch. master_vswitch . id
157
144
internet_max_bandwidth_out = 10
158
- password = var. password
145
+ password = var. ecs_password
159
146
ipv6_address_count = 1
160
147
}
161
148
162
149
# backup ECS实例
163
150
resource "alicloud_instance" "backup_example" {
164
- availability_zone = data . alicloud_zones . example . zones [1 ]. id
151
+ availability_zone = local . intersection_zones [1 ]
165
152
security_groups = alicloud_security_group. example . * . id
166
153
instance_type = local. instance_type
167
154
system_disk_category = local. available_disk_category
@@ -171,7 +158,7 @@ resource "alicloud_instance" "backup_example" {
171
158
instance_name = " backup_instance_name_${ random_integer . example . result } "
172
159
vswitch_id = alicloud_vswitch. backup_vswitch . id
173
160
internet_max_bandwidth_out = 10
174
- password = var. password
161
+ password = var. ecs_password
175
162
}
176
163
177
164
# master ECS命令
@@ -183,6 +170,9 @@ resource "alicloud_ecs_command" "master_ecs_command" {
183
170
command_content = base64encode (local. master_ecs_command )
184
171
timeout = 3600
185
172
working_dir = " /root"
173
+ lifecycle {
174
+ ignore_changes = [command_content ]
175
+ }
186
176
}
187
177
188
178
# 在master ECS中执行命令
@@ -203,6 +193,9 @@ resource "alicloud_ecs_command" "backup_ecs_command" {
203
193
command_content = base64encode (local. backup_ecs_command )
204
194
timeout = 3600
205
195
working_dir = " /root"
196
+ lifecycle {
197
+ ignore_changes = [command_content ]
198
+ }
206
199
}
207
200
208
201
# 在backup ECS中执行命令
@@ -256,6 +249,27 @@ resource "alicloud_alb_server_group" "example" {
256
249
}
257
250
}
258
251
252
+ # alb 实例
253
+ resource "alicloud_alb_load_balancer" "example" {
254
+ load_balancer_edition = " Basic"
255
+ load_balancer_name = " load_balancer_name_${ random_integer . example . result } "
256
+ address_type = " Internet"
257
+ address_ip_version = " DualStack"
258
+ address_allocated_mode = " Fixed"
259
+ vpc_id = alicloud_vpc. example . id
260
+ load_balancer_billing_config {
261
+ pay_type = " PayAsYouGo"
262
+ }
263
+ zone_mappings {
264
+ vswitch_id = alicloud_vswitch. master_vswitch . id
265
+ zone_id = alicloud_vswitch. master_vswitch . zone_id
266
+ }
267
+ zone_mappings {
268
+ vswitch_id = alicloud_vswitch. backup_vswitch . id
269
+ zone_id = alicloud_vswitch. backup_vswitch . zone_id
270
+ }
271
+ }
272
+
259
273
# alb监听
260
274
resource "alicloud_alb_listener" "example" {
261
275
listener_protocol = " HTTP"
@@ -275,7 +289,7 @@ resource "alicloud_alb_listener" "example" {
275
289
resource "alicloud_dns_record" "example" {
276
290
name = var. host_name
277
291
type = " CNAME"
278
- host_record = " @ "
292
+ host_record = var . host_record
279
293
value = alicloud_alb_load_balancer. example . dns_name
280
294
ttl = 600
281
295
}
0 commit comments