@@ -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 = " ipv6"
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 ipv4网段
3240 vpc_cidr_ipv4_block = " 172.16.0.0/16"
@@ -39,6 +47,8 @@ locals {
3947 backup_vsw_cidr_ipv4_block = " 172.16.2.0/24"
4048 # ECS规格
4149 instance_type = " ecs.e-c1m1.large"
50+ # 提取地区交集
51+ intersection_zones = tolist (setintersection (data. alicloud_nlb_zones . example . ids , data. alicloud_zones . example . ids ))
4252 # ECS中部署服务脚本
4353 master_ecs_command = << EOS
4454 yum install -y nginx
@@ -83,7 +93,7 @@ resource "alicloud_vswitch" "master_vswitch" {
8393 vpc_id = alicloud_vpc. example . id
8494 enable_ipv6 = true
8595 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 ]
8797 ipv6_cidr_block_mask = 64
8898 vswitch_name = " master_vswitch_test_${ random_integer . example . result } "
8999}
@@ -93,7 +103,7 @@ resource "alicloud_vswitch" "backup_vswitch" {
93103 vpc_id = alicloud_vpc. example . id
94104 enable_ipv6 = true
95105 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 ]
97107 ipv6_cidr_block_mask = 54
98108 vswitch_name = " backup_vswitch_test_${ random_integer . example . result } "
99109}
@@ -122,15 +132,15 @@ resource "alicloud_security_group_rule" "egress" {
122132 ip_protocol = " tcp" # TCP协议
123133 nic_type = " intranet" # 内网网卡类型(VPC环境)
124134 policy = " accept" # 允许策略
125- port_range = " 8 /80" # 允许80端口
135+ port_range = " 80 /80" # 允许80端口
126136 priority = 1 # 优先级设置
127137 security_group_id = alicloud_security_group. example . id # 关联的安全组ID
128138 cidr_ip = " 10.0.0.0/8" # 允许的IP地址范围,示例为10.0.0.0/8
129139}
130140
131141# mster ECS实例
132142resource "alicloud_instance" "master_example" {
133- availability_zone = data . alicloud_zones . example . zones [0 ]. id
143+ availability_zone = local . intersection_zones [0 ]
134144 security_groups = alicloud_security_group. example . * . id
135145 instance_type = local. instance_type
136146 system_disk_category = local. available_disk_category
@@ -140,13 +150,13 @@ resource "alicloud_instance" "master_example" {
140150 instance_name = " master_instance_name_${ random_integer . example . result } "
141151 vswitch_id = alicloud_vswitch. master_vswitch . id
142152 internet_max_bandwidth_out = 10
143- password = var. password
153+ password = var. ecs_password
144154 ipv6_address_count = 1
145155}
146156
147157# backup ECS实例
148158resource "alicloud_instance" "backup_example" {
149- availability_zone = data . alicloud_zones . example . zones [1 ]. id
159+ availability_zone = local . intersection_zones [1 ]
150160 security_groups = alicloud_security_group. example . * . id
151161 instance_type = local. instance_type
152162 system_disk_category = local. available_disk_category
@@ -156,7 +166,7 @@ resource "alicloud_instance" "backup_example" {
156166 instance_name = " backup_instance_name_${ random_integer . example . result } "
157167 vswitch_id = alicloud_vswitch. backup_vswitch . id
158168 internet_max_bandwidth_out = 10
159- password = var. password
169+ password = var. ecs_password
160170}
161171
162172# master ECS命令
@@ -168,6 +178,9 @@ resource "alicloud_ecs_command" "master_ecs_command" {
168178 command_content = base64encode (local. master_ecs_command )
169179 timeout = 3600
170180 working_dir = " /root"
181+ lifecycle {
182+ ignore_changes = [command_content ]
183+ }
171184}
172185
173186# 在master ECS中执行命令
@@ -188,6 +201,9 @@ resource "alicloud_ecs_command" "backup_ecs_command" {
188201 command_content = base64encode (local. backup_ecs_command )
189202 timeout = 3600
190203 working_dir = " /root"
204+ lifecycle {
205+ ignore_changes = [command_content ]
206+ }
191207}
192208
193209# 在backup ECS中执行命令
@@ -282,7 +298,7 @@ resource "alicloud_nlb_listener" "default" {
282298resource "alicloud_dns_record" "example" {
283299 name = var. host_name
284300 type = " CNAME"
285- host_record = " @ "
301+ host_record = var . host_record
286302 value = alicloud_nlb_load_balancer. example . dns_name
287303 ttl = 600
288304}
0 commit comments