

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

# WorkSpaces 池的自动缩放
<a name="autoscaling"></a>

通过使用自动扩缩，您可以自动更改池大小，使提供的可用实例满足用户需求。池大小决定了可以同时流式传输的用户数。每个用户会话都需要一个实例。您可以根据实例来指定池容量。根据您的池配置和自动扩缩策略，将提供所需数量的实例。您可以定义扩缩策略，根据各种使用率指标自动调整池的大小，并优化可用实例的数目以满足用户需求。您也可以选择关闭自动扩缩功能，并使池按固定大小运行。

**注意**  
在制定 WorkSpaces 池扩展计划时，请确保您的网络配置符合您的要求。
当您使用扩缩功能时，可以使用 Application Auto Scaling API。为了让 Auto Scaling 在 WorkSpaces 池中正常运行，Application Auto Scaling 需要描述和更新您的池以及描述您的 Amazon CloudWatch 警报的权限，以及代表您修改池容量的权限。

以下主题提供的信息可帮助您了解和使用 Auto Scaling for P WorkSpaces ools。

**Topics**
+ [扩缩概念](#autoscaling-concepts)
+ [使用控制台管理池扩缩](#autoscaling-console)
+ [使用 AWS CLI 管理池扩展](#autoscaling-cli)
+ [其他资源](#autoscaling-additional-resources)

## 扩缩概念
<a name="autoscaling-concepts"></a>

WorkSpaces 池扩展由 Application Auto Scaling 提供。有关更多信息，请参阅 [Application Auto Scaling API 参考](https://docs.aws.amazon.com/autoscaling/application/APIReference/)。

要有效地使用带 WorkSpaces 池的 Auto Scaling，您必须了解以下术语和概念。

**池的最少 capacity/minimum 用户会话数**  
实例的最小数量。实例数不能低于该值，并且扩缩策略不会将您的池缩减到该值以下。例如，如果将池的最小容量设置为 2，则您的池永远不会少于 2 个实例。

**池的最大 capacity/maximum 用户会话数**  
实例的最大数目。实例数不能高于该值，并且扩缩策略不会将您的池扩大到该值以上。例如，如果将池的最大容量设置为 10，则您的池永远不会超过 10 个实例。

**所需的用户会话容量**  
正在运行或待处理的总会话数。该值表示池可以在稳定状态下支持的总并发流式传输会话数。

**扩缩策略操作**  
扩缩策略在满足**扩缩策略条件**时对池执行的操作。您可以根据**容量百分比**或**实例数目**选择一个操作。例如，如果**所需的用户会话容量**为 4，且将**扩缩策略操作**设置为“添加 25% 的容量”，则在满足**扩缩策略条件**时，**所需的用户会话容量**将增加 25%，即为 5。

**扩缩策略条件**  
触发 **Scaling Policy Action** 中设置的操作的条件。此条件包括扩缩策略指标、比较运算符和阈值。例如，要在池利用率高于 50% 时扩缩池，您的扩缩策略条件应为“如果容量利用率 > 50%”。

**扩缩策略指标**  
您的扩缩策略基于该指标。以下指标可用于扩缩策略：    
**容量利用率**  
池中正在使用的实例百分比。您可以使用此指标来根据池使用率扩缩池。例如，**Scaling Policy Condition (扩缩策略条件)**：“如果容量利用率 < 25%”执行 **Scaling Policy Action (扩展策略操作)**：“删除 25% 的容量”。  
**可用容量**  
池中可供用户使用的实例数。您可以使用此指标，在您的容量中保留可供用户用来开始流式传输会话的缓冲区。例如，**Scaling Policy Condition (扩展策略条件)**：“如果可用容量 < 5”执行 **Scaling Policy Action (扩展策略操作)**：“添加 5 个实例”。  
**容量不足错误**  
因缺少容量而被拒绝的会话请求的数量。您可以使用此指标为由于容量不足而无法启动流式传输会话的用户预配置新实例。例如，**Scaling Policy Condition**：“如果容量不足错误 > 0”执行 **Scaling Policy Action**：“添加 1 个实例”。

## 使用控制台管理池扩缩
<a name="autoscaling-console"></a>

您可以通过以下两种方式使用 WorkSpaces 控制台来设置和管理扩展：在创建池期间，或随时使用 “**池**” 选项卡。创建池后，转到**扩缩策略**选项卡，为您的池添加新的扩缩策略。有关更多信息，请参阅 [创建 WorkSpaces Pools](set-up-pools-create.md)。

对于数量不断变化的用户环境，定义扩缩策略以控制扩缩响应需求的方式。如果您需要固定数量的用户或出于其他原因而禁用扩缩，则可以设置具有固定数量的实例或用户会话的池。

为此，请将最低容量设置为所需的实例数量。将最大容量调整为至少为最小容量的值。这样可以避免验证错误，但由于池不会扩缩，因此最终会忽略最大容量。然后，删除该池的所有扩缩策略。

**使用控制台设置池扩缩策略**

1. 在 [https://console.aws.amazon.com/workspaces/v2/](https://console.aws.amazon.com/workspaces/v2/home) home 中打开 WorkSpaces 主机。

1. 在导航窗格中，选择**池**。

1. 选择池。

1. 在该池的页面上，向下滚动到“容量和扩缩”。

1. 选择**编辑**。

1. 编辑现有策略并在其字段中设置所需的值，然后选择**保存**。策略更改将在几分钟内生效。

1. 您还可以通过依次选择**添加新的计划容量**、**添加新的横向扩展策略**或**添加新的横向缩减策略**，来添加新的容量和扩缩策略。

 以下是一个示例图，说明了在 5 个用户连接到池然后断开连接时的扩缩活动使用率。本示例来自使用以下扩缩策略值的池：
+ 最小容量 = 10
+ 最大容量 = 50
+ 横向扩展 = 如果我的池容量利用率大于 75%，则添加 5 个实例
+ 横向缩减 = 如果我的池容量利用率小于 25%，则删除 6 个实例
**注意**  
会话期间，将在横向扩展事件期间启动 5 个新实例。在横向缩减事件期间，如果有足够的实例而没有活跃的用户会话，并且实例总数未降至最低 10 个实例容量以下，则将回收 6 个实例。不会收回正在运行用户会话的实例。只收回未运行用户会话的实例。

## 使用 AWS CLI 管理池扩展
<a name="autoscaling-cli"></a>

您可以使用 AWS Command Line Interface (AWS CLI) 设置和管理池扩展。要获得更高级的功能，例如设置缩小和横向扩展冷却时间，请使用 CLI。 AWS 在运行扩缩策略命令之前，您必须将池注册为可扩展目标。为此，请使用以下[register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html)命令：

```
aws application-autoscaling register-scalable-target
  --service-namespace workspaces \
  --resource-id workspacespool/PoolId \
  --scalable-dimension workspaces:workspacespool:DesiredUserSessions \
  --min-capacity 1 --max-capacity 5
```

**Topics**
+ [示例 1：根据容量利用率应用扩缩策略](#autoscaling-cli-utilization)
+ [示例 2：根据“容量不足”错误应用扩缩策略](#autoscaling-cli-capacity)
+ [示例 3：根据低容量利用率应用扩缩策略](#autoscaling-cli-scale-in)
+ [示例 4：基于计划更改池容量](#autoscaling-cli-schedule)
+ [示例 5：应用目标跟踪扩缩策略](#autoscaling-target-tracking)

### 示例 1：根据容量利用率应用扩缩策略
<a name="autoscaling-cli-utilization"></a>

此 AWS CLI 示例设置了一个扩展策略，如果利用率 >= 75%，则将池扩展 25%。

以下[put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html)命令定义了基于利用率的扩展策略：

```
aws application-autoscaling put-scaling-policy -- cli-input-json file://scale-out-utilization.json
```

文件 `scale-out-utilization.json` 的内容如下所示：

```
{
    "PolicyName": "policyname",
    "ServiceNamespace": "workspaces",
    "ResourceId": "workspacespool/PoolId",
    "ScalableDimension": "workspaces:workspacespool:DesiredUserSessions",
    "PolicyType": "StepScaling",
    "StepScalingPolicyConfiguration": {
        "AdjustmentType": "PercentChangeInCapacity",
        "StepAdjustments": [
            {
                "MetricIntervalLowerBound": 0,
                "ScalingAdjustment": 25
            }
        ],
        "Cooldown": 120
    }
}
```

如果命令成功，则输出类似于以下内容，但一些详细信息是您的账户和区域独有的。在本示例中，策略标识符为 `e3425d21-16f0-d701-89fb-12f98dac64af`。

```
{"PolicyARN": "arn:aws:autoscaling:us-west-2:123456789012:scalingPolicy:e3425d21-16f0-d701-89fb-12f98dac64af:resource/workspaces/workspacespool/PoolId:policyName/scale-out-utilization-policy"}
```

现在，为该政策设置 CloudWatch 警报。使用适用于您的名称、区域、账号和策略标识符。您可以对 `-- alarm-actions` 参数使用上一条命令所返回的策略 ARN。

```
aws cloudwatch put-metric-alarm 
--alarm-name alarmname \
--alarm-description "Alarm when Available User Session Capacity exceeds 75 percent" \
--metric-name AvailableUserSessionCapacity \
--namespace AWS/WorkSpaces \
--statistic Average \
--period 300 \
--threshold 75 \
--comparison-operator GreaterThanOrEqualToThreshold \
--dimensions "Name=WorkSpaces pool ID,Value=PoolId" \
--evaluation-periods 1 --unit Percent \
--alarm-actions "arn:aws:autoscaling:your-region-code:account-number-without-hyphens:scalingPolicy:policyid:resource/workspaces/workspacespool/PoolId:policyName/policyname"
```

### 示例 2：根据“容量不足”错误应用扩缩策略
<a name="autoscaling-cli-capacity"></a>

此 AWS CLI 示例设置了一个扩展策略，如果池返回`InsufficientCapacityError`错误，则该策略将池扩展 1。

以下命令定义一个基于“容量不足”的扩缩策略：

```
aws application-autoscaling put-scaling-policy -- cli-input-json file://scale-out-capacity.json
```

文件 `scale-out-capacity.json` 的内容如下所示：

```
{
    "PolicyName": "policyname",
    "ServiceNamespace": "workspaces",
    "ResourceId": "workspacespool/PoolId",
    "ScalableDimension": "workspaces:workspacespool:DesiredUserSessions",
    "PolicyType": "StepScaling",
    "StepScalingPolicyConfiguration": {
        "AdjustmentType": "ChangeInCapacity",
        "StepAdjustments": [
            {
                "MetricIntervalLowerBound": 0,
                "ScalingAdjustment": 1
            }
        ],
        "Cooldown": 120
    }
}
```

如果命令成功，则输出类似于以下内容，但一些详细信息是您的账户和区域独有的。在本示例中，策略标识符为 `f4495f21-0650-470c-88e6-0f393adb64fc`。

```
{"PolicyARN": "arn:aws:autoscaling:us-west-2:123456789012:scalingPolicy:f4495f21-0650-470c-88e6-0f393adb64fc:resource/workspaces/workspacespool/PoolId:policyName/scale-out-insufficient-capacity-policy"}
```

现在，为该政策设置 CloudWatch 警报。使用适用于您的名称、区域、账号和策略标识符。您可以对 `--alarm-actions` 参数使用上一条命令所返回的策略 ARN。

```
aws cloudwatch put-metric-alarm 
--alarm-name alarmname \
--alarm-description "Alarm when out of capacity is > 0" \
--metric-name InsufficientCapacityError \
--namespace AWS/WorkSpaces \
--statistic Maximum \
--period 300 \
--threshold 0 \
--comparison-operator GreaterThanThreshold \
--dimensions "Name=Pool,Value=PoolId" \
--evaluation-periods 1 --unit Count \
--alarm-actions "arn:aws:autoscaling:your-region-code:account-number-without-hyphens:scalingPolicy:policyid:resource/workspaces/workspacespool/PoolId:policyName/policyname"
```

### 示例 3：根据低容量利用率应用扩缩策略
<a name="autoscaling-cli-scale-in"></a>

此 AWS CLI 示例设置了一个扩展策略，该策略可在池中进行扩展，以便在实际容量`UserSessionsCapacityUtilization`较低时减少实际容量。

以下命令定义一个基于“容量过多”的扩缩策略：

```
aws application-autoscaling put-scaling-policy -- cli-input-json file://scale-in-capacity.json
```

文件 `scale-in-capacity.json` 的内容如下所示：

```
{
    "PolicyName": "policyname",
    "ServiceNamespace": "workspaces",
    "ResourceId": "workspacespool/PoolId",
    "ScalableDimension": "workspaces:workspacespool:DesiredUserSessions",
    "PolicyType": "StepScaling",
    "StepScalingPolicyConfiguration": {
        "AdjustmentType": "PercentChangeInCapacity",
        "StepAdjustments": [
            {
                "MetricIntervalUpperBound": 0,
                "ScalingAdjustment": -25
            }
        ],
        "Cooldown": 360
    }
}
```

如果命令成功，则输出类似于以下内容，但一些详细信息是您的账户和区域独有的。在本示例中，策略标识符为 `12ab3c4d-56789-0ef1-2345-6ghi7jk8lm90`。

```
{"PolicyARN": "arn:aws:autoscaling:us-west-2:123456789012:scalingPolicy:12ab3c4d-56789-0ef1-2345-6ghi7jk8lm90:resource/workspaces/workspacespool/PoolId:policyName/scale-in-utilization-policy"}
```

现在，为该政策设置 CloudWatch 警报。使用适用于您的名称、区域、账号和策略标识符。您可以对 `--alarm-actions` 参数使用上一条命令所返回的策略 ARN。

```
aws cloudwatch put-metric-alarm 
--alarm-name alarmname \
--alarm-description "Alarm when Capacity Utilization is less than or equal to 25 percent" \
--metric-name UserSessionsCapacityUtilization \
--namespace AWS/WorkSpaces \
--statistic Average \
--period 120 \
--threshold 25 \
--comparison-operator LessThanOrEqualToThreshold \
--dimensions "Name=Pool,Value=PoolId" \
--evaluation-periods 10 --unit Percent \
--alarm-actions "arn:aws:autoscaling:your-region-code:account-number-without-hyphens:scalingPolicy:policyid:resource/workspaces/workspacespool/PoolId:policyName/policyname"
```

### 示例 4：基于计划更改池容量
<a name="autoscaling-cli-schedule"></a>

通过基于计划更改池容量，您能够扩缩池容量以响应可预测的需求变化。例如，在工作日的开始，您可能预期有特定数量的用户一次性请求流式传输连接。要根据计划更改池容量，可以使用 Application Auto Scaling [PutScheduledAction](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScheduledAction.html)API 操作或 [put-scheduled-action](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scheduled-action.html) AWS CLI 命令。

在更改池容量之前，您可以使用 WorkSpaces [describe-workspaces-pools](https://docs.aws.amazon.com/cli/latest/reference/workspaces/describe-workspaces-pools.html) AWS CLI 命令列出当前的池容量。

```
aws workspaces describe-workspaces-pools --name PoolId
```

当前池容量类似于以下输出 (用 JSON 格式显示)：

```
{
    "CapacityStatus": {
        "AvailableUserSessions": 1,
        "DesiredUserSessions": 1,
        "ActualUserSessions": 1,
        "ActiveUserSessions": 0
    },
}
```

然后，使用 `put-scheduled-action` 命令创建计划操作以更改池容量。例如，以下命令在 UTC 时间每天上午 9 点将最小容量更改为 3，并将最大容量更改为 5。

**注意**  
对于 cron 表达式，以 UTC 时间指定何时执行操作。有关更多信息，请参阅 [Cron 表达式](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html#CronExpressions)。

```
aws application-autoscaling put-scheduled-action --service-namespace workspaces \
--resource-id workspacespool/PoolId \
--schedule="cron(0 9 * * ? *)" \
--scalable-target-action MinCapacity=3,MaxCapacity=5 \
--scheduled-action-name ExampleScheduledAction \
--scalable-dimension workspaces:workspacespool:DesiredUserSessions
```

要确认更改池容量的计划操作已成功创建，请运行该[describe-scheduled-actions](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scheduled-actions.html)命令。

```
aws application-autoscaling describe-scheduled-actions --service-namespace workspaces --resource-id workspacespool/PoolId
```

如果已成功创建计划的操作，则输出类似于以下内容。

```
{
    "ScheduledActions": [
        {
            "ScalableDimension": "workspaces:workspacespool:DesiredUserSessions",
            "Schedule": "cron(0 9 * * ? *)",
            "ResourceId": "workspacespool/ExamplePool",
            "CreationTime": 1518651232.886,
            "ScheduledActionARN": "<arn>",
            "ScalableTargetAction": {
                "MinCapacity": 3,
                "MaxCapacity": 5
            },
            "ScheduledActionName": "ExampleScheduledAction",
            "ServiceNamespace": "workspaces"
        }
    ]
}
```

有关更多信息，请参阅《Application Auto Scaling 用户指南》**中的[计划扩展](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-scheduled-scaling.html)。

### 示例 5：应用目标跟踪扩缩策略
<a name="autoscaling-target-tracking"></a>

通过目标跟踪扩缩功能，您可以为池指定容量利用率级别。

创建目标跟踪扩展策略时，Application Auto Scaling 会自动创建和管理触发扩展策略的 CloudWatch 警报。扩缩策略根据需要增加或减少容量，将容量利用率保持在指定的目标值或接近指定的目标值。为了确保应用程序可用性，池针对此指标尽快按比例横向扩展，但会逐渐横向缩减。

以下[put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html)命令定义了目标跟踪扩展策略，该策略尝试保持 75% 的 WorkSpaces 池容量利用率。

```
aws application-autoscaling put-scaling-policy -- cli-input-json file://config.json
```

文件 `config.json` 的内容如下所示：

```
{
  "PolicyName":"target-tracking-scaling-policy",
  "ServiceNamespace":"workspaces",
  "ResourceId":"workspacespool/PoolId",
  "ScalableDimension":"workspaces:workspacespool:DesiredUserSessions",
  "PolicyType":"TargetTrackingScaling",
  "TargetTrackingScalingPolicyConfiguration":{
    "TargetValue":75.0,
    "PredefinedMetricSpecification":{
      "PredefinedMetricType":"WorkSpacesAverageUserSessionsCapacityUtilization"
    },
    "ScaleOutCooldown":300,
    "ScaleInCooldown":300
  }
}
```

如果命令成功，则输出类似于以下内容，但一些详细信息是您的账户和区域独有的。在此示例中，策略标识符是 6d8972f3-efc8-437c-92d1-6270f29a66e7。

```
{
    "PolicyARN": "arn:aws:autoscaling:us-west-2:123456789012:scalingPolicy:6d8972f3-efc8-437c-92d1-6270f29a66e7:resource/workspaces/workspacespool/PoolId:policyName/target-tracking-scaling-policy",
    "Alarms": [
        {
            "AlarmARN": "arn:aws:cloudwatch:us-west-2:123456789012:alarm:TargetTracking-workspacespool/PoolId-AlarmHigh-d4f0770c-b46e-434a-a60f-3b36d653feca",
            "AlarmName": "TargetTracking-workspacespool/PoolId-AlarmHigh-d4f0770c-b46e-434a-a60f-3b36d653feca"
        },
        {
            "AlarmARN": "arn:aws:cloudwatch:us-west-2:123456789012:alarm:TargetTracking-workspacespool/PoolId-AlarmLow-1b437334-d19b-4a63-a812-6c67aaf2910d",
            "AlarmName": "TargetTracking-workspacespool/PoolId-AlarmLow-1b437334-d19b-4a63-a812-6c67aaf2910d"
        }
    ]
}
```

有关更多信息，请参阅《Application Auto Scaling 用户指南》**中的[目标跟踪扩缩策略](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html)。

## 其他资源
<a name="autoscaling-additional-resources"></a>

要了解有关使用 Application Auto S AWS caling CLI 命令或 API 操作的更多信息，请参阅以下资源：
+ *AWS CLI Command Reference* 的 [application-autoscaling](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling) 部分
+ [Application Auto Scaling API 参考](https://docs.aws.amazon.com/autoscaling/application/APIReference/)
+ [Application Auto Scaling 用户指南](https://docs.aws.amazon.com/autoscaling/application/userguide/)