Skip to content

Commit 8e5dcf6

Browse files
geeklennyxiaozhu36
authored andcommitted
Terraform module which creates ALB instance and http listener on Alibaba Cloud.
1 parent 9a7441d commit 8e5dcf6

File tree

9 files changed

+486
-2
lines changed

9 files changed

+486
-2
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
## 1.0.0 (2022-03-24)
2+
3+
- Project initialization.

README-CN.md

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
terraform-alicloud-alb-http
2+
=====================================================================
3+
4+
本 Module 用于在阿里云创建一个[应用型负载均衡(ALB)](https://help.aliyun.com/document_detail/250240.html), 并为其绑定Http监听.
5+
6+
本 Module 支持创建以下资源:
7+
8+
* [应用型负载均衡(Alb_Load_Balancer)](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/alb_load_balancer)
9+
* [应用型负载均衡服务器分组(Alb_Server_Group)](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/alb_server_group)
10+
* [应用型负载均衡访问控制权限(Alb_Acl)](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/alb_acl)
11+
* [应用型负载均衡监听(Alb_Listener)](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/alb_listener)
12+
13+
## 版本要求
14+
15+
| Name | Version |
16+
|------|---------|
17+
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 0.13.0 |
18+
| <a name="requirement_alicloud"></a> [alicloud](#requirement\_alicloud) | >= 1.131.0 |
19+
20+
## Providers
21+
22+
| Name | Version |
23+
|------|---------|
24+
| <a name="provider_alicloud"></a> [alicloud](#provider\_alicloud) | >= 1.131.0 |
25+
26+
## 用法
27+
28+
```hcl
29+
module "example" {
30+
create = true
31+
source = "../.."
32+
vpc_id = alicloud_vpc.default.id
33+
address_type = "Internet"
34+
address_allocated_mode = "Fixed"
35+
load_balancer_name = "tf_alb_name"
36+
load_balancer_edition = "Basic"
37+
zone_mappings = [
38+
{ vswitch_id = alicloud_vswitch.vswitch_1.id, zone_id = data.alicloud_alb_zones.default.zones.0.id },
39+
{ vswitch_id = alicloud_vswitch.vswitch_2.id, zone_id = data.alicloud_alb_zones.default.zones.1.id }
40+
]
41+
access_log_config = [
42+
{ log_project = alicloud_log_project.default.name, log_store = alicloud_log_store.default.name }
43+
]
44+
acl_name = "tf_acl_name"
45+
server_group_name = "acl_server_group_name"
46+
listener_port = 80
47+
listener_description = "CreatedByTerraform"
48+
}
49+
```
50+
51+
提交问题
52+
------
53+
如果在使用该 Terraform Module 的过程中有任何问题,可以直接创建一个 [Provider Issue](https://github.com/aliyun/terraform-provider-alicloud/issues/new),我们将根据问题描述提供解决方案。
54+
55+
**注意:** 不建议在该 Module 仓库中直接提交 Issue。
56+
57+
作者
58+
-------
59+
Created and maintained by Alibaba Cloud Terraform Team(terraform@alibabacloud.com)
60+
61+
许可
62+
----
63+
Apache 2 Licensed. See LICENSE for full details.
64+
65+
参考
66+
---------
67+
* [Terraform-Provider-Alicloud Github](https://github.com/aliyun/terraform-provider-alicloud)
68+
* [Terraform-Provider-Alicloud Release](https://releases.hashicorp.com/terraform-provider-alicloud/)
69+
* [Terraform-Provider-Alicloud Docs](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs)

README.md

Lines changed: 75 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,75 @@
1-
# terraform-alicloud-alb-http
2-
Terraform Module for creating HTTP listener for Application Load Balancer and setting forwarding rules on Alibaba Cloud.
1+
Terraform module which creates ALB instance and http listener on Alibaba Cloud.
2+
3+
terraform-alicloud-alb-http
4+
=====================================================================
5+
6+
English | [简体中文](https://github.com/terraform-alicloud-modules/terraform-alicloud-alb-http/blob/master/README-CN.md)
7+
8+
Terraform module which creates ALB instance and http listener on Alibaba Cloud.
9+
10+
These types of resources are supported:
11+
12+
* [Alb_Load_Balancer](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/alb_load_balancer)
13+
* [Alb_Server_Group](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/alb_server_group)
14+
* [Alb_Acl](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/alb_acl)
15+
* [Alb_Listener](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/alb_listener)
16+
17+
## Requirements
18+
19+
| Name | Version |
20+
|------|---------|
21+
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | > = 0.13.0 |
22+
| <a name="requirement_alicloud"></a> [alicloud](#requirement\_alicloud) | > = 1.131.0 |
23+
24+
## Providers
25+
26+
| Name | Version |
27+
|------|---------|
28+
| <a name="provider_alicloud"></a> [alicloud](#provider\_alicloud) | > = 1.131.0 |
29+
30+
## Usage
31+
32+
```hcl
33+
module "example" {
34+
create = true
35+
source = "../.."
36+
vpc_id = alicloud_vpc.default.id
37+
address_type = "Internet"
38+
address_allocated_mode = "Fixed"
39+
load_balancer_name = "tf_alb_name"
40+
load_balancer_edition = "Basic"
41+
zone_mappings = [
42+
{ vswitch_id = alicloud_vswitch.vswitch_1.id, zone_id = data.alicloud_alb_zones.default.zones.0.id },
43+
{ vswitch_id = alicloud_vswitch.vswitch_2.id, zone_id = data.alicloud_alb_zones.default.zones.1.id }
44+
]
45+
access_log_config = [
46+
{ log_project = alicloud_log_project.default.name, log_store = alicloud_log_store.default.name }
47+
]
48+
acl_name = "tf_acl_name"
49+
server_group_name = "acl_server_group_name"
50+
listener_port = 80
51+
listener_description = "CreatedByTerraform"
52+
}
53+
```
54+
55+
Submit Issues
56+
-------------
57+
If you have any problems when using this module, please opening
58+
a [provider issue](https://github.com/aliyun/terraform-provider-alicloud/issues/new) and let us know.
59+
60+
**Note:** There does not recommend to open an issue on this repo.
61+
62+
Authors
63+
-------
64+
Created and maintained by Alibaba Cloud Terraform Team(terraform@alibabacloud.com)
65+
66+
License
67+
----
68+
Apache 2 Licensed. See LICENSE for full details.
69+
70+
Reference
71+
---------
72+
73+
* [Terraform-Provider-Alicloud Github](https://github.com/aliyun/terraform-provider-alicloud)
74+
* [Terraform-Provider-Alicloud Release](https://releases.hashicorp.com/terraform-provider-alicloud/)
75+
* [Terraform-Provider-Alicloud Docs](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs)

examples/complete/README.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Complete
2+
3+
Configuration in this directory creates Alb instance and http listener.
4+
5+
## Usage
6+
7+
To run this example you need to execute:
8+
9+
```bash
10+
$ terraform init
11+
$ terraform plan
12+
$ terraform apply
13+
```
14+
15+
Note that this example may create resources which cost money. Run `terraform destroy` when you don't need these resources.
16+
17+
<!-- BEGINNING OF PRE-COMMIT-TERRAFORM DOCS HOOK -->
18+
## Requirements
19+
20+
| Name | Version |
21+
|------|---------|
22+
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 0.13.0 |
23+
| <a name="requirement_alicloud"></a> [alicloud](#requirement\_alicloud) | >= 1.131.0 |

examples/complete/main.tf

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
data "alicloud_alb_zones" "default" {}
2+
3+
resource "alicloud_vpc" "default" {
4+
vpc_name = var.vpc_name
5+
cidr_block = var.vpc_cidr_block
6+
}
7+
8+
resource "alicloud_vswitch" "vswitch_1" {
9+
vpc_id = alicloud_vpc.default.id
10+
cidr_block = cidrsubnet(alicloud_vpc.default.cidr_block, 8, 2)
11+
zone_id = data.alicloud_alb_zones.default.zones.0.id
12+
vswitch_name = var.vswitch_name_1
13+
}
14+
15+
resource "alicloud_vswitch" "vswitch_2" {
16+
vpc_id = alicloud_vpc.default.id
17+
cidr_block = cidrsubnet(alicloud_vpc.default.cidr_block, 8, 4)
18+
zone_id = data.alicloud_alb_zones.default.zones.1.id
19+
vswitch_name = var.vswitch_name_2
20+
}
21+
22+
resource "alicloud_log_project" "default" {
23+
name = var.log_project_name
24+
description = "created by terraform"
25+
}
26+
27+
resource "alicloud_log_store" "default" {
28+
project = alicloud_log_project.default.name
29+
name = var.log_store_name
30+
shard_count = 3
31+
auto_split = true
32+
max_split_shard_count = 60
33+
append_meta = true
34+
}
35+
36+
37+
module "example" {
38+
create = true
39+
source = "../.."
40+
vpc_id = alicloud_vpc.default.id
41+
address_type = "Internet"
42+
address_allocated_mode = "Fixed"
43+
load_balancer_name = "tf_alb_name"
44+
load_balancer_edition = "Basic"
45+
zone_mappings = [
46+
{ vswitch_id = alicloud_vswitch.vswitch_1.id, zone_id = data.alicloud_alb_zones.default.zones.0.id },
47+
{ vswitch_id = alicloud_vswitch.vswitch_2.id, zone_id = data.alicloud_alb_zones.default.zones.1.id }
48+
]
49+
access_log_config = [
50+
{ log_project = alicloud_log_project.default.name, log_store = alicloud_log_store.default.name }
51+
]
52+
acl_name = "tf_acl_name"
53+
server_group_name = "acl_server_group_name"
54+
listener_port = 80
55+
listener_description = "CreatedByTerraform"
56+
}

examples/complete/variables.tf

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
variable "vpc_name" {
2+
default = "tf_vpc_name"
3+
type = string
4+
description = "The name of VPC."
5+
}
6+
7+
variable "vpc_cidr_block" {
8+
default = "11.0.0.0/16"
9+
type = string
10+
description = "The CIDR block of VPC."
11+
}
12+
13+
variable "vswitch_name_1" {
14+
default = "tf_vswitch_name_1"
15+
type = string
16+
description = "The name of one v_switch."
17+
}
18+
19+
variable "vswitch_name_2" {
20+
default = "tf_vswitch_name_2"
21+
type = string
22+
description = "The name of the other v_switch."
23+
}
24+
25+
variable "create" {
26+
description = "Whether to create resources in module."
27+
type = bool
28+
default = false
29+
}
30+
31+
variable "log_project_name" {
32+
default = "tflogprojectname"
33+
type = string
34+
description = "The name of log project."
35+
}
36+
37+
variable "log_store_name" {
38+
default = "tflogstorename"
39+
type = string
40+
description = "The name of log store."
41+
}

main.tf

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
resource "alicloud_alb_load_balancer" "alb" {
2+
count = var.create ? 1 : 0
3+
vpc_id = var.vpc_id
4+
address_type = var.address_type
5+
address_allocated_mode = var.address_allocated_mode
6+
load_balancer_name = var.load_balancer_name
7+
load_balancer_edition = var.load_balancer_edition
8+
tags = var.tags
9+
load_balancer_billing_config {
10+
pay_type = "PayAsYouGo"
11+
}
12+
dynamic "zone_mappings" {
13+
for_each = var.zone_mappings
14+
content {
15+
vswitch_id = zone_mappings.value["vswitch_id"]
16+
zone_id = zone_mappings.value["zone_id"]
17+
}
18+
}
19+
modification_protection_config {
20+
status = var.modification_protection_config_status
21+
reason = var.modification_protection_config_reason
22+
}
23+
24+
dynamic "access_log_config" {
25+
for_each = var.access_log_config
26+
content {
27+
log_project = access_log_config.value["log_project"]
28+
log_store = access_log_config.value["log_store"]
29+
}
30+
}
31+
}
32+
33+
resource "alicloud_alb_server_group" "alb_server_group" {
34+
count = var.create ? 1 : 0
35+
protocol = "HTTP"
36+
vpc_id = var.vpc_id
37+
server_group_name = var.server_group_name
38+
resource_group_id = var.resource_group_id
39+
40+
health_check_config {
41+
health_check_connect_port = lookup(var.health_check_config, "health_check_connect_port", 80)
42+
health_check_enabled = lookup(var.health_check_config, "health_check_enabled", "false")
43+
health_check_host = lookup(var.health_check_config, "health_check_host", "")
44+
health_check_http_version = lookup(var.health_check_config, "health_check_http_version", "HTTP1.1")
45+
health_check_interval = lookup(var.health_check_config, "health_check_interval", "2")
46+
health_check_method = lookup(var.health_check_config, "health_check_method", "HEAD")
47+
health_check_path = lookup(var.health_check_config, "health_check_path", "")
48+
health_check_protocol = lookup(var.health_check_config, "health_check_protocol", "")
49+
health_check_timeout = lookup(var.health_check_config, "health_check_timeout", "5")
50+
healthy_threshold = lookup(var.health_check_config, "healthy_threshold", "3")
51+
unhealthy_threshold = lookup(var.health_check_config, "unhealthy_threshold", "3")
52+
}
53+
54+
sticky_session_config {
55+
sticky_session_enabled = lookup(var.sticky_session_config, "sticky_session_enabled", "false")
56+
cookie = lookup(var.sticky_session_config, "cookie", "")
57+
sticky_session_type = lookup(var.sticky_session_config, "sticky_session_type", "Server")
58+
}
59+
tags = var.tags
60+
}
61+
62+
resource "alicloud_alb_acl" "alb_acl" {
63+
count = var.create ? 1 : 0
64+
acl_name = var.acl_name
65+
resource_group_id = var.resource_group_id
66+
}
67+
68+
resource "alicloud_alb_listener" "alb_listener" {
69+
count = var.create ? 1 : 0
70+
load_balancer_id = alicloud_alb_load_balancer.alb.0.id
71+
listener_protocol = "HTTP"
72+
listener_port = var.listener_port
73+
listener_description = var.listener_description
74+
default_actions {
75+
type = "ForwardGroup"
76+
forward_group_config {
77+
server_group_tuples {
78+
server_group_id = alicloud_alb_server_group.alb_server_group.0.id
79+
}
80+
}
81+
}
82+
acl_config {
83+
acl_type = "White"
84+
acl_relations {
85+
acl_id = alicloud_alb_acl.alb_acl.0.id
86+
}
87+
}
88+
}

outputs.tf

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
output "this_alb_instance_id" {
2+
description = "The instance ID of ALB."
3+
value = concat(alicloud_alb_load_balancer.alb.*.id, [""])[0]
4+
}
5+
6+
output "this_alb_server_group_id" {
7+
description = "The ID of ALB server group."
8+
value = concat(alicloud_alb_server_group.alb_server_group.*.id, [""])[0]
9+
}
10+
11+
output "this_alb_listener" {
12+
description = "The ID of ALB http listener."
13+
value = concat(alicloud_alb_listener.alb_listener.*.id, [""])[0]
14+
}

0 commit comments

Comments
 (0)