Skip to content

Commit 842eeca

Browse files
lsy1968shanye997
authored andcommitted
201-use-case-implement-load-balancing-for-ipv6-services
1 parent f786900 commit 842eeca

File tree

2 files changed

+62
-46
lines changed
  • quickstarts/Application_Load_Balancer(ALB)/201-use-case-implement-load-balancing-for-ipv6-services

2 files changed

+62
-46
lines changed

quickstarts/Application_Load_Balancer(ALB)/201-use-case-implement-load-balancing-for-ipv6-services/README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,16 @@ No modules.
4343
| [alicloud_vswitch.backup_vswitch](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vswitch) | resource |
4444
| [alicloud_vswitch.master_vswitch](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vswitch) | resource |
4545
| [random_integer.example](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/integer) | resource |
46+
| [alicloud_alb_zones.example](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/data-sources/alb_zones) | data source |
4647
| [alicloud_zones.example](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/data-sources/zones) | data source |
4748

4849
## Inputs
4950

5051
| Name | Description | Type | Default | Required |
5152
|------|-------------|------|---------|:--------:|
52-
| <a name="input_host_name"></a> [host\_name](#input\_host\_name) | your domain name | `string` | `"tf-example.com"` | no |
53-
| <a name="input_password"></a> [password](#input\_password) | ECS登录密码 | `string` | `"Terraform@Example"` | no |
53+
| <a name="input_ecs_password"></a> [ecs\_password](#input\_ecs\_password) | ECS登录密码 | `string` | `"Terraform@Example"` | no |
54+
| <a name="input_host_name"></a> [host\_name](#input\_host\_name) | 域名 | `string` | `"tf-example.com"` | no |
55+
| <a name="input_host_record"></a> [host\_record](#input\_host\_record) | 主机记录 | `string` | `"image"` | no |
5456
| <a name="input_region"></a> [region](#input\_region) | n/a | `string` | `"cn-beijing"` | no |
5557
<!-- END_TF_DOCS -->
5658

quickstarts/Application_Load_Balancer(ALB)/201-use-case-implement-load-balancing-for-ipv6-services/main.tf

Lines changed: 58 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,35 @@ variable "region" {
22
default = "cn-beijing"
33
}
44

5-
provider "alicloud" {
6-
region = var.region
5+
# ECS登录密码
6+
variable "ecs_password" {
7+
type = string
8+
default = "Terraform@Example"
79
}
810

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"
11+
# 域名
12+
variable "host_name" {
13+
type = string
14+
default = "tf-example.com"
1515
}
1616

17-
# ECS登录密码
18-
variable "password" {
17+
# 主机记录
18+
variable "host_record" {
1919
type = string
20-
default = "Terraform@Example"
20+
default = "image"
2121
}
2222

23-
# 域名(改为您的域名)
24-
variable "host_name" {
25-
type = string
26-
default = "tf-example.com"
27-
description = "your domain name"
23+
provider "alicloud" {
24+
region = var.region
25+
}
26+
27+
# 查询支持ALB的可用区
28+
data "alicloud_alb_zones" "example" {}
29+
30+
# 查询支持ECS云盘类型的可用区
31+
data "alicloud_zones" "example" {
32+
available_resource_creation = "VSwitch" // 交换机
33+
available_disk_category = local.available_disk_category // 云盘类型
2834
}
2935

3036
locals {
@@ -39,6 +45,8 @@ locals {
3945
# ECS系统镜像
4046
image_id = "aliyun_2_1903_x64_20G_alibase_20240628.vhd"
4147
available_disk_category = "cloud_essd"
48+
# 提取地区交集
49+
intersection_zones = tolist(setintersection(data.alicloud_alb_zones.example.ids, data.alicloud_zones.example.ids))
4250
# ECS中部署服务脚本
4351
master_ecs_command = <<EOS
4452
yum install -y nginx
@@ -77,7 +85,7 @@ resource "alicloud_vswitch" "master_vswitch" {
7785
vpc_id = alicloud_vpc.example.id
7886
enable_ipv6 = true
7987
cidr_block = local.master_vsw_cidr_ipv4_block
80-
zone_id = data.alicloud_zones.example.zones[0].id
88+
zone_id = local.intersection_zones[0]
8189
ipv6_cidr_block_mask = 64
8290
vswitch_name = "master_vswitch_test_${random_integer.example.result}"
8391
}
@@ -87,32 +95,11 @@ resource "alicloud_vswitch" "backup_vswitch" {
8795
vpc_id = alicloud_vpc.example.id
8896
enable_ipv6 = true
8997
cidr_block = local.backup_vsw_cidr_ipv4_block
90-
zone_id = data.alicloud_zones.example.zones[1].id
98+
zone_id = local.intersection_zones[1]
9199
ipv6_cidr_block_mask = 54
92100
vswitch_name = "backup_vswitch_test_${random_integer.example.result}"
93101
}
94102

95-
# alb 实例
96-
resource "alicloud_alb_load_balancer" "example" {
97-
load_balancer_edition = "Basic"
98-
load_balancer_name = "load_balancer_name_${random_integer.example.result}"
99-
address_type = "Internet"
100-
address_ip_version = "DualStack"
101-
address_allocated_mode = "Fixed"
102-
vpc_id = alicloud_vpc.example.id
103-
load_balancer_billing_config {
104-
pay_type = "PayAsYouGo"
105-
}
106-
zone_mappings {
107-
vswitch_id = alicloud_vswitch.master_vswitch.id
108-
zone_id = alicloud_vswitch.master_vswitch.zone_id
109-
}
110-
zone_mappings {
111-
vswitch_id = alicloud_vswitch.backup_vswitch.id
112-
zone_id = alicloud_vswitch.backup_vswitch.zone_id
113-
}
114-
}
115-
116103
# 安全组
117104
resource "alicloud_security_group" "example" {
118105
security_group_name = "security_group_name_${random_integer.example.result}"
@@ -145,7 +132,7 @@ resource "alicloud_security_group_rule" "egress" {
145132

146133
# mster ECS实例
147134
resource "alicloud_instance" "master_example" {
148-
availability_zone = data.alicloud_zones.example.zones[0].id
135+
availability_zone = local.intersection_zones[0]
149136
security_groups = alicloud_security_group.example.*.id
150137
instance_type = local.instance_type
151138
system_disk_category = local.available_disk_category
@@ -155,13 +142,13 @@ resource "alicloud_instance" "master_example" {
155142
instance_name = "master_instance_name_${random_integer.example.result}"
156143
vswitch_id = alicloud_vswitch.master_vswitch.id
157144
internet_max_bandwidth_out = 10
158-
password = var.password
145+
password = var.ecs_password
159146
ipv6_address_count = 1
160147
}
161148

162149
# backup ECS实例
163150
resource "alicloud_instance" "backup_example" {
164-
availability_zone = data.alicloud_zones.example.zones[1].id
151+
availability_zone = local.intersection_zones[1]
165152
security_groups = alicloud_security_group.example.*.id
166153
instance_type = local.instance_type
167154
system_disk_category = local.available_disk_category
@@ -171,7 +158,7 @@ resource "alicloud_instance" "backup_example" {
171158
instance_name = "backup_instance_name_${random_integer.example.result}"
172159
vswitch_id = alicloud_vswitch.backup_vswitch.id
173160
internet_max_bandwidth_out = 10
174-
password = var.password
161+
password = var.ecs_password
175162
}
176163

177164
# master ECS命令
@@ -183,6 +170,9 @@ resource "alicloud_ecs_command" "master_ecs_command" {
183170
command_content = base64encode(local.master_ecs_command)
184171
timeout = 3600
185172
working_dir = "/root"
173+
lifecycle {
174+
ignore_changes = [command_content]
175+
}
186176
}
187177

188178
# 在master ECS中执行命令
@@ -203,6 +193,9 @@ resource "alicloud_ecs_command" "backup_ecs_command" {
203193
command_content = base64encode(local.backup_ecs_command)
204194
timeout = 3600
205195
working_dir = "/root"
196+
lifecycle {
197+
ignore_changes = [command_content]
198+
}
206199
}
207200

208201
# 在backup ECS中执行命令
@@ -256,6 +249,27 @@ resource "alicloud_alb_server_group" "example" {
256249
}
257250
}
258251

252+
# alb 实例
253+
resource "alicloud_alb_load_balancer" "example" {
254+
load_balancer_edition = "Basic"
255+
load_balancer_name = "load_balancer_name_${random_integer.example.result}"
256+
address_type = "Internet"
257+
address_ip_version = "DualStack"
258+
address_allocated_mode = "Fixed"
259+
vpc_id = alicloud_vpc.example.id
260+
load_balancer_billing_config {
261+
pay_type = "PayAsYouGo"
262+
}
263+
zone_mappings {
264+
vswitch_id = alicloud_vswitch.master_vswitch.id
265+
zone_id = alicloud_vswitch.master_vswitch.zone_id
266+
}
267+
zone_mappings {
268+
vswitch_id = alicloud_vswitch.backup_vswitch.id
269+
zone_id = alicloud_vswitch.backup_vswitch.zone_id
270+
}
271+
}
272+
259273
# alb监听
260274
resource "alicloud_alb_listener" "example" {
261275
listener_protocol = "HTTP"
@@ -275,7 +289,7 @@ resource "alicloud_alb_listener" "example" {
275289
resource "alicloud_dns_record" "example" {
276290
name = var.host_name
277291
type = "CNAME"
278-
host_record = "@"
292+
host_record = var.host_record
279293
value = alicloud_alb_load_balancer.example.dns_name
280294
ttl = 600
281295
}

0 commit comments

Comments
 (0)