使用Terraform配置负载均衡

更新时间:
复制为 MD 格式

使用Terraform可以快速完成负载均衡配置,实现多源站间的流量智能调度和健康检查。

安装Terraform并配置权限

在本地安装和配置Terraform

您可以参考安装和配置Terraform,在本地使用Terraform。

  • 由于阿里云账号(主账号)拥有资源的所有权限,其AccessKey一旦泄露风险巨大,所以建议您使用满足最小化权限需求的RAM用户的AccessKey。具体操作方式请参见创建AccessKey

  • 创建环境变量,用于存放身份认证信息。

    AccessKey管理页面上创建和查看您的AccessKey。

    若无对应环境变量,在执行terraform模板时无法确认身份信息,将会导致调用失败。

使用在线服务(免安装和权限配置)

如果您不想安装Terraform,可以直接使用在线服务Cloud Shell

阿里云Cloud Shell是一款帮助您运维的免费产品,预装了Terraform的组件,并配置好身份凭证(Credentials)。因此您可直接在Cloud Shell中运行Terraform的命令。更多信息,请参见使用Terraform快速创建资源

重要

通过Cloud Shell使用Terraform时,由于其销毁特性会导致数据丢失,因此建议您使用Cloud Shell做简单、快速的操作,例如调试。更多使用限制,请参见使用限制

涉及的资源

配置负载均衡

  1. 创建一个名为 main.tf 的配置文件,然后将以下代码复制到配置文件中,用于配置负载均衡。

    # 定义变量
    variable "name" {
      type    = string
      default = "terraform-example"  # 资源命名前缀
    }
    
    # 配置阿里云 Provider
    provider "alicloud" {
      region = "cn-hangzhou"  # API调用区域
    }
    
    # 1. 查询企业版 ESA 实例
    data "alicloud_esa_sites" "default" {
      plan_subscribe_type = "enterpriseplan"  # 筛选企业版实例
    
    # 2. 生成随机数用于域名唯一性
    resource "random_integer" "default" {
      min = 10000
      max = 99999
    }
    
    # 3. 创建站点
    resource "alicloud_esa_site" "resource_Site_OriginPool" {
      site_name   = "DOMAIN"  # 替换为实际域名,如 example.com
      instance_id = data.alicloud_esa_sites.default.sites.0.instance_id
      coverage    = "overseas"  # 海外加速
      access_type = "NS"         # NS 接入方式
    }
    
    # 4. 创建源地址池
    resource "alicloud_esa_origin_pool" "resource_OriginPool_LoadBalancer_1_1" {
      site_id          = alicloud_esa_site.resource_Site_OriginPool.id
      origin_pool_name = "originpool1"
      enabled          = true
    
      origins {
        type    = "ip_domain"            # 源站类型:域名或IP
        address = "www.example.com"   # 替换为实际源站地址
        header  = "{\"Host\":[\"www.example.com\"]}"  # 回源Host头
        enabled = true
        weight  = "30"                  # 流量权重
        name    = "origin1"
      }
    }
    
    # 5. 创建负载均衡
    resource "alicloud_esa_load_balancer" "default" {
      site_id            = alicloud_esa_site.resource_Site_OriginPool.id
      load_balancer_name = "${var.name}-loadbalancer.${alicloud_esa_site.resource_Site_OriginPool.site_name}"
      description        = var.name
      steering_policy    = "geo"  # 地理位置调度策略
      default_pools      = [alicloud_esa_origin_pool.resource_OriginPool_LoadBalancer_1_1.origin_pool_id]
      fallback_pool      = alicloud_esa_origin_pool.resource_OriginPool_LoadBalancer_1_1.origin_pool_id  # 故障转移池
    
      # 健康检查配置
      monitor {
        type              = "ICMP Ping"        # 健康检查协议
        timeout           = 5                  # 超时时间(秒)
        monitoring_region = "ChineseMainland"  # 探测点位置
        consecutive_up    = 3                  # 连续成功3次判定恢复
        consecutive_down  = 5                  # 连续失败5次判定宕机
        interval          = 60                 # 检测间隔(秒)
        port              = 80                 # 端口(ICMP不使用)
      }
    }
    说明

    请根据实际情况修改代码中的占位符:将 DOMAIN 替换为您的实际域名,将 www.example.com 替换为实际源站地址。关键参数说明请参见本文末尾的相关参考章节。

  2. 进入配置文件所在目录,执行如下命令,初始化Terraform环境。

    terraform init
  3. 执行如下命令,验证Terraform语法与配置。

    terraform validate
  4. 执行如下命令,预览执行结果。

    terraform plan
  5. 执行如下命令,执行Terraform脚本。

    terraform apply
  6. 依据提示输入yes确认执行即可。

验证结果

执行terraform show命令

在 terraform apply 成功后、清理资源前,可在工作目录执行以下命令核对资源状态。

terraform show

登录控制台查看

  1. ESA控制台选择站点管理,在站点列单击目标站点。

  2. 在左侧导航栏,选择流量 > 负载均衡

  3. 在负载均衡页面可以看到新创建的负载均衡规则,包括负载均衡名称、调度策略、默认源地址池和健康检查配置等信息。

相关参考

本文代码示例中关键参数的说明如下:

参数名称

示例值

说明

plan_subscribe_type

"enterpriseplan"

筛选企业版ESA实例,用于获取可用的实例ID。

site_name

DOMAIN

站点域名。替换为您的实际域名,如 example.com

coverage

"overseas"

加速节点覆盖范围。取值:overseas(海外)、domestic(中国大陆)、global(全球)。

access_type

"NS"

接入方式。NS 表示修改DNS服务器方式接入,需将域名的NS记录修改为ESA提供的地址。

origin_pool_name

"originpool1"

源地址池名称,用于标识源站组。

type

"ip_domain"

源站类型。取值:ip_domain(域名或IP)、OSS(阿里云OSS)、S3(AWS S3)。

address

"www.example.com"

源站地址。根据 type 填写域名、IP地址或对象存储域名。

header

"{\"Host\":[\"www.example.com\"]}"

回源时携带的HTTP头信息。通常需要设置 Host 头为源站域名。

weight

"30"

流量权重。取值范围:0~100,多个源站的权重总和应为100。

load_balancer_name

"terraform-example-loadbalancer.example.com"

负载均衡名称。命名格式为 子域名.站点域名,该子域名需在站点中存在或可解析。

steering_policy

"geo"

流量调度策略。取值:geo(基于地理位置)、failover(故障转移)。

default_pools

[pool_id]

默认源地址池列表。流量将按调度策略分配到这些源地址池。

fallback_pool

pool_id

故障转移源地址池。当所有默认池不可用时,流量将转发到此池。

monitor.type

"ICMP Ping"

健康检查协议。支持 ICMP PingHTTPHTTPS 等。

monitor.monitoring_region

"ChineseMainland"

健康检查探测点位置。取值:ChineseMainland(中国大陆)、overseas(海外)。

monitor.interval

60

健康检查间隔时间(秒)。取值范围:30~3600。

monitor.consecutive_down

5

连续失败次数阈值。连续失败该次数后,判定源站不可用。

monitor.consecutive_up

3

连续成功次数阈值。连续成功该次数后,判定源站恢复可用。

monitor.timeout

5

单次健康检查超时时间(秒)。取值范围:1~30。

不同套餐的支持情况

免费版

基础版

标准版

高级版

企业版

不支持

不支持

不支持

不支持

联系销售按需定制