

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用基于规则的策略自动扩缩
<a name="fleets-autoscaling-rule"></a>

当自动扩缩实例集的容量以应对玩家活动时，Amazon GameLift Servers 中基于规则的扩缩策略会提供精细的控制措施。对于每个策略，您可以将扩展与若干可用的实例集指标之一关联、确定触发器点并自定义对应的扩展或缩减事件。基于规则的策略尤其适用于对[基于目标的扩展](fleets-autoscaling-target.md)进行补充以应对特殊情况。

基于规则的策略类似于以下语句：“如果实例集指标达到或超过阈值持续特定时间长度，则按指定的数量更改实例集容量。” 本主题介绍用于构建策略语句的语法，并提供帮助以创建和管理基于规则的策略。

## 管理基于规则的策略
<a name="fleets-autoscaling-policy-setting-cli"></a>

使用 AWS SDK 或带有[服务 API](https://docs.aws.amazon.com/gameliftservers/latest/apireference/Welcome.html) 的 AWS Command Line Interface (AWS CLI) 创建、更新或删除基于规则的策略。Amazon GameLift Servers您可以在 Amazon GameLift Servers 控制台中查看所有活动的策略。

要暂时停止队列的所有扩展策略，请使用 AWS CLI 命令[stop-fleet-actions](https://docs.aws.amazon.com/cli/latest/reference/gamelift/stop-fleet-actions.html)。

**创建或更新基于规则的扩展策略（AWS CLI）：**

1. **设置容量限制。**使用[update-fleet-capacity](https://docs.aws.amazon.com/cli/latest/reference/gamelift/update-fleet-capacity.html)命令设置一个或两个极限值。有关更多信息，请参阅 [设置 Amazon GameLift Servers 容量限制](fleets-capacity-limits.md)。

1. **创建新策略。**打开命令行窗口，使用带有策略参数设置的[put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/gamelift/put-scaling-policy.html)命令。要更新现有策略，请指定策略的名称并提供完整版本的更新策略。

   ```
   --fleet-id <unique fleet identifier>
   --name "<unique policy name>"
   --policy-type <target- or rule-based policy>
   --metric-name <name of metric>
   --comparison-operator <comparison operator>
   --threshold <threshold integer value>
   --evaluation-periods <number of minutes>
   --scaling-adjustment-type <adjustment type>
   --scaling-adjustment <adjustment amount>
   ```

   示例：

   ```
   aws gamelift put-scaling-policy \
       --fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa \
       --name "Scale up when AGS<50" \
       --policy-type RuleBased \
       --metric-name AvailableGameSessions \
       --comparison-operator LessThanThreshold \
       --threshold 50 \
       --evaluation-periods 10 \
       --scaling-adjustment-type ChangeInCapacity \
       --scaling-adjustment 1
   ```

**使用 AWS CLI删除基于规则的扩展策略：**
+ 打开命令行窗口，使用带有舰队 ID 和策略名称的[delete-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/gamelift/delete-scaling-policy.html)命令。

  示例：

  ```
  aws gamelift delete-scaling-policy \
      --fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa \
      --name "Scale up when AGS<50"
  ```

## 自动扩缩规则的语法
<a name="fleets-autoscaling-rule-syntax"></a>

要构建基于规则的扩展策略语句，需指定六个变量：

如果*<metric name>*仍*<comparison operator>**<threshold value>*为*<evaluation period>*，则使用更改舰队容量*<adjustment type>* to/by *<adjustment value>*。

例如，只要实例集的额外容量低于处理 50 个新游戏会话所需的容量，此策略语句就会触发扩展事件。

如果 `AvailableGameSessions` 保持为 `less than 50` 长达 `10 minutes`，则使用 `ChangeInCapacity` 按 `1 instances` 的幅度更改实例集容量。

**指标名称**  
要触发扩展事件，请将自动扩缩策略与以下实例集特定的指标之一关联。有关更完整的指标说明，请参阅[Amazon GameLift Servers 队组指标](monitoring-cloudwatch.md#gamelift-metrics-fleet)。  
+ 激活游戏会话
+ 有效游戏会话
+ 可用的游戏会话
+ 可用游戏会话所占百分比
+ 活动实例
+ 可用的玩家会话
+ 当前玩家会话
+ 空闲实例
+ 空闲实例所占百分比
如果实例集包含在游戏会话队列中，则可能使用以下指标：  
+ 队列深度 – 最适合将此实例集作为可用托管位置的待处理游戏会话请求数。
+ 等待时间 – 实例集特定的等待时间。最早的待处理游戏会话请求已等待执行的时间长度。实例集的等待时间等于队列中当前最早请求的时间。

**比较运算符**  
指示 Amazon GameLift Servers 如何将指标数据与阈值进行比较。有效比较运算符包括大于（>）、小于（<）、大于或等于（>=）以及小于或等于（<=）。

**阈值**  
当指定的指标值达到或超过阈值时，它将启动扩展事件。此值始终为正整数。

**评估期**  
该指标必须在评估期的完整长度内达到或超过阈值，之后才能启动扩展事件。评估期长度是连续的；如果指标回退到阈值之下，则评估期重新开始。

**调整类型和值**  
这组变量一起使用，用于指定在启动扩展事件时，Amazon GameLift Servers 应该如何调整实例集的容量。从三种可能的调整类型中选择：  
+ **容量更改** – 按指定的实例数增加或减少当前容量。将调整值设置为要在实例集中增加或删除的实例数。正值表示添加实例，而负值表示删除实例。例如，值为“-10”则将缩减实例集的 10 个实例，而不考虑实例集的总大小。
+ **容量更改百分比** – 按指定百分比增加或减少当前容量。将调整值设置为您要增加或减少实例集容量的百分比。正值表示添加实例，而负值表示删除实例。例如，对于一个具有 50 个实例的实例集，“20”的百分比更改向实例集添加 10 个实例。
+ **精确容量** – 将当前容量增加或减少到特定值。将调整值设置为您希望在实例集中维护的确切的实例数。

## 基于规则的自动扩缩的提示
<a name="fleets-autoscaling-rule-tips"></a>

以下建议可以帮助您通过基于规则的策略充分利用自动扩缩。

### 使用多个策略
<a name="fleets-autoscaling-policy-tips-multiples"></a>

您可以同时让多个自动扩缩策略在实例集上生效。最常见的场景是：使用一个基于目标的策略管理大多数扩展需求；而使用基于规则的策略来处理边缘情况。对于使用多个策略没有限制。

在使用多个策略时，将独立运行每个策略。无法控制扩展事件的顺序。例如，如果您有多个策略驱动纵向扩展，那么玩家活动可能会同时触发多个扩展事件。避免使用相互启动的政策。例如，如果您创建了将容量设置为超过各自阈值的扩展和缩减策略，就会创建无限循环。

### 设置最大和最小容量
<a name="fleets-autoscaling-policy-tips-maximums"></a>

每个实例集都具有最大和最小容量限制。此功能在使用自动扩缩时尤为重要。自动扩缩从不将容量设置为此范围之外的值。默认情况下，新创建的实例集具有最小值 0 和最大值 1。要想让您的自动扩缩策略按预期影响容量，需增加最大值。

队列容量还受到队列实例类型限制和您的服务配额的限制 AWS 账户。您不能设置超出这些限制和账户限额的最小值和最大值。

### 在容量更改后跟踪指标
<a name="fleets-autoscaling-policy-tips-cooldown"></a>

在更改容量以响应自动扩缩策略之后，Amazon GameLift Servers 将等待 10 分钟，然后再响应该相同策略的触发器。这段等待时间能让 Amazon GameLift Servers 有足够时间添加新实例，启动游戏服务器，连接玩家，以及开始从新实例收集数据。在此期间，Amazon GameLift Servers 会依据相关指标对策略进行评估，并跟踪该策略的评估周期（该周期会在发生扩缩事件后重新开始计算）。这意味着，扩展策略可以在等待时间结束后立即启动另一个扩展事件。

不同自动扩缩策略启动的扩展事件之间没有等待时间。