本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon AppStream 2.0 队列 Auto Scaling
利用队列 Auto Scaling,您可以更改 AppStream 2.0 的大小。永远在线或按需自动使用队列以使提供的可用实例满足用户需求。由于一个用户需要使用一个队列实例,因此,您的队列大小决定了可以同时流式传输的用户数。您可以定义扩展策略,自动根据各种使用率指标来调整队列的大小,并优化可用实例的数目以满足用户需求。您也可以选择关闭自动扩展,并使队列按固定大小运行。
AppStream 2.0 为您自动管理弹性队列容量。您无需创建自动扩展规则即可管理可用于弹性队列的队列流实例的数量。
在制定 AppStream 2.0 队列扩展计划时,请确保网络配置满足您的要求。
在使用队列 Auto Scaling 之前,Application Auto Scaling 需要具有访问 Amazon CloudWatch 警报和 AppStream 2.0 队列的权限。有关更多信息,请参阅 对流实例的网络访问 使用AWS托管策略和关联角色管理管理员对 AppStream 2.0 资源的访问权限 和 使用 IAM 策略管理管理员对Application Auto Scaling 的访问权限。
当您使用扩展时,您可以使用 Application Auto Scaling API。为了使队列 Auto Scaling 针对 AppSApplication Auto Scaling 2.0 正确运行,需要具有描述和更新 AppStream 2.0 队列以及描述 Amazon CloudWatch 警报的权限,并具有代表您修改队列容量的权限。有关更多信息,请参阅 AppStream 2.0、Application Auto Scaling 和Certificate MAWS anager 私有 CA 所需的角色 和 使用 IAM 策略管理管理员对Application Auto Scaling 的访问权限。
以下主题提供了相应的信息,以帮助您了解和使用 AppStream 2.0 队列 Auto Scaling。
扩展概念
AppStream 2.0 扩展由 Application Auto Scaling 提供。有关更多信息,请参阅 。Application Auto Scaling API 参考.
有关使用 AppStream 2.0 队列 Auto Scaling 的分步指导,请参阅借助 Amazon AppStream 2.0 扩展桌面应用程序流
要高效地使用队列 Auto Scaling,您必须了解以下术语和概念。
- 最小的容量
-
最小队列实例数。队列实例数不能低于该值,并且扩展策略不会将您的队列缩减到该值以下。例如,如果将队列的最小容量设置为 2,则您的队列永远不会少于 2 个实例。
- 最大容量
-
最大队列实例数。队列实例数不能高于该值,并且扩展策略不会将您的队列扩展到该值以上。例如,如果将队列的最大容量设置为 10,则您的队列永远不会超过 10 个实例。
- 所需容量
-
正在运行或待处理的总队列实例数。该值表示队列可以在稳定状态下支持的总并发流会话数。要设置 Desired Capacity (所需容量) 值,请编辑 Fleet Details (队列详细信息)。我们建议不要更改所需容量使用时手动值扩展策略.
如果设置的 Desired Capacity (所需容量) 值低于 Minimum Capacity (最小容量) 值,并触发了扩展活动,则应用程序 Auto Scaling 将 Desired Capacity (所需容量) 值扩展到 Minimum Capacity (最小容量) 值,然后根据扩展策略需要继续进行扩展。不过,在这种情况下,缩减活动不会调整 Desired Capacity (所需容量),因为该值已低于 Minimum Capacity (最小容量) 值。
如果设置的 Desired Capacity (所需容量) 值高于 Maximum Capacity (最大容量) 值,并触发了缩减活动,则应用程序 Auto Scaling 将 Desired Capacity (所需容量) 值缩减到 Maximum Capacity (最大容量) 值,然后根据扩展策略需要继续进行缩减。不过,在这种情况下,扩展活动不会调整 Desired Capacity (所需容量),因为它已高于 Maximum Capacity (最大容量) 值。
- 扩展策略操作
-
扩展策略在满足 Scaling Policy Condition 时对队列执行的操作。您可以根据 % capacity 或 number of instance(s) 选择一个操作。例如,如果 Desired Capacity 为 4 并且 Scaling Policy Action 设置为“Add 25% capacity”,则在满足 Scaling Policy Condition 时,Desired Capacity 将增加 25%,即设为 5。
- 扩展策略条件
-
触发 Scaling Policy Action 中设置的操作的条件。此条件包括扩展策略指标、比较运算符和阈值。例如,要在队列利用率高于 50% 时扩展队列,您的扩展策略条件应为“如果容量利用率 > 50%”。
- 扩展策略指标
-
您的扩展策略基于该指标。以下指标可用于扩展策略:
- 容量利用率
-
队列中正在使用的实例百分比。您可以使用此指标来根据队列使用率扩展队列。例如,扩展策略条件:执行 “如果容量利用率 < 25%”扩展策略操作:“移除 25% 的容量”。
- 可用容量
-
队列中可用于用户会话的实例数。您可以使用此指标,在您的容量中保留可供用户用来开始流会话的缓冲区。例如,扩展策略条件:“如果可用容量 < 5" 执行扩展策略操作:“添加 5 个实例”。
- 容量不足错误
-
因缺少容量而被拒绝的会话请求的数量。您可以使用此指标为由于容量不足而无法启动流式传输会话的用户预配置新实例。例如,扩展策略条件:“如果容量不足错误 > 0" 执行扩展策略操作:“添加 1 个实例”。
使用控制台管理队列扩展
您可以使用 AppStream 2.0 控制台通过以下两种方法之一设置和管理队列扩展:在队列创建过程中,或任何时候都可以使用机群选项卡。在启动后,两个默认扩展策略与新创建的队列相关联。您可以在扩展策略“AppStream 2.0” 控制台中的选项卡。有关更多信息,请参阅 创建机群。
对于数量不断变化的用户环境,定义扩展策略以控制扩展响应需求的方式。如果您需要固定数量的用户或出于其他原因而禁用扩展,则可以设置具有固定数量的实例的队列。
使用控制台设置队列扩展策略
打开 AppStream 2.0 控制台https://console.aws.amazon.com/appstream2
. -
在导航窗格中,选择 Fleets。
-
选择队列,然后选择 Scaling Policies。
-
通过选择每个值旁边的“编辑”图标来编辑现有策略。在编辑字段中设置所需的值并选择 Update。策略更改将在几分钟内生效。
-
使用 Add Policy 链接添加 (创建) 新策略。在编辑字段中设置所需的值并选择 Create。新策略将在几分钟内生效。
您可使用 Fleet Usage 选项卡监控扩展策略更改所产生的影响。以下是一个示例图,说明了在 5 个用户连接到队列然后断开时的扩展活动使用率。本示例来自使用以下扩展策略值的队列:
-
最小容量 = 1
-
最大容量 = 5
-
横向扩展 = 如果容量利用率 > 75%,则添加 2 个实例
-
缩减 = 如果容量利用率 < 25%,则删除 1 个实例

