@@ -2,19 +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
5
# ECS登录密码
17
- variable "password " {
6
+ variable "ecs_password " {
18
7
type = string
19
8
default = " Terraform@Example"
20
9
}
@@ -26,6 +15,26 @@ variable "host_name" {
26
15
description = " your domain name"
27
16
}
28
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
+ # 查询支持CLB的可用区
30
+ data "alicloud_slb_zones" "example" {}
31
+
32
+ # 可用区
33
+ data "alicloud_zones" "example" {
34
+ available_resource_creation = " VSwitch"
35
+ available_disk_category = local. available_disk_category
36
+ }
37
+
29
38
locals {
30
39
available_disk_category = " cloud_essd"
31
40
# ECS系统镜像
@@ -38,7 +47,8 @@ locals {
38
47
backup_vsw_cidr_block = " 172.16.2.0/24"
39
48
# master交换机网段
40
49
master_vsw_cidr_block = " 172.16.0.0/24"
41
-
50
+ # 提取地区交集
51
+ intersection_zones = tolist (setintersection (data. alicloud_slb_zones . example . ids , data. alicloud_zones . example . ids ))
42
52
# ECS中部署服务脚本
43
53
master_ecs_command = << EOS
44
54
yum install -y nginx
@@ -70,15 +80,15 @@ resource "alicloud_vpc" "example" {
70
80
resource "alicloud_vswitch" "master_vswitch" {
71
81
vpc_id = alicloud_vpc. example . id
72
82
cidr_block = local. master_vsw_cidr_block
73
- zone_id = data . alicloud_zones . example . zones [0 ]. id
83
+ zone_id = local . intersection_zones [0 ]
74
84
vswitch_name = " master_vswitch_test_${ random_integer . example . result } "
75
85
}
76
86
77
87
# backup交换机
78
88
resource "alicloud_vswitch" "backup_vswitch" {
79
89
vpc_id = alicloud_vpc. example . id
80
90
cidr_block = local. backup_vsw_cidr_block
81
- zone_id = data . alicloud_zones . example . zones [1 ]. id
91
+ zone_id = local . intersection_zones [1 ]
82
92
vswitch_name = " backup_vswitch_test_${ random_integer . example . result } "
83
93
}
84
94
@@ -106,15 +116,15 @@ resource "alicloud_security_group_rule" "egress" {
106
116
ip_protocol = " tcp" # TCP协议
107
117
nic_type = " intranet" # 内网网卡类型(VPC环境)
108
118
policy = " accept" # 允许策略
109
- port_range = " 8 /80" # 允许80端口
119
+ port_range = " 80 /80" # 允许80端口
110
120
priority = 1 # 优先级设置
111
121
security_group_id = alicloud_security_group. example . id # 关联的安全组ID
112
122
cidr_ip = " 10.0.0.0/8" # 允许的IP地址范围,示例为10.0.0.0/8
113
123
}
114
124
115
125
# mster ECS实例
116
126
resource "alicloud_instance" "master_example" {
117
- availability_zone = data . alicloud_zones . example . zones [0 ]. id
127
+ availability_zone = local . intersection_zones [0 ]
118
128
security_groups = alicloud_security_group. example . * . id
119
129
instance_type = local. instance_type
120
130
system_disk_category = local. available_disk_category
@@ -124,12 +134,12 @@ resource "alicloud_instance" "master_example" {
124
134
instance_name = " master_instance_name_${ random_integer . example . result } "
125
135
vswitch_id = alicloud_vswitch. master_vswitch . id
126
136
internet_max_bandwidth_out = 10
127
- password = var. password
137
+ password = var. ecs_password
128
138
}
129
139
130
140
# backup ECS实例
131
141
resource "alicloud_instance" "backup_example" {
132
- availability_zone = data . alicloud_zones . example . zones [1 ]. id
142
+ availability_zone = local . intersection_zones [1 ]
133
143
security_groups = alicloud_security_group. example . * . id
134
144
instance_type = local. instance_type
135
145
system_disk_category = local. available_disk_category
@@ -139,7 +149,7 @@ resource "alicloud_instance" "backup_example" {
139
149
instance_name = " backup_instance_name_${ random_integer . example . result } "
140
150
vswitch_id = alicloud_vswitch. backup_vswitch . id
141
151
internet_max_bandwidth_out = 10
142
- password = var. password
152
+ password = var. ecs_password
143
153
}
144
154
145
155
# master ECS命令
@@ -151,6 +161,9 @@ resource "alicloud_ecs_command" "master_ecs_command" {
151
161
command_content = base64encode (local. master_ecs_command )
152
162
timeout = 3600
153
163
working_dir = " /root"
164
+ lifecycle {
165
+ ignore_changes = [command_content ]
166
+ }
154
167
}
155
168
156
169
# 在master ECS中执行命令
@@ -171,6 +184,9 @@ resource "alicloud_ecs_command" "backup_ecs_command" {
171
184
command_content = base64encode (local. backup_ecs_command )
172
185
timeout = 3600
173
186
working_dir = " /root"
187
+ lifecycle {
188
+ ignore_changes = [command_content ]
189
+ }
174
190
}
175
191
176
192
# 在backup ECS中执行命令
@@ -226,6 +242,7 @@ resource "alicloud_slb_server_group_server_attachment" "backup_attachment_master
226
242
description = " backup"
227
243
}
228
244
245
+ # 创建监听
229
246
resource "alicloud_slb_listener" "example" {
230
247
description = " description_${ random_integer . example . result } "
231
248
load_balancer_id = alicloud_slb_load_balancer. example . id
@@ -240,7 +257,7 @@ resource "alicloud_slb_listener" "example" {
240
257
resource "alicloud_dns_record" "example" {
241
258
name = var. host_name
242
259
type = " A"
243
- host_record = " WWWW "
260
+ host_record = var . host_record
244
261
value = alicloud_slb_load_balancer. example . address
245
262
ttl = 600
246
263
}
0 commit comments