Amazon Web Services ブログ

EC2 スポットインスタンスの price-capacity-optimized 戦略のご紹介

この記事は、2022年11月15日にJagdeep Phoolkumar、Peter Manastyrnyによって投稿された「 Introducing the price-capacity-optimized allocation strategy for EC2 Spot Instances 」を翻訳したものです。

Amazon EC2 スポットインスタンスは、AWSクラウド内で使用されていない Amazon Elastic Compute Cloud ( Amazon EC2 ) のキャパシティを、オンデマンド価格と比較して最大90%割引で利用できるものです。EC2 スポットインスタンスを利用する際のベストプラクティスの1つは、幅広いインスタンスタイプに柔軟に対応し、集約されたコンピュートキャパシティを利用できる可能性を高めることです。Amazon EC2 Auto ScalingAmazon EC2 フリート を使用すると、柔軟なインスタンスタイプのセットを使用してリクエストを簡単に構成できるだけでなく、スポットインスタンスの配分戦略 ( Allocation Strategy ) を使用することでリクエストにより提供されるスポットインスタンスプールからスポット容量を満たす方法を決定することができます。

Amazon EC2 Auto Scaling と Amazon EC2 フリートでこれまで提供してきた配分戦略は、「lowest-price ( 最低料金 )」と「capacity-optimized ( キャパシティ最適化 )」と呼ばれています。lowest-price 戦略は、その時点でスポット料金が最も低いスポットインスタンスプールを割り当てます。当時、最も古くから提供してきた配分戦略であるlowest-priceの挙動に対し、複数のお客様の声をお聞きしたところ、lowest-price 戦略ではキャパシティ最適化がされていないスポットインスタンスプールが選ばれ、スポットインスタンスの中断がより頻繁に発生するケースがあるとご指摘をいただきました。そこで、lowest-price 戦略の改善策として、AWSは2019年8月にスポットインスタンスの capacity-optimized 戦略の提供を開始しました。capacity-optimized戦略は EC2 サービス内部の容量に関する情報を参照することで、最も容量の大きなスポットインスタンスプールを自動的に選択してユーザーに提供します。以来、お客様には capacity-optimized 戦略が lowest-price 戦略と比較して、スポットインスタンスの中断率が極めて低くなったとのご評価をいただいています。これらのお客様の事例については、MobileyeとSkyscanner のブログ記事「Capacity-Optimized Spot Instance Allocation in Action at Mobileye and Skyscanner」で詳しくご紹介しています。capacity-optimized 戦略では、空きキャパシティの最も大きなプールを厳密に選択します。そのため、キャパシティがわずかに少ない利用可能な低価格のプールがある場合でも、高価格のプールを選択することがあるのです。お客様からは、最適なエクスペリエンスを得るために、lowest-pricecapacity-optimized の間をとった最適なトレードオフをバランスよく実現する配分戦略が必要であるとの声が寄せられていました。

本日、スポットインスタンスの料金と利用可能なキャパシティの両方に基づいてスポットインスタンスの配分を決定する、「price-capacity-optimized ( 料金キャパシティ最適化 )配分戦略」を新たに発表できることを嬉しく思います。price-capacity-optimized 戦略は、ほとんどのスポットワークロードのデフォルト配分戦略として、まず一番に検討していただきたいものです。

この記事では、price-capacity-optimized 戦略が lowest-pricecapacity-optimized 戦略と比較してどのようにスポットインスタンスを選択するかを説明します。さらに、price-capacity-optimized 配分戦略の一般的な使用例についても説明します。

概要

price-capacity-optimized 戦略では、スポットインスタンスのキャパシティと料金の両方に基づいてスポットインスタンスの配分を決定します。lowest-price 戦略と比較すると、price-capacity-optimized 戦略は、最低価格のスポットインスタンスプールで常に起動しようとするわけではありません。その代わり、price-capacity-optimizedは、多くの利用可能な空きキャパシティを持つ複数の低価格プールに可能な限り分散させるように試みます。その結果、ほとんどの場合、price-capacity-optimized 戦略は、lowest-price 戦略と比較してスポットインスタンスのキャパシティ取得確率が高く、スポットインスタンスの中断率も低くなります。中断されたリクエストを再試行するためのコストを考慮すると、price-capacity-optimized 戦略は lowest-price 戦略よりも節約の観点からさらに魅力的なものになります。

スポットインスタンスの料金、利用可能なキャパシティ、および中断率の最適化が必要なワークロードには、price-capacity-optimized 戦略を推奨します。さらに、lowest-price 戦略を使用している既存のワークロードについても、代わりの戦略として price-capacity-optimized 戦略をお薦めします。capacity-optimized 配分戦略は、同価格のインスタンスを使用するワークロードや、中断のコストが非常に大きく中断のわずかな増加とコスト最適化がトレードオフにならないワークロードに引き続き適しています。

Walkthrough

このセクションでは、price-capacity-optimized 戦略が他の2つの配分戦略と比較して、起動すべきスポットインスタンスをどのように決定するかを説明します。以下の構成例では、Auto Scaling グループにおいて、それぞれの配分戦略でスポットのキャパシティをどのように配分するかを示しています。(スクロールでJSONの全文をご確認いただけます。)

