メニュー
Amazon Elastic Compute Cloud
Linux インスタンス用ユーザーガイド

スポットフリートの自動スケーリング

自動スケーリングは、需要に応じてスポットフリートのターゲット容量を自動的に増減する機能です。スポットフリートは、1 つ以上のスケーリングポリシーに応答して、選択する範囲内でインスタンスを起動 (スケールアウト) するか、インスタンスを削除 (スケールイン) できます。2 つのポリシー (1 つはスケールアウト用、もう 1 つはスケールイン用) を作成することをお勧めします。

スケーリングポリシーでは CloudWatch アラームを使用して、スケーリングプロセスをトリガーします。たとえば、CPU 利用率が一定のレベルに達したときにスケールアウトする場合、Amazon EC2 によって提供される CPUUtilization メトリクスを使用してアラームを作成します。

スケーリングポリシーを作成したら、次のいずれかのスケーリング調整タイプを指定する必要があります。

  • [Add] — 指定した数の容量ユニットまたは指定した割合の現在の容量で、スポットフリートのターゲット容量を増やします。

  • [Remove] — 指定した数の容量ユニットまたは指定した割合の現在の容量で、スポットフリートのターゲット容量を減らします。

  • [Set to] — スポットフリートのターゲット容量を、指定した数の容量ユニットに設定します。

アラームがトリガーされると、Auto Scaling プロセスは、取得済み容量およびスケーリングポリシーを使用して新しいターゲット容量を計算し、必要に応じてターゲット容量を更新します。たとえば、ターゲット容量と取得済み容量がそれぞれ 10 で、スケーリングポリシーが 1 を加算するとします。アラームがトリガーされると、Auto Scaling プロセスは 10 に 1 を加えて 11 を得るため、スポットフリートは 1 つのインスタンスを起動します。

インスタンスの重み付けを使用している場合は、必要に応じてスポットフリートがターゲット容量を超える場合があることに注意してください。具体的には、取得済み容量が浮動小数点数となってもターゲット容量は整数でなければならないために、スポットフリートはその数を次の整数に切り上げます。アラームがトリガーされたときにスケーリングポリシーの結果を確認する際は、このような動作を考慮に入れる必要があります。たとえば、ターゲット容量が 30、取得済み容量が 30.1 で、スケーリングポリシーが 1 を減算するとします。アラームがトリガーされると、Auto Scaling プロセスは 30.1 から 1 を減算して 29.1 を得るため、この数は 30 に切り上げられることになり、スケーリングアクションは実行されません。別の例として、選択したインスタンスの重みが 2、4、8 であり、ターゲット容量が 10 であるとします。重み 2 のインスタンスが利用できなかったために、スポットフリートは重み 4 と 8 のインスタンスをプロビジョニングして取得済みの容量が 12 になったとします。スケーリングポリシーがターゲット容量を 20% 減らしてアラームがトリガーされた場合、Auto Scaling プロセスは 12 から 12×20% を減算して 9.6 を得るため、この数は 10 に切り上げられることになり、スケーリングアクションは実行されません。

また、スケーリングポリシーのクールダウン期間を設定できます。クールダウン期間は、以前のトリガー関連のスケーリングアクティビティが以後のスケーリングイベントに影響を及ぼすことができる期限であり、スケーリングアクティビティが終了した時点からの秒数として指定します。スケールアウトポリシーにクールダウン期間を設定すると、その期間中にクールダウンを開始したスケールアウトイベントによって追加された容量は、次のスケールアウトに予定される容量の一部として繰り入れられます。これにより、スケールアウトが継続的に (ただし過剰になることなく) 行われます。スケールインポリシーにクールダウン期間を設定すると、その期間が過ぎるまでは以後のスケールインリクエストがブロックされます。これにより、スケールインが抑制されてアプリケーションの可用性が確保されます。ただし、スケールイン後のクールダウン期間中に別のアラームによってスケールアウトポリシーがトリガーされると、自動スケーリングによってスケーラブルなターゲットが即座にスケールアウトされます。

ターゲット容量が減ったためにスポットフリートによってインスタンスが削除される場合、インスタンスはスポットインスタンスの中断通知を受け取ります。

制限

  • スポットフリートリクエストには、タイプが maintain のリクエストが必要です。自動スケーリングは 1 回限りのリクエストまたはスポットブロックではサポートされません。