使用控制台设置固定容量队列
打开 AppStream 2.0 控制台https://console.aws.amazon.com/appstream2
. -
在导航窗格中,选择 Fleets。
-
选择队列。
-
对于 Scaling Policies,删除与队列关联的所有策略。
-
对于 Fleet Details,编辑队列以设置 Desired Capacity。
固定队列具有基于您指定为 Desired Capacity 的值的固定容量。请注意,固定队列一直具有所需数量的可用实例,并且必须停止该队列才能停止其账单成本。
使用管理队列扩展AWSCLI
您可以使用设置和管理队列扩展AWS Command Line Interface(AWSCLI)。有关诸如设置多个扩展策略或设置向内扩展和向外扩展冷却时间等的更高级功能,请使用AWSCLI。在运行扩展策略命令之前,您必须将队列注册为可扩展目标。为此,请使用下面的 register-scalable-target 命令:
aws application-autoscaling register-scalable-target --service-namespace appstream \ --resource-id fleet/
fleetname
\ --scalable-dimension appstream:fleet:DesiredCapacity \ --min-capacity 1 --max-capacity 5
示例 1:根据容量利用率应用扩展策略
该AWS此 CLI 示例设置一个扩展策略,该策略在利用率 >= 75% 时向外扩展队列。
以下 put-scaling-policy 命令定义一个基于利用率的扩展策略:
aws application-autoscaling put-scaling-policy --cli-input-json file://scale-out-utilization.json
文件 scale-out-utilization.json
的内容如下所示:
{ "PolicyName": "
policyname
", "ServiceNamespace": "appstream", "ResourceId": "fleet/fleetname
", "ScalableDimension": "appstream:fleet:DesiredCapacity", "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/appstream/fleet/SampleFleetName:policyName/scale-out-utilization-policy"}
现在,为此策略设置 CloudWatch 警报。使用适用于您的名称、区域、账号和策略标识符。您可以对 --alarm-actions
参数使用上一条命令所返回的策略 ARN。
aws cloudwatch put-metric-alarm --alarm-name
alarmname
\ --alarm-description "Alarm when Capacity Utilization exceeds 75 percent" \ --metric-name CapacityUtilization \ --namespace AWS/AppStream \ --statistic Average \ --period 300 \ --threshold 75 \ --comparison-operator GreaterThanOrEqualToThreshold \ --dimensions "Name=Fleet,Value=fleetname
" \ --evaluation-periods 1 --unit Percent \ --alarm-actions "arn:aws:autoscaling:your-region-code
:account-number-without-hyphens
:scalingPolicy:policyid
:resource/appstream/fleet/fleetname
:policyName/policyname
"
示例 2:根据 “容量不足” 错误应用扩展策略
该AWS此 CLI 示例设置一个扩展策略,该策略在队列返回时将队列向外扩展 1。InsufficientCapacityError
错误消息。
以下命令定义一个基于“容量不足”的扩展策略:
aws application-autoscaling put-scaling-policy --cli-input-json file://scale-out-capacity.json
文件 scale-out-capacity.json
的内容如下所示:
{ "PolicyName": "
policyname
", "ServiceNamespace": "appstream", "ResourceId": "fleet/fleetname
", "ScalableDimension": "appstream:fleet:DesiredCapacity", "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/appstream/fleet/SampleFleetName: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/AppStream \ --statistic Maximum \ --period 300 \ --threshold 0 \ --comparison-operator GreaterThanThreshold \ --dimensions "Name=Fleet,Value=fleetname
" \ --evaluation-periods 1 --unit Count \ --alarm-actions "arn:aws:autoscaling:your-region-code
:account-number-without-hyphens
:scalingPolicy:policyid
:resource/appstream/fleet/fleetname
:policyName/policyname
"
示例 3:根据低容量利用率应用扩展策略
此 AWS CLI 示例设置了一个扩展策略,该策略在队列中进行扩展以减少实际容量。CapacityUtilization
很低。
以下命令定义一个基于“容量过多”的扩展策略:
aws application-autoscaling put-scaling-policy --cli-input-json file://scale-in-capacity.json
文件 scale-in-capacity.json
的内容如下所示:
{ "PolicyName": "
policyname
", "ServiceNamespace": "appstream", "ResourceId": "fleet/fleetname
", "ScalableDimension": "appstream:fleet:DesiredCapacity", "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/appstream/fleet/SampleFleetName: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 CapacityUtilization \ --namespace AWS/AppStream \ --statistic Average \ --period 120 \ --threshold 25 \ --comparison-operator LessThanOrEqualToThreshold \ --dimensions "Name=Fleet,Value=fleetname
" \ --evaluation-periods 10 --unit Percent \ --alarm-actions "arn:aws:autoscaling:your-region-code
:account-number-without-hyphens
:scalingPolicy:policyid
:resource/appstream/fleet/fleetname
:policyName/policyname
"
示例 4:基于计划更改队列容量
通过基于计划更改队列容量,您能够扩展队列容量以响应可预测的需求变化。例如,在工作日的开始,您可能预期有特定数量的用户一次性请求流式处理连接。要基于计划更改队列容量,您可以使用 Application Auto ScalingPutScheduledActionAPI 操作或put-scheduled-action AWSCLI 命令。
在更改队列容量之前,您可以使用 AppStream 2.0 列出当前队列容量。描述舰队 AWSCLI 命令。
aws appstream describe-fleets --name
fleetname
当前队列容量类似于以下输出 (用 JSON 格式显示):
{
{
"ComputeCapacityStatus": {
"Available": 1,
"Desired": 1,
"Running": 1,
"InUse": 0
},
}
然后,使用 put-scheduled-action
命令创建计划操作以更改队列容量。例如,以下命令在 UTC 时间每天上午 9 点将最小容量更改为 3,并将最大容量更改为 5。
对于 cron 表达式,以 UTC 时间指定何时执行操作。有关更多信息,请参阅 Cron 表达式。
aws application-autoscaling put-scheduled-action --service-namespace appstream \ --resource-id fleet/
fleetname
\ --schedule="cron(0 9 * * ? *)" \ --scalable-target-action MinCapacity=3,MaxCapacity=5 \ --scheduled-action-name ExampleScheduledAction \ --scalable-dimension appstream:fleet:DesiredCapacity
要确认已成功创建用于更改队组容量的计划操作,请运行 describe-scheduled-actions 命令。
aws application-autoscaling describe-scheduled-actions --service-namespace appstream --resource-id fleet/
fleetname
如果已成功创建计划的操作,则输出类似于以下内容。
{
"ScheduledActions": [
{
"ScalableDimension": "appstream:fleet:DesiredCapacity",
"Schedule": "cron(0 9 * * ? *)",
"ResourceId": "fleet/ExampleFleet",
"CreationTime": 1518651232.886,
"ScheduledActionARN": "<arn>",
"ScalableTargetAction": {
"MinCapacity": 3,
"MaxCapacity": 5
},
"ScheduledActionName": "ExampleScheduledAction",
"ServiceNamespace": "appstream"
}
]
}
有关更多信息,请参阅 。计划的扩展中的Application Auto Scaling 用户指南.
示例 5:应用目标跟踪扩展策略
通过目标跟踪扩展,您可以为队列指定容量利用率级别。
创建目标跟踪扩展策略时,Application Auto Scaling 将自动创建和管理用于触发扩展策略的 CloudWatch 警报。扩展策略根据需要增加或减少容量,将容量利用率保持在指定的目标值或接近指定的目标值。为了确保应用程序可用性,队列针对此指标尽快按比例向外扩展,但会逐渐向内扩展。
以下put-scaling 策略命令定义了一个目标跟踪扩展策略,该策略试图将 AppStream 2.0 队列的容量利用率维持在 75%。
aws application-autoscaling put-scaling-policy --cli-input-json file://config.json
文件 config.json
的内容如下所示:
{ "PolicyName":"target-tracking-scaling-policy", "ServiceNamespace":"appstream", "ResourceId":"fleet/
fleetname
", "ScalableDimension":"appstream:fleet:DesiredCapacity", "PolicyType":"TargetTrackingScaling", "TargetTrackingScalingPolicyConfiguration":{ "TargetValue":75.0, "PredefinedMetricSpecification":{ "PredefinedMetricType":"AppStreamAverageCapacityUtilization" }, "ScaleOutCooldown":300, "ScaleInCooldown":300 } }
如果命令成功,则输出类似于以下内容,但一些详细信息是您的账户和区域独有的。在此示例中,策略标识符是 6d8972f3-efc8-437c-92d1-6270f29a66e7。
{
"PolicyARN": "arn:aws:autoscaling:us-west-2:123456789012:scalingPolicy:6d8972f3-efc8-437c-92d1-6270f29a66e7:resource/appstream/fleet/fleetname:policyName/target-tracking-scaling-policy",
"Alarms": [
{
"AlarmARN": "arn:aws:cloudwatch:us-west-2:123456789012:alarm:TargetTracking-fleet/fleetname-AlarmHigh-d4f0770c-b46e-434a-a60f-3b36d653feca",
"AlarmName": "TargetTracking-fleet/fleetname-AlarmHigh-d4f0770c-b46e-434a-a60f-3b36d653feca"
},
{
"AlarmARN": "arn:aws:cloudwatch:us-west-2:123456789012:alarm:TargetTracking-fleet/fleetname-AlarmLow-1b437334-d19b-4a63-a812-6c67aaf2910d",
"AlarmName": "TargetTracking-fleet/fleetname-AlarmLow-1b437334-d19b-4a63-a812-6c67aaf2910d"
}
]
}
有关更多信息,请参阅 。目标跟踪扩展策略中的Application Auto Scaling 用户指南.
其他资源
有关使用 AppStream 2.0 队列 Auto Scaling 的分步指导,请参阅借助 Amazon AppStream 2.0 扩展桌面应用程序流
详细了解如何使用应用程 Application Auto ScalingAWS请参阅以下资源 CLI 命令或 API 操作:
-
AWS CLI Command Reference 的 application-autoscaling 部分