@@ -2,20 +2,8 @@ variable "region" {
22 default = " cn-beijing"
33}
44
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-
175# ECS登录密码
18- variable "password " {
6+ variable "ecs_password " {
197 type = string
208 default = " Terraform@Example"
219}
@@ -27,6 +15,26 @@ variable "host_name" {
2715 description = " your domain name"
2816}
2917
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+
3038locals {
3139 # 专有网络VPC网段
3240 vpc_cidr_block = " 172.16.0.0/16"
@@ -35,10 +43,13 @@ locals {
3543 # backup交换机网段
3644 backup_vsw_cidr_block = " 172.16.2.0/24"
3745 # ECS规格
38- instance_type = " ecs.e-c1m1.large"
46+ ecs_instance_type = " ecs.e-c1m1.large"
3947 # ECS系统镜像
40- image_id = " aliyun_2_1903_x64_20G_alibase_20240628.vhd"
48+ image_id = " aliyun_2_1903_x64_20G_alibase_20240628.vhd"
49+ # 磁盘类型
4150 available_disk_category = " cloud_essd"
51+ # 提取地区交集
52+ intersection_zones = tolist (setintersection (data. alicloud_nlb_zones . example . ids , data. alicloud_zones . example . ids ))
4253 # ECS中部署服务脚本
4354 master_ecs_command = << EOS
4455 yum install -y nginx
@@ -70,15 +81,15 @@ resource "alicloud_vpc" "example" {
7081resource "alicloud_vswitch" "master_vswitch" {
7182 vpc_id = alicloud_vpc. example . id
7283 cidr_block = local. master_vsw_cidr_block
73- zone_id = data . alicloud_zones . example . zones [0 ]. id
84+ zone_id = local . intersection_zones [0 ]
7485 vswitch_name = " master_vswitch_test_${ random_integer . example . result } "
7586}
7687
7788# backup交换机
7889resource "alicloud_vswitch" "backup_vswitch" {
7990 vpc_id = alicloud_vpc. example . id
8091 cidr_block = local. backup_vsw_cidr_block
81- zone_id = data . alicloud_zones . example . zones [1 ]. id
92+ zone_id = local . intersection_zones [1 ]
8293 vswitch_name = " backup_vswitch_test_${ random_integer . example . result } "
8394}
8495
@@ -114,32 +125,32 @@ resource "alicloud_security_group_rule" "egress" {
114125
115126# mster ECS实例
116127resource "alicloud_instance" "master_example" {
117- availability_zone = data . alicloud_zones . example . zones [0 ]. id
128+ availability_zone = local . intersection_zones [0 ]
118129 security_groups = alicloud_security_group. example . * . id
119- instance_type = local. instance_type
130+ instance_type = local. ecs_instance_type
120131 system_disk_category = local. available_disk_category
121132 system_disk_name = " master_system_disk_name_${ random_integer . example . result } "
122133 system_disk_description = " master_system_disk_description_${ random_integer . example . result } "
123134 image_id = local. image_id
124135 instance_name = " master_instance_name_${ random_integer . example . result } "
125136 vswitch_id = alicloud_vswitch. master_vswitch . id
126137 internet_max_bandwidth_out = 10
127- password = var. password
138+ password = var. ecs_password
128139}
129140
130141# backup ECS实例
131142resource "alicloud_instance" "backup_example" {
132- availability_zone = data . alicloud_zones . example . zones [1 ]. id
143+ availability_zone = local . intersection_zones [1 ]
133144 security_groups = alicloud_security_group. example . * . id
134- instance_type = local. instance_type
145+ instance_type = local. ecs_instance_type
135146 system_disk_category = local. available_disk_category
136147 system_disk_name = " backup_system_disk_name_${ random_integer . example . result } "
137148 system_disk_description = " backup_system_disk_description_${ random_integer . example . result } "
138149 image_id = local. image_id
139150 instance_name = " backup_instance_name_${ random_integer . example . result } "
140151 vswitch_id = alicloud_vswitch. backup_vswitch . id
141152 internet_max_bandwidth_out = 10
142- password = var. password
153+ password = var. ecs_password
143154}
144155
145156# master ECS命令
@@ -151,6 +162,9 @@ resource "alicloud_ecs_command" "master_ecs_command" {
151162 command_content = base64encode (local. master_ecs_command )
152163 timeout = 3600
153164 working_dir = " /root"
165+ lifecycle {
166+ ignore_changes = [command_content ]
167+ }
154168}
155169
156170# 在master ECS中执行命令
@@ -171,6 +185,9 @@ resource "alicloud_ecs_command" "backup_ecs_command" {
171185 command_content = base64encode (local. backup_ecs_command )
172186 timeout = 3600
173187 working_dir = " /root"
188+ lifecycle {
189+ ignore_changes = [command_content ]
190+ }
174191}
175192
176193# 在backup ECS中执行命令
@@ -182,6 +199,23 @@ resource "alicloud_ecs_invocation" "backup_invocation" {
182199 }
183200}
184201
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+
185219# nlb服务器组
186220resource "alicloud_nlb_server_group" "example" {
187221 server_group_name = " server_group_name_${ random_integer . example . result } "
@@ -228,23 +262,6 @@ resource "alicloud_nlb_server_group_server_attachment" "attachment_backup_ecs" {
228262 weight = 100
229263}
230264
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-
248265# nlb监听
249266resource "alicloud_nlb_listener" "default" {
250267 listener_protocol = " TCP"
@@ -262,7 +279,7 @@ resource "alicloud_nlb_listener" "default" {
262279resource "alicloud_dns_record" "example" {
263280 name = var. host_name
264281 type = " CNAME"
265- host_record = " @ "
282+ host_record = var . host_record
266283 value = alicloud_nlb_load_balancer. example . dns_name
267284 ttl = 600
268285}
0 commit comments