Amazon AppStream 2.0 向け Fleet Auto Scaling - Amazon AppStream 2.0

Amazon AppStream 2.0 向け Fleet Auto Scaling

Fleet Auto Scaling では、AppStream 2.0 の常時オンまたはオンデマンドフリートのサイズを自動的に変更して、利用可能なインスタンスの提供をユーザーの需要に適合させることができます。1 人のユーザーが必要とするのは 1 つのフリートインスタンスであるため、フリートのサイズにより、同時にストリームできるユーザーの数が決まります。さまざまな使用状況メトリクスに基づいてフリートのサイズを自動的に調整するスケーリングポリシーを定義し、使用可能なインスタンスの数を最適化してユーザーの需要に合わせることができます。自動スケーリングを無効にして、固定されたフリートサイズで実行することもできます。

注記

Elastic フリートの容量は AppStream 2.0 によって自動的に管理されます。Elastic フリート用に利用できるフリートストリーミングインスタンスの数を管理するためにオートスケーリングルールを作成する必要はありません。

注記

AppStream 2.0 フリートスケーリングの計画を策定する際は、ネットワーク設定が要件を満たしていることを確認するようにしてください。

Fleet Auto Scaling を使用する前に、Application Auto Scaling で Amazon CloudWatch アラームと AppStream 2.0 フリートにアクセスするためのアクセス許可が必要です。詳細については、「ストリーミングインスタンスへのネットワークアクセス AWS 管理ポリシーとリンクされたロールを使用して AppStream 2.0 リソースへの管理者アクセスを管理する」および「IAM ポリシーを使用して Application Auto Scaling への管理者アクセスを管理する」を参照してください。

注記

スケーリングを使用する場合は、Application Auto Scaling API を使用します。AppStream 2.0 で Fleet Auto Scaling が正しく機能するためには、Application Auto Scaling は AppStream 2.0 フリートの説明と更新、および Amazon CloudWatch アラームを記述するアクセス許可、およびお客様に代わってフリートの容量を変更するアクセス許可を必要とします。詳細については、「AppStream 2.0 および Application Auto Scaling に必要なロール」および「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 の操作に関するステップバイステップガイダンスについては、AWS コンピューティングブログScaling Your Desktop Application Streams with Amazon AppStream 2.0」を参照してください。

Fleet Auto Scaling を効果的に使用するには、以下の用語と概念を理解する必要があります。

最低容量

フリートインスタンスの最小数。フリートインスタンスの数がこの値を下回ることはできません。また、スケーリングポリシーがこの値以下にスケールされることはありません。たとえば、フリートの最低容量を 2 に設定した場合、フリートのインスタンス数が 2 を下回ることはありません。

最大容量

フリートインスタンスの最大数。フリートインスタンスの数がこの値を上回ることはできません。また、スケーリングポリシーがこの値以上にスケールされることはありません。たとえば、フリートの最低容量を 10 に設定した場合、フリートのインスタンス数が 10 を上回ることはありません。

希望する容量

実行中または保留中のフリートインスタンスの合計数。この値は、フリートが一定の状態でサポートできる同時ストリーミングセッションの合計数を表します。[希望する容量] の値を設定するには、[フリートの詳細] を編集します。[スケーリングポリシー] を使用する場合、[希望する容量] の値を手動で変更することはお勧めしません。

[Desired Capacity] (希望する容量) の値が [Minimum Capacity] (最低容量) 未満の値に設定されている状態でスケールアウトアクティビティがトリガーされた場合、Application Auto Scaling は [Desired Capacity] (希望する容量) を [Minimum Capacity] (最低容量) の値までスケールアップしてから、スケーリングポリシーに基づいたスケールアウトを必要に応じて続行します。ただし、この場合は、すでに [最低容量] の値を下回っているため、スケールインアクティビティは [希望する容量] を調整しません。

[Desired Capacity] (希望する容量) が [Maximum Capacity] (最大容量) を超える値に設定されている状態でスケールインアクティビティがトリガーされた場合、Application Auto Scaling は [Desired Capacity] (希望する容量) を [Maximum Capacity] (最大容量) の値までスケールダウンしてから、スケーリングポリシーに基づいたスケールインを必要に応じて続行します。ただし、この場合は、すでに [最大容量] の値を上回っているため、スケールアウトアクティビティは [希望する容量] を調整しません。

