@@ -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 = " ipv6"
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 ipv4网段
32
40
vpc_cidr_ipv4_block = " 172.16.0.0/16"
@@ -39,6 +47,8 @@ locals {
39
47
backup_vsw_cidr_ipv4_block = " 172.16.2.0/24"
40
48
# ECS规格
41
49
instance_type = " ecs.e-c1m1.large"
50
+ # 提取地区交集
51
+ intersection_zones = tolist (setintersection (data. alicloud_nlb_zones . example . ids , data. alicloud_zones . example . ids ))
42
52
# ECS中部署服务脚本
43
53
master_ecs_command = << EOS
44
54
yum install -y nginx
@@ -83,7 +93,7 @@ resource "alicloud_vswitch" "master_vswitch" {
83
93
vpc_id = alicloud_vpc. example . id
84
94
enable_ipv6 = true
85
95
cidr_block = local. master_vsw_cidr_ipv4_block
86
- zone_id = data . alicloud_zones . example . zones [0 ]. id
96
+ zone_id = local . intersection_zones [0 ]
87
97
ipv6_cidr_block_mask = 64
88
98
vswitch_name = " master_vswitch_test_${ random_integer . example . result } "
89
99
}
@@ -93,7 +103,7 @@ resource "alicloud_vswitch" "backup_vswitch" {
93
103
vpc_id = alicloud_vpc. example . id
94
104
enable_ipv6 = true
95
105
cidr_block = local. backup_vsw_cidr_ipv4_block
96
- zone_id = data . alicloud_zones . example . zones [1 ]. id
106
+ zone_id = local . intersection_zones [1 ]
97
107
ipv6_cidr_block_mask = 54
98
108
vswitch_name = " backup_vswitch_test_${ random_integer . example . result } "
99
109
}
@@ -122,15 +132,15 @@ resource "alicloud_security_group_rule" "egress" {
122
132
ip_protocol = " tcp" # TCP协议
123
133
nic_type = " intranet" # 内网网卡类型(VPC环境)
124
134
policy = " accept" # 允许策略
125
- port_range = " 8 /80" # 允许80端口
135
+ port_range = " 80 /80" # 允许80端口
126
136
priority = 1 # 优先级设置
127
137
security_group_id = alicloud_security_group. example . id # 关联的安全组ID
128
138
cidr_ip = " 10.0.0.0/8" # 允许的IP地址范围,示例为10.0.0.0/8
129
139
}
130
140
131
141
# mster ECS实例
132
142
resource "alicloud_instance" "master_example" {
133
- availability_zone = data . alicloud_zones . example . zones [0 ]. id
143
+ availability_zone = local . intersection_zones [0 ]
134
144
security_groups = alicloud_security_group. example . * . id
135
145
instance_type = local. instance_type
136
146
system_disk_category = local. available_disk_category
@@ -140,13 +150,13 @@ resource "alicloud_instance" "master_example" {
140
150
instance_name = " master_instance_name_${ random_integer . example . result } "
141
151
vswitch_id = alicloud_vswitch. master_vswitch . id
142
152
internet_max_bandwidth_out = 10
143
- password = var. password
153
+ password = var. ecs_password
144
154
ipv6_address_count = 1
145
155
}
146
156
147
157
# backup ECS实例
148
158
resource "alicloud_instance" "backup_example" {
149
- availability_zone = data . alicloud_zones . example . zones [1 ]. id
159
+ availability_zone = local . intersection_zones [1 ]
150
160
security_groups = alicloud_security_group. example . * . id
151
161
instance_type = local. instance_type
152
162
system_disk_category = local. available_disk_category
@@ -156,7 +166,7 @@ resource "alicloud_instance" "backup_example" {
156
166
instance_name = " backup_instance_name_${ random_integer . example . result } "
157
167
vswitch_id = alicloud_vswitch. backup_vswitch . id
158
168
internet_max_bandwidth_out = 10
159
- password = var. password
169
+ password = var. ecs_password
160
170
}
161
171
162
172
# master ECS命令
@@ -168,6 +178,9 @@ resource "alicloud_ecs_command" "master_ecs_command" {
168
178
command_content = base64encode (local. master_ecs_command )
169
179
timeout = 3600
170
180
working_dir = " /root"
181
+ lifecycle {
182
+ ignore_changes = [command_content ]
183
+ }
171
184
}
172
185
173
186
# 在master ECS中执行命令
@@ -188,6 +201,9 @@ resource "alicloud_ecs_command" "backup_ecs_command" {
188
201
command_content = base64encode (local. backup_ecs_command )
189
202
timeout = 3600
190
203
working_dir = " /root"
204
+ lifecycle {
205
+ ignore_changes = [command_content ]
206
+ }
191
207
}
192
208
193
209
# 在backup ECS中执行命令
@@ -282,7 +298,7 @@ resource "alicloud_nlb_listener" "default" {
282
298
resource "alicloud_dns_record" "example" {
283
299
name = var. host_name
284
300
type = " CNAME"
285
- host_record = " @ "
301
+ host_record = var . host_record
286
302
value = alicloud_nlb_load_balancer. example . dns_name
287
303
ttl = 600
288
304
}
0 commit comments