部署Web集群
本文介绍如何使用Terraform部署Web集群。
前提条件
在开始之前,请您确保完成以下操作:
使用Terraform,您需要一个阿里云账号和访问密钥(AccessKey)。 请在阿里云控制台中的AccessKey管理页面上创建和查看您的AccessKey。
已经安装并配置了Terraform,具体操作请参见在本地安装和配置Terraform和在Cloud Shell中使用Terraform。
背景信息
在部署一个网站或者应用时,需要部署一系列的节点,SLB对各个节点分配请求,并根据访问数量或者资源使用的情况来自动伸缩。本文介绍将如何使用Terraform部署一个这样的Web集群。在本示例中,整个应用部署在一个可用区,并且只提供8080端口访问hello world网页。
操作步骤
创建VPC网络和交换机。
创建terraform.tf文件,输入以下内容,并保存在当前的执行目录中。
provider "alicloud" { region = "cn-beijing" } resource "alicloud_vpc" "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" zone_id = "cn-beijing-b" }
运行
terraform apply
开始创建。运行
terraform show
查看已创建的VPC和vSwitch。您也可以登录VPC控制台查看VPC和vSwitch的属性。
创建安全组,并将安全组作用于上一步创建的VPC中。
在terraform.tf文件中增加以下内容。
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" }
运行
terraform apply
开始创建。运行
terraform show
查看已创建的安全组和安全组规则。
创建负载均衡实例,为其分配公网IP。在本示例中,为负载均衡实例配置了从前端80端口到后端8080端口的映射,并输出公网IP用于后续测试。
创建slb.tf文件,并增加以下内容。
resource "alicloud_slb_load_balancer" "listener" { load_balancer_name = "tf-example" internet_charge_type = "PayByTraffic" address_type = "internet" instance_charge_type = "PayByCLCU" } resource "alicloud_slb_listener" "http" { load_balancer_id = alicloud_slb_load_balancer.listener.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_load_balancer.listener.address }
运行
terraform apply
开始创建。运行
terraform show
查看已创建的负载均衡实例。
创建弹性伸缩。
在本示例中,将创建以下资源:
伸缩组:在模板中指定伸缩最小为2,最大为10,并将伸缩组与新建的负载均衡实例绑定。由于伸缩组的配置要求SLB必须有相应配置的监听器,因此模板中用depends_on属性指定了部署顺序。
伸缩组配置:在模板中指定ECS实例的具体配置。在初始化配置(user-data)中生成一个Hello World的网页,并在8080端口提供服务。为简化操作,本示例中会为ECS实例分配公网IP,并且设置
force_delete=true
用于后续删除环境。伸缩规则:定义具体的伸缩规则。
创建ess.tf文件,并增加以下内容。
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_load_balancer.listener.*.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.n4.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 }
运行
terraform apply
开始创建。创建成功后,会输出SLB的公网IP。
等待大约两分钟,弹性伸缩将自动创建ECS实例。
输入命令
curl http://<slb public ip>
进行验证。如果看到
Hello, World
,表示成功通过负载均衡实例访问ECS实例提供的网页。
运行
terraform destroy
删除测试环境。经确认后,整个部署的环境将被删除。使用Terraform可以便捷地删除和重新部署一个环境。如果您想重新部署,运行
terraform apply
即可。