スケーリングポリシーのアクション

[Scaling Policy Condition] が満たされると、フリートでスケーリングポリシーがアクションを実行します。[% capacity] または [number of instance(s)] に基づいてアクションを選択できます。たとえば、[Desired Capacity] (希望する容量) が 4 の場合に [Scaling Policy Action] (スケーリングポリシーアクション) が [Add 25% capacity] (容量を 25% 追加) に設定されていると、[Scaling Policy Condition] (スケーリングポリシー条件) が満たされるときに [Desired Capacity] (希望する容量) が 25% 増加して 5 になります。

スケーリングポリシーの条件

[Scaling Policy Action] で設定されたアクションをトリガーする条件。この条件は、スケーリングポリシーのメトリクス、比較演算子、しきい値を含みます。たとえば、フリートの使用率が 50% 以上のときにフリートをスケーリングする場合は、スケーリングポリシーの条件を「Capacity Utilization > 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 インスタンスを追加」を実行します。

コンソールを使用したフリートスケーリングの管理

AppStream 2.0 コンソールを使用してフリートスケーリングを設定および管理できます。この操作は、フリートの作成中、またはいつでも [Fleets (フリート)] タブを使用して行うことができます。起動後に新しく作成されたフリートには 2 つのデフォルトのスケーリングポリシーが関連付けられます。これらのポリシーは、AppStream 2.0 コンソールの [Scaling Policies (スケーリングポリシー)] タブで編集できます。詳細については、「フリートを作成する」を参照してください。

ユーザーの環境はさまざまに異なるため、需要に応じてスケーリングを制御するようにスケーリングポリシーを定義します。一定数のユーザーが予想される場合やスケーリングを無効にする他の理由がある場合には、固定数のインスタンスでフリートを設定できます。

コンソールを使用してフリートのスケーリングポリシーを設定するには

  1. AppStream 2.0 コンソールを https://console.aws.amazon.com/appstream2 で開きます。

  2. ナビゲーションペインの [Fleets] を選択します。

  3. スケーリングポリシーを設定するフリートを選択して、[Scaling Policies] を選択します。

  4. 各値の横にある編集アイコンを選択して既存のポリシーを編集します。編集フィールドで目的の値を設定して、[Update] を選択します。ポリシーの変更は数分以内で有効になります。

  5. [Add Policy] リンクを使用して新しいポリシーを追加 (作成) します。編集フィールドで目的の値を設定して、[Create] を選択します。数分以内に新しいポリシーが適用されます。

[Fleet Usage] タブを使用して、スケーリングポリシーの変更の影響をモニタリングできます。次の例は、5 人のユーザーがフリートに接続して切断する場合のスケーリングアクティビティの使用状況グラフです。この例では、フリートは次のスケーリングポリシーを使用します。

  • 最低容量 = 1

  • 最大容量 = 5

  • スケールアウト = 容量使用率>75% の場合 2 インスタンスを追加

  • スケールイン = インスタンス容量使用率 < 25% の場合 1 インスタンスを削除

コンソールを使用してフリートを固定容量に設定するには

  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 アラームを設定します。該当する名前、リージョン、アカウント番号、およびポリシー識別子を使用します。前のコマンドで返されたポリシー ARN を --alarm-actions パラメータに使用できます。

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 アラームを設定します。該当する名前、リージョン、アカウント番号、およびポリシー識別子を使用します。前のコマンドで返されたポリシー ARN を --alarm-actions パラメータに使用できます。

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 アラームを設定します。該当する名前、リージョン、アカウント番号、およびポリシー識別子を使用します。前のコマンドで返されたポリシー ARN を --alarm-actions パラメータに使用できます。

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 コマンドを使用してフリートの容量を変更するスケジュールされたアクションを作成します。たとえば、次のコマンドでは、毎日午前 9:00 時 (UTC) に最小容量を 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 ユーザーガイドScheduled 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 ユーザーガイドTarget Tracking Scaling Policies を参照してください。

その他のリソース

AppStream 2.0 Fleet Auto Scaling の操作に関するステップバイステップガイダンスについては、AWS コンピューティングブログScaling Your Desktop Application Streams with Amazon AppStream 2.0」を参照してください。

Application Auto Scaling の AWS CLI コマンドまたは API アクションの使用に関する詳細については、以下のリソースを参照してください。