WorkSpaces Pools 的自动扩缩 - Amazon WorkSpaces
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

WorkSpaces Pools 的自动扩缩

重要

WorkSpaces Pools 功能不在北京和宁夏区域提供。

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

注意
  • 在制定 WorkSpaces Pools 扩缩计划时,请确保网络配置能够满足您的要求。

  • 当您使用扩缩功能时,可以使用 Application Auto Scaling API。为了针对 WorkSpaces Pools 正确应用自动扩缩功能,Application Auto Scaling 需要具有描述和更新池以及描述 Amazon CloudWatch 警报的权限,并具有代表您修改池容量的权限。

以下主题提供了相应的信息,可帮助您了解和使用 WorkSpaces Pools 自动扩缩功能。

扩缩概念

WorkSpaces Pools 扩缩功能由 Application Auto Scaling 提供。有关更多信息,请参阅 Application Auto Scaling API 参考

要高效地使用 WorkSpaces Pools 自动扩缩,您必须了解以下术语和概念。

池的最小容量/最小用户会话数

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

池的最大容量/最大用户会话数

实例的最大数目。实例数不能高于该值,并且扩缩策略不会将您的池扩大到该值以上。例如,如果将池的最大容量设置为 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 个实例”。

使用控制台管理池扩缩

您可以使用 WorkSpaces 控制台通过以下两种方法之一设置和管理扩缩:在创建池期间或使用选项卡的任何时候。创建池后,转到扩缩策略选项卡,为您的池添加新的扩缩策略。有关更多信息,请参阅 创建 WorkSpaces Pools

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

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

使用控制台设置池扩缩策略
  1. 打开 WorkSpaces 控制台,网址为:https://console.aws.amazon.com/workspaces/v2/home

  2. 在导航窗格中,选择

  3. 选择池。

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

  5. 选择编辑

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

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

以下是一个示例图,说明了在 5 个用户连接到池然后断开连接时的扩缩活动使用率。本示例来自使用以下扩缩策略值的池:

  • 最小容量 = 10

  • 最大容量 = 50

  • 横向扩展 = 如果我的池容量利用率大于 75%,则添加 5 个实例

  • 横向缩减 = 如果我的池容量利用率小于 25%,则删除 6 个实例

    注意

    会话期间,将在横向扩展事件期间启动 5 个新实例。在横向缩减事件期间,如果有足够的实例而没有活跃的用户会话,并且实例总数未降至最低 10 个实例容量以下,则将回收 6 个实例。不会收回正在运行用户会话的实例。只收回未运行用户会话的实例。

使用 Amazon CLI 管理池扩缩

您可以使用 Amazon Command Line Interface(Amazon CLI)设置和管理池扩缩。有关诸如设置横向缩减和横向扩展冷却时间等的更高级功能,请使用 Amazon CLI。在运行扩缩策略命令之前,您必须将池注册为可扩展目标。为此,请使用下面的 register-scalable-target 命令:

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

示例 1:根据容量利用率应用扩缩策略

此 Amazon CLI 示例设置一个扩缩策略,该策略在利用率 >= 75% 时将池横向扩展 25%。

以下 put-scaling-policy 命令定义一个基于利用率的扩缩策略:

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 Amazon/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:根据“容量不足”错误应用扩缩策略

此 Amazon 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:根据低容量利用率应用扩缩策略

此 Amazon 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:基于计划更改池容量

通过基于计划更改池容量,您能够扩缩池容量以响应可预测的需求变化。例如,在工作日的开始,您可能预期有特定数量的用户一次性请求流式传输连接。要基于计划更改池容量,您可以使用 Application Auto Scaling PutScheduledAction API 操作或 put-scheduled-action Amazon CLI 命令。

在更改池容量之前,您可以使用 WorkSpaces describe-workspaces-pools Amazon 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 表达式

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 命令。

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 用户指南》中的计划扩展

示例 5:应用目标跟踪扩缩策略

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

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

以下 put-scaling-policy 命令定义了一个目标跟踪扩缩策略,该策略试图将 WorkSpaces Pools 的容量利用率维持在 75%。

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 用户指南》中的目标跟踪扩缩策略

其他资源

要了解有关使用 Application Auto Scaling Amazon CLI 命令或 API 操作的更多信息,请参阅以下资源: