使用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 的配置文件,然后将以下代码复制到配置文件中,用于配置等候室。

    # 1. 查询企业版 ESA 实例
    data "alicloud_esa_sites" "default" {
      plan_subscribe_type = "enterpriseplan"  # 筛选企业版实例
    }
    
    # 2. 创建站点
    resource "alicloud_esa_site" "resource_Site_example" {
      site_name   = "{{DOMAIN}}"  # 替换为实际域名,如 example.com
      instance_id = data.alicloud_esa_sites.default.sites.0.instance_id
      coverage    = "overseas"  # 海外加速
      access_type = "NS"         # NS 接入方式
    }
    
    # 3. 创建等候室
    resource "alicloud_esa_waiting_room" "default" {
      site_id                        = alicloud_esa_site.resource_Site_example.id
      waiting_room_name              = "waitingroom_example"  # 等候室名称
      description                    = "example"
      status                         = "off"  # 创建后默认关闭,需手动开启
      waiting_room_type              = "default"
    
      # 排队策略配置
      queuing_method                 = "fifo"  # 先进先出排队算法
      session_duration               = "5"    # 会话时长(分钟)
      total_active_users             = "300"  # 最大并发用户数
      new_users_per_minute           = "200"  # 每分钟放行人数
    
      # 匹配规则:触发排队的条件
      host_name_and_path {
        domain    = "sub_domain.com"         # 主域名
        path      = "/example"                # 路径匹配
        subdomain = "example_sub_domain.com."  # 子域名
      }
    
      # 页面显示配置
      language                       = "zhcn"  # 排队页面语言:简体中文
      custom_page_html               = ""      # 空表示使用默认排队页面
      queuing_status_code            = "200"   # 排队时返回的HTTP状态码
      cookie_name                    = "__aliwaitingroom_example"  # Cookie名称
    
      # 高级选项
      queue_all_enable               = "off"  # 是否全员排队
      disable_session_renewal_enable = "off"  # 是否禁用会话续期
      json_response_enable           = "off"  # 是否返回JSON响应
    }
    说明

    请根据实际情况修改代码中的占位符:将 DOMAIN 替换为您的实际域名,将 host_name_and_path 中的域名和路径替换为实际触发排队的条件。关键参数说明请参见本文末尾的相关参考章节。

  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

waiting_room_name

"waitingroom_example"

等候室名称,在控制台显示的标识名称。

status

"off"

等候室运行状态。off 表示关闭,on 表示开启。创建后默认关闭,需手动开启才生效。

queuing_method

"fifo"

排队算法。fifo 表示先进先出,先到的用户先被放行。

session_duration

"5"

会话时长(分钟)。用户获得通行资格后的有效时间,在此期间刷新页面无需重新排队。

total_active_users

"300"

总活跃用户上限。系统允许的最大并发数(包含正在排队和已放行的用户),超过此数新用户进入队列。

new_users_per_minute

"200"

每分钟放行人数。流量整型速率,每分钟最多允许该数量的新用户从队列进入源站,防止源站瞬间过载。

host_name_and_path.domain

"sub_domain.com"

匹配的主域名。只有访问该域名的请求才会触发排队。

host_name_and_path.path

"/example"

匹配的路径。只有访问该路径的请求才会触发排队。

host_name_and_path.subdomain

"example_sub_domain.com."

匹配的子域名。可选配置,用于更精确的匹配条件。

language

"zhcn"

排队页面语言。zhcn 表示简体中文,en 表示英语。

custom_page_html

""

自定义排队页面HTML代码。为空表示使用默认排队页面模板,可填入HTML代码展示品牌化排队页。

queuing_status_code

"200"

用户处于排队状态时返回的HTTP状态码。设为 200 可配合前端实现平滑排队。

cookie_name

"__aliwaitingroom_example"

用于标识用户排队位置和会话状态的Cookie名称。

queue_all_enable

"off"

全员排队开关。off 表示仅在流量超过阈值时触发排队,on 表示所有用户均需排队。

disable_session_renewal_enable

"off"

禁用会话续期开关。off 表示允许用户在会话有效期内刷新页面自动续期,on 表示刷新可能导致重新排队。

json_response_enable

"off"

JSON响应模式。off 表示返回HTML页面,on 表示返回JSON格式排队信息,适用于API接口场景。

不同套餐的支持情况

说明

目前等候室功能仅高级版企业版套餐支持。部分功能需要您在企业版基础上联系我们开通等候室Pro版进行升级或使用。

功能项

高级版

企业版

等候室基础功能

支持

支持

等候室数量

1

默认支持1个,开通等候室Pro版以后可以支持最大10个。

配置多个主机名和路径

不支持

默认支持1个,开通等候室Pro版以后可以支持最大50个。

自定义模板

不支持

开通等候室Pro版以后可以支持。

禁用会话续订

不支持

开通等候室Pro版以后可以支持。

JSON友好响应

不支持

开通等候室Pro版以后可以支持。

自定义队列状态代码

支持

支持

排队方法

仅支持FIFO方式

默认支持FIFO模式,开通等候室Pro版以后支持所有排队方式。

等候室规则

不支持

开通等候室Pro版以后可以支持最大5条。

等候室事件

不支持

开通等候室Pro版以后可以支持最大5个。

SEO爬虫旁路

支持

支持