

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

# 利用 Amazon GameLift Servers 扩展游戏托管容量
<a name="fleets-manage-capacity"></a>

托管容量（以实例为单位）表示 Amazon GameLift Servers 可以同时托管的游戏会话数量，以及这些游戏会话可以容纳的并行玩家数量。游戏托管最具挑战性的任务之一是扩展容量以满足玩家的需求，同时又不会将成本浪费在不需要的资源上。

容量在实例集位置级别进行调整。所有舰队都至少有一个地点：舰队的所在 AWS 地区。查看或扩展容量时，会按位置列出信息，包括实例集主区域和任何其他远程位置。

您可以手动设置要维护的实例数量，也可以设置自动扩缩，以便随着玩家需求的变化动态调整容量。我们建议您刚开始时应启用基于目标的自动扩缩选项。基于目标的自动扩缩旨在保持足够的托管资源来容纳当前玩家，外加一点额外的资源来应对玩家需求的意外激增。对于大多数游戏来说，基于目标的自动扩缩提供了一种非常有效的缩放解决方案。

您可以使用 Amazon GameLift Servers 控制台执行大多数实例集扩展活动。您也可以将 S AWS DK 或 AWS Command Line Interface (AWS CLI) 与[服务 API 配合](https://docs.aws.amazon.com/gameliftservers/latest/apireference/Welcome.html)使用Amazon GameLift Servers。

**Topics**
+ [在控制台中管理实例集容量](#fleet-manage-capacity-howto)
+ [设置 Amazon GameLift Servers 容量限制](fleets-capacity-limits.md)
+ [手动设置Amazon GameLift Servers舰队的容量](fleets-updating-capacity.md)
+ [通过 Amazon GameLift Servers 自动扩展队组容量](fleets-autoscaling.md)
+ [管理缩放Amazon GameLift Servers舰队 To/From Zero](fleets_scale-to-from-zero.md)
+ [扩缩 Amazon GameLift Servers 容器实例集](containers-scaling.md)

## 在控制台中管理实例集容量
<a name="fleet-manage-capacity-howto"></a>

1. 打开 [Amazon GameLift Servers 控制台](https://console.aws.amazon.com/gamelift/)。

1. 在导航窗格中，选择**托管**，**实例集**。

1. 在**实例集**页面上，选择活跃实例集的名称以打开该实例集的详情页面。

1. 选择**扩展**选项卡。在此选项卡上，您可以：
   + 查看整个实例集的历史扩展指标。
   + 查看和更新每个实例集位置的容量设置，包括扩展限制和当前容量设置。
   + 更新基于目标的自动扩缩，查看应用于整个实例集的基于规则的自动扩缩策略，并暂停每个位置的自动扩缩活动。

# 设置 Amazon GameLift Servers 容量限制
<a name="fleets-capacity-limits"></a>

手动或通过 auto Scaling 扩展Amazon GameLift Servers舰队位置的托管容量时，请考虑该地点的扩展限制。所有实例集位置都有最小和最大限制，用于定义该位置容量的允许范围。默认情况下，实例集位置的限制设置为最少 0 个实例，最多 1 个实例。在缩放实例集位置之前，请先调整限制。

如果您使用的是自动扩缩，则最大限制允许 Amazon GameLift Servers 根据玩家需求扩展实例集位置，同时还可以防止托管成本失控，例如在 DDOS 攻击期间。设置 A [mazon CloudWatch 警报](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)，以便在容量接近最大限制时通知您，这样您就可以评估情况并根据需要进行手动调整。（您也可以[创建账单警报](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/monitor_estimated_charges_with_cloudwatch.html)来监控 AWS 成本。） 即使玩家需求很低，最低限额也有助于保持托管的可用性。

您可以在[Amazon GameLift Servers控制台](https://console.aws.amazon.com/gamelift/)中或使用 AWS Command Line Interface (AWS CLI) 为舰队的位置设置容量限制。

## 设置容量限制
<a name="fleets-capacity-limits-console"></a>

------
#### [ Console ]

1. 打开 [Amazon GameLift Servers 控制台](https://console.aws.amazon.com/gamelift/)。

1. 在导航窗格中，选择**托管**，**实例集**。

1. 在**实例集**页面上，选择活跃实例集的名称以打开该实例集的详情页面。

1. 在**扩展**选项卡上的**扩展容量**下，选择实例集位置，然后选择**编辑**。

1. 在**编辑扩展容量**对话框中，为**最小大小**、**所需实例**和**最大大小**设置实例计数。

1. 选择**确认**。

------
#### [ AWS CLI ]

1. **检查当前容量设置。**在命令行窗口中，使用包含要更改容量的舰队 ID 和位置的[describe-fleet-location-capacity](https://docs.aws.amazon.com/cli/latest/reference/gamelift/describe-fleet-location-capacity.html)命令。此命令返回一个包含该地点当前容量设置的[FleetCapacity](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_FleetCapacity.html)对象。确定新的实例限制是否能适应当前所需的实例设置。

   ```
   aws gamelift describe-fleet-location-capacity \
       --fleet-id <fleet identifier> \
       --location <location name>
   ```

1. **更新限制设置。**在命令行窗口中，使用带有以下参数的[update-fleet-capacity](https://docs.aws.amazon.com/cli/latest/reference/gamelift/update-fleet-capacity.html)命令。您可以使用此同一个命令同时调整实例限量和所需的实例计数。

   ```
   --fleet-id <fleet identifier>
   --location <location name>
   --max-size <maximum capacity for scaling>
   --min-size <minimum capacity for scaling>
   --desired-instances <fleet capacity goal>
   ```

   示例：

   ```
   aws gamelift update-fleet-capacity \
       --fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa \
       --location us-west-2 \
       --max-size 10 \
       --min-size 1 \
       --desired-instances 10
   ```

如果请求成功，Amazon GameLift Servers 将返回实例集 ID。如果新的 `max-size` 或 `min-size` 值与当前 `desired-instances` 设置冲突，Amazon GameLift Servers 将返回错误。

------

# 手动设置Amazon GameLift Servers舰队的容量
<a name="fleets-updating-capacity"></a>

当您创建新的实例集时，Amazon GameLift Servers 会自动将所需实例设置为每个实例集位置中一个实例。然后，Amazon GameLift Servers 会在每个位置部署一个新实例。要更改实例集容量，您可以添加基于目标的自动扩缩策略，也可以手动设置某个位置所需的实例数量。

当您不需要自动扩缩或需要将容量保持在指定级别时，手动设置实例集的容量会很有用。只有在不使用基于目标的自动扩缩策略时，手动设置容量才有效。如果有基于目标的自动扩缩策略，它将根据自己的扩展规则立即重置所需的容量。

您可以在Amazon GameLift Servers控制台中手动设置容量，也可以使用 AWS Command Line Interface (AWS CLI)。实例集的状态必须为活动状态。

## 暂停自动扩缩
<a name="fleets-updating-capacity-disable"></a>

您可以暂停每个实例集位置的所有自动扩缩活动。暂停自动扩缩后，除非手动更改，否则实例集位置中所需的实例数量将保持不变。当您暂停某个位置的自动扩缩时，它会影响实例集的当前策略以及您将来可能定义的任何策略。

## 手动设置实例集容量
<a name="fleets-updating-capacity-console"></a>

------
#### [ Console ]

1. 打开 [Amazon GameLift Servers 控制台](https://console.aws.amazon.com/gamelift/)。

1. 在导航窗格中，选择**托管**，**实例集**。

1. 在**实例集**页面上，选择活跃实例集的名称以打开该实例集的详情页面。

1. 在**扩展**选项卡上的**暂停自动扩缩位置**下，选择要暂停自动扩缩的每个位置，然后选择**暂停**。

1. 在**扩展容量**下，选择要手动设置的位置，然后选择**编辑**。

1. 在**编辑扩展容量**对话框中，设置**所需实例**的首选值，然后选择**确认**。此值会告知 Amazon GameLift Servers 保持活动状态且随时可托管游戏会话的实例数量。

Amazon GameLift Servers 会通过部署其他实例或关闭不需要的实例来应对此类变化。当 Amazon GameLift Servers 完成此过程时，该位置的活动实例数量会发生变化，以匹配更新的所需实例值。此过程可能需要一点时间。

------
#### [ AWS CLI ]

1. **检查当前容量设置。**在命令行窗口中，使用包含要更改容量的舰队 ID 和位置的[describe-fleet-location-capacity](https://docs.aws.amazon.com/cli/latest/reference/gamelift/describe-fleet-location-capacity.html)命令。此命令返回一个包含该地点当前容量设置的[FleetCapacity](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_FleetCapacity.html)对象。确定实例限制是否将适应新的所需的实例设置。

   ```
   aws gamelift describe-fleet-location-capacity \
       --fleet-id <fleet identifier> \
       --location <location name>
   ```

1. **更新所需容量。**使用带有舰队 ID、位置和所需实例的新值的[update-fleet-capacity](https://docs.aws.amazon.com/cli/latest/reference/gamelift/update-fleet-capacity.html)命令。如果此值不在当前限制范围内，则可以在相同的命令中调整限制值。

   ```
   --fleet-id <fleet identifier>
   --location <location name>
   --desired-instances <fleet capacity as an integer>
   --max-size <maximum capacity>    [Optional]
   --min-size <minimum capacity>    [Optional]
   ```

   示例：

   ```
   aws gamelift update-fleet-capacity \
       --fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa \
       --location us-west-2 \
       --desired-instances 5 \
       --max-size 10 \
       --min-size 1
   ```

如果请求成功，Amazon GameLift Servers 将返回实例集 ID。如果新的所需实例设置超出了最小/最大限制，Amazon GameLift Servers 会返回错误。

------

# 通过 Amazon GameLift Servers 自动扩展队组容量
<a name="fleets-autoscaling"></a>

使用 Amazon GameLift Servers 中的自动扩缩功能可以动态扩缩实例集容量，以应对游戏服务器活动。当玩家到达并开始游戏会话时，自动扩缩可以添加更多实例；当玩家需求消减时，自动扩缩可以终止不需要的实例。自动扩缩是一种可最大程度地降低托管资源和成本的有效方式，同时仍提供流畅、快速的玩家体验。

要使用自动扩缩功能，您需要创建扩展策略，告知 Amazon GameLift Servers 何时扩大或缩小规模。有两种类型的扩展策略：基于目标和基于规则。基于目标的方法（目标跟踪）是一个完整的解决方案。我们建议将其作为最简单、最有效的选择。基于规则的扩展策略，它要求您定义自动扩缩决策过程的每个环节，可用于解决特定的问题。它最适合作为对基于目标的自动扩缩的补充。

您可以使用Amazon GameLift Servers控制台、 AWS Command Line Interface (AWS CLI) 或 AWS SDK 管理基于目标的自动扩展。尽管可以在控制台中查看基于规则的扩展策略，但您只能使用 AWS CLI 或 AWS SDK 管理基于规则的自动扩展。

**Topics**
+ [基于目标的自动扩缩](fleets-autoscaling-target.md)
+ [使用基于规则的策略自动扩缩](fleets-autoscaling-rule.md)

# 基于目标的自动扩缩
<a name="fleets-autoscaling-target"></a>

Amazon GameLift Servers 的基于目标的自动扩缩功能会根据实例集指标 `PercentAvailableGameSessions` 调整容量级别。该指标表示实例集的可用缓冲区应对玩家需求激增的情况。

维护容量缓冲区的主要原因是玩家等待时间。当游戏会话槽准备就绪并等待时，新玩家进入游戏会话需要数秒钟。如果没有资源可用，玩家必须等待现有游戏会话结束或新资源变为可用。启动新实例和服务器进程可能需要数分钟时间。

在设置基于目标的自动扩缩时，需指定您希望实例集维护的缓冲区的大小。由于 `PercentAvailableGameSessions` 衡量的是可用资源的百分比，因此实际缓冲区大小是实例集总容量的百分比。Amazon GameLift Servers 会添加或删除实例以保持目标缓冲区大小。如果缓冲区较大，则会最大程度地减少等待时间，但您也要为可能未使用的额外资源付费。如果您的玩家更能容忍等待时间，则可通过设置较小的缓冲区来降低成本。

## 设置基于目标的自动扩缩
<a name="fleets-autoscaling-policy-setting-console"></a>

------
#### [ Console ]

1. 打开 [Amazon GameLift Servers 控制台](https://console.aws.amazon.com/gamelift/)。

1. 在导航窗格中，选择**托管**，**实例集**。

1. 在**实例集**页面上，选择活跃实例集的名称以打开该实例集的详情页面。

1. 选择**扩展**选项卡。此选项卡显示实例集的历史扩展指标，并包含用于调整当前扩展设置的控件。

1. 在**扩展容量**下，检查**最小大小****和最大大小**限制是否适合实例集。启用自动扩缩后，容量可能会在这两个限制之间调整。

1. 在**基于目标的自动扩缩策略**中，选择**编辑**。

1. 在**编辑基于目标的自动扩缩策略**对话框中，在**可用游戏会话百分比**中，设置要保持的百分比，然后选择**确认**。在您确认设置后，Amazon GameLift Servers 会在**基于目标的自动扩缩策略**下添加新的基于目标的策略。

------
#### [ 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>
   --target-configuration <buffer size>
   ```

   示例：

   ```
   aws gamelift put-scaling-policy \
       --fleet-id "fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa" \
       --name "My_Target_Policy_1" \
       --policy-type "TargetBased" \
       --metric-name "PercentAvailableGameSessions" \
       --target-configuration "TargetValue=5"
   ```

------

# 使用基于规则的策略自动扩缩
<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 会依据相关指标对策略进行评估，并跟踪该策略的评估周期（该周期会在发生扩缩事件后重新开始计算）。这意味着，扩展策略可以在等待时间结束后立即启动另一个扩展事件。

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

# 管理缩放Amazon GameLift Servers舰队 To/From Zero
<a name="fleets_scale-to-from-zero"></a>

Amazon GameLift Servers支持根据游戏会话活动自动缩放到零实例和从零实例缩放。此托管容量选项允许您的舰队位置在规定的无游戏会话活动期限后缩减到零实例，并在请求游戏会话时自动向外扩展。

扩展到零实例和从零实例扩展有以下几个优点：
+ **成本优化** — 通过在没有游戏会话活动时运行零个实例，从而消除非活动期间的计算成本。
+ **自动响应式横向扩展** — 当请求游戏会话时，舰队位置会自动向外扩展到一个实例，无需手动干预。
+ **简化管理** — 无需根据预期的玩家需求或开发需求手动将舰队容量调整 to/from 为零。

当您在队列上启用 Scale To/From Zero 时，Amazon GameLift Servers 会监控游戏会话活动并自动调整队列容量：
+ **缩减到零 — 在**配置的时间段之后，没有游戏会话活动，将舰队Amazon GameLift Servers位置缩减为零。
+ **从零向外扩展** — 收到游戏会话创建请求后，将 Flee Amazon GameLift Servers t 位置扩展到一个实例，从而允许恢复自动缩放。
+ **继续扩展 — 扩展**后，队列将使用配置的 auto Scaling 策略恢复容量。

## 缩小行为
<a name="scale-in-behavior"></a>

Amazon GameLift Servers在配置的闲置时间已过且没有游戏会话活动之后，开始缩减舰队位置的规模。这被定义为一个时期，其中：
+ 舰队所在地没有活跃的游戏会话。
+ 尚未收到在舰队所在地创建新游戏会话的请求。

在缩减期间，Amazon GameLift Servers会将舰队所在地的最低和所需容量设置为零，并迅速扩大规模以节省成本。

## 横向扩展行为
<a name="scale-out-behavior"></a>

在舰队位置为零的情况下收到游戏会话创建请求时：
+ Amazon GameLift Servers立即启动一个实例的横向扩展。
+ 尝试在其他舰队或舰队位置放置游戏会话可能会继续，具体取决于队列的配置（如果使用）。

**注意**  
从零向外扩展需要时间来配置和初始化实例。玩家在闲置一段时间后，等待第一个游戏会话的时间可能会更长。因此，此功能最好与多地点舰队队列 and/or 搭配使用。

## 配置 To/From 零比例
<a name="configuring-scale-to-from-zero"></a>

通过更新现有队列来配置缩放 To/From 零。

------
#### [ Console ]

1. 打开 [Amazon GameLift Servers 控制台](https://console.aws.amazon.com/gamelift/)。

1. 在导航窗格中，选择**托管**，**实例集**。

1. 在**实例集**页面上，选择活跃实例集的名称以打开该实例集的详情页面。

1. 在 “**缩放**” 下，选择要为其配置 to/from 零比例的每个位置，然后选择 “**编辑”**。

1. 在 “**编辑扩展容量**” 对话框中，将 “**最小容量策略**” 选择 “自动”，在 “**之后将最小容量设置为 0” 的首选值（以**分钟为单位），然后选择**确认**。

Amazon GameLift Servers然后，一旦在配置的持续时间内没有游戏会话活动，就会将选定的舰队位置缩减为 0 个实例。此后，当在此位置发出游戏会话请求时，Amazon GameLift Servers将尽快扩展一个实例。这个过程需要一点时间。

------
#### [ AWS CLI ]
+ **配置 to/from 零比例。**在命令行窗口中，使用带有舰队 ID、位置和托管容量配置的[update-fleet-capacity](https://docs.aws.amazon.com/cli/latest/reference/gamelift/update-fleet-capacity.html)命令来配置 to/from 零规模。

  ```
  aws gamelift update-fleet-capacity \
                                  --fleet-id <fleet identifier> \
                                  --location <location name> \
                                  --managed-capacity-configuration ScaleInAfterInactivityMinutes=60,ZeroCapacityStrategy=SCALE_TO_AND_FROM_ZERO
  ```

  示例：

  ```
  aws gamelift update-fleet-capacity \
                                  --fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa \
                                  --location us-west-2 \
                                  --desired-instances 5 \
                                  --max-size 10 \
                                  --managed-capacity-configuration ScaleInAfterInactivityMinutes=60,ZeroCapacityStrategy=SCALE_TO_AND_FROM_ZERO
  ```

如果您的请求成功，则Amazon GameLift Servers返回更新的容量配置。 Amazon GameLift Servers然后，一旦在配置的持续时间内没有游戏会话活动，就会将选定的舰队位置缩减为 0 个实例。此后，当在此位置发出游戏会话请求时，Amazon GameLift Servers将尽快扩展一个实例。这个过程需要一点时间。

------

## 最佳实践
<a name="best-practices"></a>

使用 Scale To/From Zero 时，请考虑以下建议：
+ **设置适当的闲置时间-在成本节省与缩小/向外扩展周期**的频率之间取得平衡。缩短缩至零的等待时间可以最大限度地节省开支，但会导致更频繁的冷启动。
+ **与可预测的工作负载一起使用** — Scale To/From Zero 最适合处于明显非活动状态的游戏，例如非高峰时段明显的 development/test 环境或游戏。
+ **监控 CloudWatch 指标**-跟踪队列扩展事件和游戏会话放置时间，以优化您的配置。
+ **与扩展策略结合**使用 Scale To/From Zero 以及基于目标或基于规则的自动缩放，实现全面的容量管理。

# 扩缩 Amazon GameLift Servers 容器实例集
<a name="containers-scaling"></a>

游戏托管最具挑战性的任务之一是扩展容量以满足玩家的需求，同时又不会将成本浪费在不需要的资源上。在托管式容器实例集中，您可以通过添加或移除实例集实例来扩缩实例集容量。

当您创建新实例集时，Amazon GameLift Servers 会将该实例集的所需容量设置为一个实例，并在该实例集的主区域部署一个实例。对于多位置实例集，Amazon GameLift Servers 会在主区域以及每个远程位置各部署一个实例。实例集状态变为 `ACTIVE` 后，您可以提高所需容量以扩容，或降低所需容量以缩减规模。

您可以使用 Amazon GameLift Servers 扩缩功能手动更改容量，也可以根据玩家需求设置自动扩缩：
+ 使用目标跟踪设置自动扩缩。请参阅[基于目标的自动扩缩](fleets-autoscaling-target.md)。
+ 手动更改实例集容量。请参阅[手动设置Amazon GameLift Servers舰队的容量](fleets-updating-capacity.md)。

在扩缩容器实例集时，需考虑添加或删除实例对实例集托管游戏会话和玩家容量的影响。
+ 每个实例的游戏会话数
  + 实例上运行的每个游戏服务器进程都代表可托管一个游戏会话的能力。
  + 使用以下公式计算一个容器实例集实例上可同时运行的游戏会话数：

    ```
    [Game sessions per instance] = [# of game server processes per game server container] * [# of game server container groups per instance]
    ```

    如果您的容器架构在游戏服务器容器中并发运行一个游戏服务器进程，则每个实例的游戏会话数等于每个实例的游戏服务器容器组数量。
    + 对于每个实例的游戏服务器容器组，请调用[DescribeContainerFleet](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_DescribeContainerFleet.html)以获取`GameServerContainerGroupsPerInstance`或`MaximumGameServerContainerGroupsPerInstance`值。
    + 一个实例上可容纳的游戏服务器容器组的数量取决于为操作系统和支持服务Amazon GameLift Servers预留一部分内存后有多少可用内存。有关如何计算可用内存的详细信息以及常见实例类型的参考表，请参阅[了解容器舰队的内存分配](containers-design-fleet.md#containers-design-fleet-memory-allocation)。
+ 每个实例的玩家数
  + 您可以决定每个游戏会话中允许的玩家席位数量。根据您的托管解决方案处理游戏会话放置的方式，您可以在对战配置中或发起游戏会话放置的调用中定义每个游戏会话的玩家数。
  + 使用以下公式计算一个容器实例集实例上可同时参与游戏的玩家数量：

    ```
    [Players per instance] = [# of game sessions per instance] * [# of player slots per game session]
    ```

[要获取集装箱舰队的当前总容量，请致电[DescribeFleetCapacity](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_DescribeFleetCapacity.html)或 DescribeFleetLocation Capacity 以获取舰队中游戏服务器容器组的数量。](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_DescribeFleetLocationCapacity.html)其中，活跃组指当前正在托管游戏会话的容器组，空闲组指已就绪可托管新游戏会话的容器组。将这些值乘以每个游戏服务器容器组的服务器进程数，即可得到总容量。