前提条件

  • アプリケーションにとって重要な CloudWatch メトリクスを検討します。AWS または独自のカスタムメトリクスによって提供されるメトリクスに基づいて CloudWatch アラームを作成できます。

  • スケーリングポリシーで使用する AWS メトリクスについて、メトリクスを提供するサービスでデフォルトで有効にならない場合、CloudWatch メトリクスの収集を有効にします。

  • スポットフリートの自動スケーリングを有効にするために AWS マネジメントコンソール を使用すると、ポリシーのアラームを記述し、スポットフリートの現在の容量をモニタリングして、スポットフリートの容量を変更するアクセス許可を Auto Scaling に付与する、aws-ec2-spot-fleet-autoscale-role という名前のロールが作成されます。AWS CLI または API を使用して自動スケーリングを設定した場合、このロール (すでにあれば) を使用できます。または、この目的に独自のロールを手動で作成できます。

    サービスロールを手動で作成するには

    1. https://console.aws.amazon.com/iam/ にある IAM コンソールを開きます。

    2. ナビゲーションペインで [Roles (ロール) ] を選択します。

    3. [Create New Role] を選択します。

    4. [Set Role Name] ページで、ロールの名前を入力し、[Next Step] を選択します。

    5. [Select Role Type] ページで、[Amazon EC2 ] の隣にある [Select] を選択します。

    6. [Attach Policy] ページで、[AmazonEC2SpotFleetAutoscaleRole] ポリシーを選択し、[Next Step] を選択します。

    7. [Review] ページで、[Create Role] を選択します。

    8. 先ほど作成したロールを選択します。

    9. [Trust Relationships] タブで、[Edit Trust Relationship] を選択します。

    10. [ec2.amazonaws.com] を [application-autoscaling.amazonaws.com] に変更し、[Update Trust Policy] を選択します。

CloudWatch アラームを作成するには

  1. https://console.aws.amazon.com/cloudwatch/にある CloudWatch コンソールを開きます。

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

  3. [Create Alarm] を選択します。

  4. [CloudWatch Metrics by Category] で、カテゴリを選択します。たとえば、[EC2 Spot Metrics]、[Fleet Request Metrics] を選択します。

  5. メトリクスを選択して、[Next] を選択します。

  6. [Alarm Threshold] で、アラームの名前と説明を入力して、アラームのしきい値と期間の数を設定します。

  7. (オプション) スケーリングイベントの通知を受信するには、[Actions] の [New list] を選択し、E メールアドレスを入力します。それ以外の場合は、通知を削除し、必要に応じて後で追加できます。

  8. [Create Alarm] を選択します。

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

  1. https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインで、[Spot Requests] を選択します。

  3. スポットフリートリクエストを選択し、[Auto Scaling] タブを選択します。

  4. 自動スケーリングが設定されていない場合は、[Configure] を選択します。

  5. スポットフリートの最小容量および最大容量を設定するには、[Scale capacity between] を使用します。自動スケーリングにより、最小容量以下または最大容量以上にスポットフリートがスケールされることはありません。

  6. 初期状態では、[Scaling policies] には ScaleUp と ScaleDown という名前のポリシーが含まれています。これらのポリシーは、完了するか、[Remove policy] を選択して削除できます。また、[Add policy] を選択してポリシーを追加することもできます。

  7. ポリシーを定義するには、以下の作業を行います。

    1. [Policy name] に、ポリシーの名前を入力します。

    2. [Policy trigger] で、既存のアラームを選択するか、[Create new alarm] を選択して Amazon CloudWatch コンソールを開き、アラームを作成します。

    3. [Modify capacity] でスケーリングの調整タイプ、数、単位を選択します。

    4. (オプション) ステップスケーリングを実行するには、[Define steps] を選択します。デフォルトでは、追加ポリシーには負の無限の下限値とアラームしきい値の上限値があります。デフォルトでは、削除ポリシーにはアラームしきい値の下限値と正の無限大の上限値があります。別のステップを追加するには、[Add step] を選択します。

    5. (オプション) クールダウン期間のデフォルト値を変更するには、[Cooldown period] から数値を選択します。

  8. [Save] を選択します。

AWS CLI を使用してスポットフリートの自動スケーリングを設定するには

  1. register-scalable-target コマンドを使用して、スケーラブルなターゲットとしてスポットフリートリクエストを登録します。

  2. put-scaling-policy コマンドを使用してスケーリングポリシーを作成します。

  3. put-metric-alarm コマンドを使用してスケーリングポリシーをトリガーするアラームを作成します。