{
    "AutoScalingGroupName": "myasg ",
    "MixedInstancesPolicy": {
        "LaunchTemplate": {
            "LaunchTemplateSpecification": {
                "LaunchTemplateId": "lt-abcde12345"
            },
            "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 4,
                            "Max": 4
                        },
                        "MemoryMiB": {
                            "Min": 0,
                            "Max": 16384
                        },
                        "InstanceGenerations": [
                            "current"
                        ],
                        "BurstablePerformance": "excluded",
                        "AcceleratorCount": {
                            "Max": 0
                        }
                    }
                }
            ]
        },
        "InstancesDistribution": {
            "OnDemandPercentageAboveBaseCapacity": 0,
            "SpotAllocationStrategy": "spot-allocation-strategy"
        }
    },
    "MinSize": 10,
    "MaxSize": 100,
    "DesiredCapacity": 60,
    "VPCZoneIdentifier": "subnet-a12345a,subnet-b12345b,subnet-c12345c"
}

まず、Amazon EC2 Auto Scaling はアベイラビリティゾーン間で均等にキャパシティのバランスを取ろうとします。次に、Amazon EC2 Auto Scaling は属性ベースのインスタンスタイプ選択によって選択された30以上のインスタンスを使用して、各アベイラビリティゾーンでスポットインスタンスの配分戦略を適用します。上述のJSONでは、spot-allocation-strategyという値が可変になっており、この値を各々の戦略に変化させて実験を行いました。各配分戦略をテストした結果は次のとおりです。

  • price-capacity-optimized 戦略は、利用可能なスポットインスタンスのキャパシティに最適化した低価格の複数のスポットインスタンスプールに分散させます。
  • capacity-optimized 戦略は、利用可能なスポットインスタンスのキャパシティにのみ最適化されたスポットインスタンスプールを識別します。
  • lowest-price 戦略は、デフォルトで利用可能なスポットインスタンスのキャパシティに最適化されていない最低価格のスポットインスタンスプールを 2 つ配分します

各配分戦略におけるスポットインスタンスの価格と容量を比較するために、”Auto Scalingグループの価格”(インスタンス数 × インスタンスタイプごとのスポットインスタンスの価格 / 時間)と”スポットインスタンスの中断率”(インスタンス中断数 / 起動インスタンス数)を各配分戦略で比較しました。この記事では、架空の数字を使用しています。実際のスポットインスタンスの節約を調べるにはCloud Intelligence Dashboardsを、スポットインスタンスの中断を記録するにはAmazon EC2 Spot interruption dashboardsを使用します。30日後の結果例は以下の通りです。

配分戦略 インスタンス配分 Auto Scaling グループの価格 スポットインスタンスの中断率
price-capacity-optimized

40 c6i.xlarge

20 c5.xlarge

$4.80/hour 3%
capacity-optimized 60 c5.xlarge $5.00/hour 2%
lowest-price

30 c5a.xlarge

30 m5n.xlarge

$4.75/hour 20%

上の表のように、price-capacity-optimized 戦略は lowest-price 戦略に対して、Auto Scalingグループの価格は5セント( 1% )しか高くありませんが、スポットインスタンスの中断率は1/6( 3% vs 20% )になります。まとめると、この例で price-capacity-optimized 戦略は、lowest-price 戦略とcapacity-optimized 戦略の両方の長所を生かしたスポットインスタンスの最適な体験を提供することが分かりました。

price-capacity-optimized 戦略の一般的な使用例

前述のとおり、price-capacity-optimized 戦略は、ほとんどのスポットインスタンスを活用するワークロードに推奨されます。このセクションでは、さらに詳しく説明するために、これらの一般的なワークロードについてのいくつかを説明します。

ステートレスおよび耐障害性ワークロード

スポットインスタンスの中断通知から 2 分以内に進行中のリクエストを完了できるステートレスワークロード、再試行がしやすい耐障害性ワークロードは、price-capacity-optimized 戦略に最も適しています。このカテゴリーには、ステートレスコンテナ型アプリケーション、マイクロサービス、ウェブアプリケーション、データおよび分析ジョブ、バッチ処理などのワークロードが含まれます。

中断コストが高いワークロード

再試行実施が難しい中断コストが高いワークロードは、チェックポイントを実装して中断コストを下げる必要があります。チェックポイントを使用すると、スポットインスタンスの中断率が低く低価格のスポットインスタンスプールからキャパシティを割り当てるため、price-capacity-optimized 戦略がこれらのワークロードに適しています。このカテゴリには、長時間の継続的インテグレーション( CI )、画像やメディアのレンダリング、深層学習、ハイパフォーマンスコンピューティング( HPC )などのワークロードがあります。

結論

お客様がデフォルトのオプションとしてprice-capacity-optimized 配分戦略を使用することを推奨します。price-capacity-optimized 戦略により、Amazon EC2 Auto Scaling グループと Amazon EC2 フリートは最適なエクスペリエンスでターゲット容量をプロビジョニングできます。Amazon EC2 Auto Scaling グループあるいは Amazon EC2 フリートのパラメーターのひとつを更新するだけで、price-capacity-optimized 戦略を有効にできます。

スポットインスタンスの配分戦略の詳細については、スポットインスタンスの配分戦略のドキュメントページを参照してください。

翻訳は Solutions Architect の寺部が担当しました。原文はこちらです。