Amazon AppStream 2.0 的实例集 Auto Scaling - 亚马逊 AppStream 2.0

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

Amazon AppStream 2.0 的实例集 Auto Scaling

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

注意

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

注意

在制定 AppStream 2.0 实例集扩展计划时,请确保网络配置能够满足您的要求。

Application Auto Scaling 需要先获得对 Amazon CloudWatch 警报和 AppStream 2.0 实例集的访问权限,然后您才能使用实例集 Auto Scaling。有关更多信息,请参阅 使用 AWS 托管策略和相关角色管理管理员对 AppStream 2.0 资源的访问权限使用 IAM 策略管理管理员对 Application Auto Scaling 的访问权限

注意

当您使用扩展时,您可以使用 Application Auto Scaling API。为了使实例集 Auto Scaling 针对 AppStream 2.0 正确运行,Application Auto Scaling 需要具有描述和更新您的 AppStream 2.0 实例集以及描述 Amazon CloudWatch 警报的权限,并具有代表您修改实例集容量的权限。有关更多信息,请参阅 AppStream 2.0、Application Auto Scaling 和 AWS Certificate Manager Private CA 所需的角色使用 IAM 策略管理管理员对 Application Auto Scaling 的访问权限

以下主题提供了相应的信息以帮助您了解和使用 AppStream 2.0 实例集 Auto Scaling。

扩展概念

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

有关使用 AppStream 2.0 实例集 Auto Scaling 的分步指南,请参阅 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 时对实例集执行的操作。您可以根据容量百分比实例数量(对于单会话实例集)或用户会话(对于多会话实例集)来选择操作。例如,如果 Desired Capacity 为 4 并且 Scaling Policy Action 设置为“Add 25% capacity”,则在满足 Scaling Policy Condition 时,Desired Capacity 将增加 25%,即设为 5。

扩展策略条件

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

扩展策略指标

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

容量利用率

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

可用容量

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

容量不足错误

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

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

您可以使用 AppStream 2.0 控制台通过以下两种方法之一设置和管理实例集扩展:在创建实例集期间或随时使用实例集选项卡进行。在启动后,两个默认扩展策略与新创建的实例集相关联。您可以在 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) 设置和管理实例集扩展。有关诸如设置多个扩展策略或设置缩减和扩展冷却时间等的更高级特征,请使用 AWS CLI。在运行扩展策略命令之前,您必须将实例集注册为可扩展目标。为此,请使用下面的 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 PutScheduledAction API 操作或 put-scheduled-action AWS CLI 命令。

更改实例集容量之前,您可以使用 AppStream 2.0 describe-fleets AWS 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-policy 命令定义了一个目标跟踪扩展策略,该策略试图将 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 的分步指南,请参阅 AWS 计算博客 中的使用 Amazon AppStream 2.0 扩展桌面应用程序流

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