This topic describes how to deploy a web cluster by using Terraform.
Prerequisites
Before you begin, make sure that you have completed the following operations:
Background information
Before you deploy a website or application, you must deploy a series of nodes. Server
Load Balancer (SLB) distributes requests to each node and automatically scales based
on the access quantity or resource usage. This example deploys the entire application
in a single zone and only allows access to the Hello World page through port 8080.
Procedure
- Create a VPC and a VSwitch.
- Create the terraform.tf file, enter the following content, and save the file to the current working directory.
resource "alicloud_vpc" "vpc" {
name = "tf_test_foo"
cidr_block = "172.16.0.0/12"
}
resource "alicloud_vswitch" "vsw" {
vpc_id = alicloud_vpc.vpc.id
cidr_block = "172.16.0.0/21"
availability_zone = "cn-beijing-b"
}
- Run the
terraform apply
command to create a VPC and a VSwitch.
- Run the
terraform show
command to view the created VPC and VSwitch.
You can also log on to the VPC console to view the attributes of the VPC and VSwitch.
- Create a security group and apply the security group to the created VPC.
- In terraform.tf, add the following content:
resource "alicloud_security_group" "default" {
name = "default"
vpc_id = alicloud_vpc.vpc.id
}
resource "alicloud_security_group_rule" "allow_all_tcp" {
type = "ingress"
ip_protocol = "tcp"
nic_type = "intranet"
policy = "accept"
port_range = "1/65535"
priority = 1
security_group_id = alicloud_security_group.default.id
cidr_ip = "0.0.0.0/0"
}
- Run the
terraform apply
command to create a security group.
- Run the
terraform show
command to view the created security group and added security group rule.
- Create a Server Load Balancer (SLB) instance and assign a public IP address for it.
This example configures a mapping from frontend port 80 to backend port 8080 for the
SLB instance and displays a public IP address for subsequent tests.
- Create the slb.tf file and add the following content:
resource "alicloud_slb" "slb" {
name = "test-slb-tf"
vswitch_id = alicloud_vswitch.vsw.id
internet = true
}
resource "alicloud_slb_listener" "http" {
load_balancer_id = alicloud_slb.slb.id
backend_port = 8080
frontend_port = 80
bandwidth = 10
protocol = "http"
sticky_session = "on"
sticky_session_type = "insert"
cookie = "testslblistenercookie"
cookie_timeout = 86400
health_check="on"
health_check_type = "http"
health_check_connect_port = 8080
}
output "slb_public_ip"{
value = alicloud_slb.slb.address
}
- Run the
terraform apply
command to create an SLB instance.
- Run the
terraform show
command to view the created SLB instance.
- Create Auto Scaling resources.
This example creates the following resources:
- Scaling group: specifies the minimum number of instances as 2 and the maximum number
of instances as 10. The created SLB instance is attached to the scaling group. The
depends_on attribute specifies the deployment sequence because the scaling group depends
on SLB listener configurations.
- Scaling group configuration: specifies the specific configuration of the ECS instance.
The initialization configuration (user-data) generates a Hello World page and provides
services through port 8080. To simplify operations, this example assigns a public
IP address for the ECS instance and configures
force_delete=true
to subsequently delete the environment.
- Scaling rule: defines the specific scaling rule.
- Create the ess.tf file and add the following content:
resource "alicloud_ess_scaling_group" "scaling" {
min_size = 2
max_size = 10
scaling_group_name = "tf-scaling"
vswitch_ids = alicloud_vswitch.vsw. *.id
loadbalancer_ids = alicloud_slb.slb. *.id
removal_policies = ["OldestInstance", "NewestInstance"]
depends_on = ["alicloud_slb_listener.http"]
}
resource "alicloud_ess_scaling_configuration" "config" {
scaling_group_id = alicloud_ess_scaling_group.scaling.id
image_id = "ubuntu_18_04_64_20G_alibase_20190624.vhd"
instance_type = "ecs.c5.large"
security_group_id = alicloud_security_group.default.id
active= true
enable= true
user_data = "#! /bin/bash\necho \"Hello, World\" > index.html\nnohup busybox httpd -f -p 8080&"
internet_max_bandwidth_in =10
internet_max_bandwidth_out =10
internet_charge_type = "PayByTraffic"
force_delete= true
}
resource "alicloud_ess_scaling_rule" "rule" {
scaling_group_id = alicloud_ess_scaling_group.scaling.id
adjustment_type = "TotalCapacity"
adjustment_value = 2
cooldown = 60
}
- Run the
terraform apply
command to create resources.
After the resources are created, the public IP address of the SLB instance is displayed.
Auto Scaling will create an ECS instance after two minutes.
- Run the
curl http://<slb public ip>
command to verify the results.
If Hello, World
is displayed, it indicates that you can use the SLB instance to access the webpage
provided by the ECS instance.
- Run the
terraform destroy
command to delete the test environment. After you confirm, the entire environment
will be deleted.
You can use Terraform to easily delete environments and deploy new ones. To deploy
a new environment, run the terraform apply
command.