适用于亚马逊 AppStream 2.0 的 Fleet Auto Scaling - 亚马逊 AppStream 2.0

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

适用于亚马逊 AppStream 2.0 的 Fleet Auto Scaling

Fleet Auto Scaling 允许您自动更改 AppStream 2.0 Always-On 或按需队列的大小,以使可用实例的供应与用户需求相匹配。您的实例集大小决定了可以同时流式传输的用户数。对于多会话实例集,一个实例可以由多个用户使用。对于非多会话实例集,每个用户会话都需要一个实例。您可以根据实例(对于单会话实例集)和用户会话(对于多会话实例集)来指定实例集容量。根据您的实例集配置和 Auto Scaling 策略,将提供所需数量的实例。您可以定义扩展策略,自动根据各种使用率指标来调整实例集的大小,并优化可用实例的数目以满足用户需求。您也可以选择关闭自动扩展,并使实例集按固定大小运行。

注意

弹性舰队容量由 AppStream 2.0 自动为您管理。无需创建 Auto Scaling 规则即可管理可用于弹性实例集的实例集流实例数。

注意

在制定 AppStream 2.0 机群扩展计划时,请确保您的网络配置符合您的要求。

在使用 Fleet Auto Scaling 之前,Application Auto Scaling 需要访问亚马逊 CloudWatch警报和 AppStream 2.0 队列的权限。有关更多信息,请参阅 使用 AWS 托管策略和关联角色管理管理员对 AppStream 2.0 资源的访问权限使用 IAM 策略管理管理员对 Application Auto Scaling 的访问权限

注意

当您使用扩展时,您可以使用 Application Auto Scaling API。为了让 Fleet Auto Scaling 在 AppStream 2.0 中正常运行,Application Auto Scaling 需要描述和更新您的 AppStream 2.0 舰队并描述您的亚马逊 CloudWatch 警报的权限,以及代表您修改车队容量的权限。有关更多信息,请参阅 AppStream 2.0、Application Auto Scaling 和 Certificate M AWS anager 私有 CA 所需的角色使用 IAM 策略管理管理员对 Application Auto Scaling 的访问权限

以下主题提供的信息可帮助您理解和使用 AppStream 2.0 Fleet Auto Scaling。

扩展概念

AppStream 2.0 缩放由 Application Auto Scaling 提供。有关更多信息,请参阅 Application Auto Scaling API 参考

有关使用 AppStream 2.0 Fleet Auto Scaling 的 step-by-step 指南,请参阅AWS 计算博客中的使用 Amazon AppStream 2.0 扩展桌面应用程序流

要高效地使用实例集 Auto Scaling,您必须了解以下术语和概念。

多会话与单会话

在单会话场景中,每个用户会话都有自己的专用实例。在多会话模式下,可以在一个实例上预置多个用户会话。必须根据用户会话数来配置实例集容量和 Auto Scaling 策略,这项服务将计算所需实例的数量并启动这些实例。

实例集的最小容量/最小用户会话数

实例(对于单会话实例集)或用户会话(对于多会话实例集)的最小数量。实例(对于单会话实例集)或用户会话(对于多会话实例集)数不能低于该值,并且扩展策略不会将您的实例集缩减到该值以下。例如,在单会话场景中,如果将实例集的最小容量设置为 2,则您的实例集永远不会少于 2 个实例。同样,在多会话场景中,一个实例的最大会话数设置为 5,如果您将实例集的最小容量设置为 12,则实例集的实例数将永远不会少于四舍五入 (12/5) = 3。

实例集的最大容量/最大用户会话数

实例(对于单会话实例集)或用户会话(对于多会话实例集)的最大数量。实例(对于单会话实例集)或用户会话(对于多会话实例集)数不能高于该值,并且扩展策略不会将您的实例集扩展到该值以上。例如,在单会话场景中,如果将实例集的最大容量设置为 10,则您的实例集永远不会超过 10 个实例。同样,在多会话场景中,一个实例的最大会话数设置为 5,如果您将实例集的最大容量设置为 52,则实例集的实例数将永远不会超过四舍五入 (52/5) = 11。

所需容量

正在运行或待处理的实例(对于单会话实例集)或用户会话(对于多会话实例集)的总数。该值表示实例集可以在稳定状态下支持的总并发流式传输会话数。要设置 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 时对实例集执行的操作。您可以根据容量百分比实例数量(对于单会话实例集)或用户会话(对于多会话实例集)来选择操作。例如,如果 “当前容量” 为 4,“扩展策略操作” 设置为 “添加 25% 的容量”,则在满足扩展策略条件时,“所需容量增加” 将设置为 5。

扩展策略条件

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

扩展策略指标

您的扩展策略基于该指标。以下指标可用于扩展策略:

容量利用率

