@@ -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,14 +15,35 @@ variable "host_name" {
2715 description = " your domain name"
2816}
2917
30- locals {
31- vpc_cidr_block = " 172.16.0.0/16"
32- available_disk_category = " cloud_essd"
33- image_id = " aliyun_2_1903_x64_20G_alibase_20240628.vhd"
34- instance_type = " ecs.e-c1m1.large"
35- master_vsw_cidr_block = " 172.16.0.0/24"
36- backup_vsw_cidr_block = " 172.16.2.0/24"
18+ # 主机记录
19+ variable "host_record" {
20+ type = string
21+ default = " image"
22+ description = " Host Record,like image"
23+ }
3724
25+ provider "alicloud" {
26+ region = var. region
27+ }
28+
29+ # 查询支持ALB的可用区
30+ data "alicloud_alb_zones" "example" {}
31+
32+ # 查询支持ECS云盘类型的可用区
33+ data "alicloud_zones" "example" {
34+ available_resource_creation = " VSwitch" // 交换机类型
35+ available_disk_category = local. available_disk_category // 云盘类型
36+ }
37+
38+ locals {
39+ vpc_cidr_block = " 172.16.0.0/16" # 专有网络VPC的CIDR
40+ available_disk_category = " cloud_essd" # 云盘类型
41+ image_id = " aliyun_2_1903_x64_20G_alibase_20240628.vhd" # 镜像ID
42+ ecs_instance_type = " ecs.e-c1m1.large" # ECS实例规格
43+ master_vsw_cidr_block = " 172.16.0.0/24" # master交换机的CIDR
44+ backup_vsw_cidr_block = " 172.16.2.0/24" # backup交换机的CIDR
45+ # 提取地区交集
46+ intersection_zones = tolist (setintersection (data. alicloud_alb_zones . example . ids , data. alicloud_zones . example . ids ))
3847 # ECS中部署服务脚本
3948 master_ecs_command = << EOS
4049 yum install -y nginx
@@ -66,15 +75,15 @@ resource "alicloud_vpc" "example" {
6675resource "alicloud_vswitch" "master_vswitch" {
6776 vpc_id = alicloud_vpc. example . id
6877 cidr_block = local. master_vsw_cidr_block
69- zone_id = data . alicloud_zones . example . zones [0 ]. id
78+ zone_id = local . intersection_zones [0 ]
7079 vswitch_name = " master_vswitch_test_${ random_integer . example . result } "
7180}
7281
7382# backup交换机
7483resource "alicloud_vswitch" "backup_vswitch" {
7584 vpc_id = alicloud_vpc. example . id
7685 cidr_block = local. backup_vsw_cidr_block
77- zone_id = data . alicloud_zones . example . zones [1 ]. id
86+ zone_id = local . intersection_zones [1 ]
7887 vswitch_name = " backup_vswitch_test_${ random_integer . example . result } "
7988}
8089
@@ -110,32 +119,32 @@ resource "alicloud_security_group_rule" "egress" {
110119
111120# mster ECS实例
112121resource "alicloud_instance" "master_example" {
113- availability_zone = data . alicloud_zones . example . zones [0 ]. id
122+ availability_zone = local . intersection_zones [0 ]
114123 security_groups = alicloud_security_group. example . * . id
115- instance_type = local. instance_type
124+ instance_type = local. ecs_instance_type
116125 system_disk_category = local. available_disk_category
117126 system_disk_name = " master_system_disk_name_${ random_integer . example . result } "
118127 system_disk_description = " master_system_disk_description_${ random_integer . example . result } "
119128 image_id = local. image_id
120129 instance_name = " master_instance_name_${ random_integer . example . result } "
121130 vswitch_id = alicloud_vswitch. master_vswitch . id
122131 internet_max_bandwidth_out = 10
123- password = var. password
132+ password = var. ecs_password
124133}
125134
126135# backup ECS实例
127136resource "alicloud_instance" "backup_example" {
128- availability_zone = data . alicloud_zones . example . zones [1 ]. id
137+ availability_zone = local . intersection_zones [1 ]
129138 security_groups = alicloud_security_group. example . * . id
130- instance_type = local. instance_type
139+ instance_type = local. ecs_instance_type
131140 system_disk_category = local. available_disk_category
132141 system_disk_name = " backup_system_disk_name_${ random_integer . example . result } "
133142 system_disk_description = " backup_system_disk_description_${ random_integer . example . result } "
134143 image_id = local. image_id
135144 instance_name = " backup_instance_name_${ random_integer . example . result } "
136145 vswitch_id = alicloud_vswitch. backup_vswitch . id
137146 internet_max_bandwidth_out = 10
138- password = var. password
147+ password = var. ecs_password
139148}
140149
141150# master ECS命令
@@ -147,6 +156,9 @@ resource "alicloud_ecs_command" "master_ecs_command" {
147156 command_content = base64encode (local. master_ecs_command )
148157 timeout = 3600
149158 working_dir = " /root"
159+ lifecycle {
160+ ignore_changes = [command_content ]
161+ }
150162}
151163
152164# 在master ECS中执行命令
@@ -167,6 +179,9 @@ resource "alicloud_ecs_command" "backup_ecs_command" {
167179 command_content = base64encode (local. backup_ecs_command )
168180 timeout = 3600
169181 working_dir = " /root"
182+ lifecycle {
183+ ignore_changes = [command_content ]
184+ }
170185}
171186
172187# 在backup ECS中执行命令
@@ -260,7 +275,7 @@ resource "alicloud_alb_listener" "example" {
260275resource "alicloud_dns_record" "example" {
261276 name = var. host_name
262277 type = " CNAME"
263- host_record = " @ "
278+ host_record = var . host_record
264279 value = alicloud_alb_load_balancer. example . dns_name
265280 ttl = 600
266281}
0 commit comments