实例集中正在使用的实例百分比。您可以使用此指标来根据实例集使用率扩展实例集。例如,Scaling Policy Condition (扩展策略条件):“如果容量利用率 < 25%”执行 Scaling Policy Action (扩展策略操作):“删除 25% 的容量”。

可用容量

实例集中可供用户使用的实例(对于单会话实例集)或用户会话(对于多会话实例集)的数量。您可以使用此指标,在您的容量中保留可供用户用来开始流式传输会话的缓冲区。例如,扩展策略条件:“如果可用容量 < 5”执行扩展策略操作:“添加 5 个实例(对于单会话实例集)或用户会话(对于多会话实例集)”。

容量不足错误

因缺少容量而被拒绝的会话请求的数量。您可以使用此指标为由于容量不足而无法启动流式传输会话的用户预配置新实例。例如,扩展策略条件:“如果容量不足错误 > 0”执行扩展策略操作:“添加 1 个实例(对于单会话实例集)或用户会话(对于多会话实例集)”。

使用控制台管理实例集扩展

您可以通过以下两种方式使用 AppStream 2.0 控制台来设置和管理队列扩展:在创建队列期间,或随时使用 Fleets 选项卡。在启动后,两个默认扩展策略与新创建的实例集相关联。您可以在 AppStream 2.0 控制台的扩展策略选项卡上编辑这些策略。有关更多信息,请参阅 创建实例集

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

使用控制台设置实例集扩展策略
  1. 打开 AppStream 2.0 主机,网址为 https://console.aws.amazon.com/appstream2

  2. 在导航窗格中,选择 Fleets

  3. 选择实例集,然后选择 Scaling Policies

  4. 通过选择每个值旁边的“编辑”图标来编辑现有策略。在编辑字段中设置所需的值并选择 Update。策略更改将在几分钟内生效。

  5. 使用 Add Policy 链接添加 (创建) 新策略。在编辑字段中设置所需的值并选择 Create。新策略将在几分钟内生效。

您可使用 Fleet Usage 选项卡监控扩展策略更改所产生的影响。以下是一个示例图,说明了在 5 个用户连接到实例集然后断开时的扩展活动使用率。本示例来自使用以下扩展策略值的实例集:

  • 最小容量 = 10

  • 最大容量 = 50

  • 扩展 = 如果容量利用率 > 75%,则添加 5 个实例(对于单会话实例集)或用户会话(对于多会话实例集)

  • 缩减 = 如果容量利用率 < 25%,则移除 6 个实例(对于单会话实例集)或用户会话(对于多会话实例集)

    注意

    上述策略既适用于单会话场景,也适用于多会话场景。在单会话场景中,将在扩展事件期间启动 5 个新实例,在缩减事件期间收回 4 个实例。在多会话场景中,由于每个实例的最大会话数 = 4,扩展事件将触发启动四舍五入(添加 5 个用户会话/每个实例的最大会话数 4)= 2 个实例。在缩减事件期间,服务将收回四舍五入(移除 6 个用户会话/每个实例的最大会话数 4)= 2 个实例。不会收回正在运行用户会话的实例。只收回未运行用户会话的实例。

使用控制台设置固定容量实例集
  1. 打开 AppStream 2.0 主机,网址为 https://console.aws.amazon.com/appstream2

  2. 在导航窗格中,选择 Fleets

  3. 选择实例集。

  4. 对于 Scaling Policies,删除与实例集关联的所有策略。

  5. 对于 Fleet Details,编辑实例集以设置 Desired Capacity

固定实例集具有基于您指定为 Desired Capacity 的值的固定容量。请注意,固定实例集一直具有所需数量的可用实例,并且必须停止该实例集才能停止其账单成本。

使用 AWS CLI 管理队列扩展

您可以使用 AWS Command Line Interface (AWS CLI) 设置和管理队列扩展。要获得更高级的功能,例如设置多个扩展策略或设置缩减和横向扩展冷却时间,请使用 CLI。 AWS 在运行扩展策略命令之前,您必须将实例集注册为可扩展目标。为此,请使用下面的 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%,则将队列扩展 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": "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 示例设置了一个扩展策略,如果队列返回InsufficientCapacityError错误,则将队列扩展 1。

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

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 Scaling Acti PutScheduledon API 操作或 put-sch eduled- AWS action CLI 命令。

在更改舰队容量之前,您可以使用 AppStream 2.0 desc ribe-fleet AWS s CLI 命令列出当前的舰队容量。

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-pol icy 命令定义了目标跟踪扩展策略,该策略试图保持 2.0 队列的 75% 容量利用率。 AppStream

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 Fleet Auto Scaling 的 step-by-step 指南,请参阅AWS 计算博客中的使用 Amazon AppStream 2.0 扩展桌面应用程序流

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