この記事は、CAST AI社により公開されたブログ記事を元に翻訳・作成したものです。元の記事については以下をご覧ください。
(記事最終更新日:2021年7月1日)
スポットインスタンス:AWS、Azure、GCPのコストを90%削減する方法
公開日:2023年1月30日
更新日:2023年1月30日
スポットインスタンスの欠点は、既にご存知だと思います。クラウドプロバイダは、通知後たったの30秒後に、インスタンスを停止できます。
といっても、リザーブドインスタンスを推奨しているわけではありません。むしろ逆です。リザーブドインスタンスは、ベンダーロックインへの道であり、長期的にはより多くの費用がかかります。
実は、スポットインスタンスを効果的に使用する方法があります。本番ワークロードであってもです。
このガイドを読んで、スポットインスタンスを使いこなす方法を学び、請求書を財務チームに見せて驚かせてやってください。
このブログは、コスト最適化シリーズのパート3です。シリーズの残りの部分は次のとおりです。
注: クラウドの世界は急速に変化するため、この記事は変化を反映するために、定期的に更新されます。最終更新日: 2022/3/25
なぜスポットインスタンスを扱うのが困難なのでしょうか?
インスタンスの停止が不可避
CSPは、未使用のキャパシティを最大90%節約できる価格で提供します。ただし、30秒から2分と短い通知の後、インスタンスの停止が行われる可能性があるという問題があります。本番ワークロードでスポットインスタンスの管理が難しくなるのは、こういった理由です。
また、余剰コンピューティングリソースに入札するという仕組みのため、これらのリソースがいつまで利用できるかは保障されません。インスタンスの停止は発生するものと考える必要があります。そのため、停止を許容できないような、重要なワークロードには使用するべきとはかぎりません。
インスタンス停止はすぐに行われます
CSPは停止前に通知します。しかし、Amazonなら2分、AzureとGoogleは30秒しか猶予はありません。すべてを投げ出したとしても、代わりのインスタンスを見つけるのに充分な時間でしょうか? 人がするのは不可能です。
オンデマンドインスタンスを既に決めているとしましょう。新しいVM の作成には、AWSで約5分(Kubernetesを使用する場合はさらに長く)必要なため、数分のダウンタイムが発生する可能性があります。もう1つの方法は、インスタンスが停止されたときに追加するための一時停止したマシンをいくつか用意しておくことです。しかし、その場合、財政はあまりよい結果にはなりません。
スポットインスタンスの停止に対処する最善の方法は自動化です。
Note:リバランスの推奨事項
2020年11月、AWSは、インスタンスが停止通知を受け取る前に、EC2スポットインスタンスで実行されているワークロードをプロアクティブに再調整するための新しい機能を提供します。使用しているスポットインスタンスの中断リスクが高まった場合に、シグナルを通知します。中断通知よりも早く発行されるため、ワークロードを新しいインスタンスまたは既存のインスタンスに再調整する時間ができます。
限られた容量
スポットインスタンスとして販売され、利用できるキャパシティは、サイズ、地域、時間帯、およびその他の多くの要因により大きく異なります。また、それらはすべて頻繁に変更される可能性があります。
スポットインスタンスの可用性は、需要と供給に基づいています。最も人気があるインスタンスタイプをたまたま選択し、ブラックフライデーのような市場の急増が発生した場合に、予期しない動作につながる可能性があります。
なぜスポットインスタンスを使用するのでしょうか。
ワークロードの中には、常にオンデマンドマシンが必要ないものもあります。Salesforce、Lyft、AutoDeskなどのテクノロジー企業は、スポットインスタンスを使用しています。
もし、まだ疑念を抱いているのなら、このようなシナリオを考えてみてください。
アプリケーション(製品カタログサービス)用に10個のポッドが実行されているとします。ポッドの半分はスポットインスタンスで実行されています。
ある時点で、インスタンスが差押え通知してきました。つまり、インスタンスが奪われるという意味です。そうなれば、使っている容量の半分を失うことになります。
すぐにダウンタイムは発生しません。ポッドは中断後も利用できるほかのマシンに再分配されます。
しかし、問題が発生する前に、適切に操作して中断し、そのキャパシティを置き換えたい場合、どのような方法があるでしょうか?
割り当てられた時間内に新しいインスタンスを素早くオーダーできます。たとえば、別のタイプのスポットインスタンスなどです。また、マーケットプレイスにスポットインスタンスのキャパシティがない場合は、オンデマンドインスタンスの利用もできます。
そのオンデマンドインスタンスをマーケットの圧力が緩和された数時間後に、スポットインスタンスに置き換えることができます。
予約済みプラン(リザーブドインスタンス)に縛られないことで、多くの柔軟性が得られ、ベンダー(または特定のインスタンスタイプ)に縛られることを回避できます。そのため、スポットインスタンスを使用することをお勧めします。こちらの記事もご覧ください:How to Find Out Exactly How Much You Can Save with Spot Instances
どのようなときに、スポットインスタンスを使用するべきか?
サービスがステートレスでスケールアウトできる場合(つまり、複数のレプリカがある場合)は、スポットインスタンスに適しています。
幸いなことに、最新のアーキテクチャーではほとんどのサービスがステートレスです。Kubernetesは、ステートレスアーキテクチャー用に設計されています。
スポットインスタンスでうまく機能するワークロードの例を次に示します。
-
バッチ処理ジョブ
耐障害性があり、インスタンスの柔軟性があります。
-
コンテナーとマイクロサービス
通常、これらは自己完結型で、可用性が高く、耐障害性があり、中断に対処できます。
-
ハイパフォーマンスコンピューティング(HPC)
これらのアプリケーションは通常、非常に高い計算能力、大量のメモリー、高速ストレージ、および高いネットワークパフォーマンスを必要とします。スポットインスタンスは、バーストまたは、プライマリコンピュートインフラとしても、それらをサポートできます。
-
CI/CD操作
使用するツールに関係なく、これらのインスタンスは、デプロイプロセスで役立ちます。
-
分散データベース
Elastic searchまたはMongo DBは、データを失うことも、サービスに影響を与えることもなく、中断を処理できます。
-
オーケストレーションされた環境でのすべてのアプリケーション
スポットインスタンスにどのCSPを選べばいいでしょうか?
AWS | Azure | GCP | |
---|---|---|---|
商品名 | スポットインスタンス | スポットVM | プリエンプティブルVMインスタンス |
価格 | 可変 | 固定 | 固定 |
(需要に基づき、5分ごとに更新)スポット参照 | Azureretailprices APIを使用して価格検索が可能 | 詳細は、 VMインスタンスの料金 | |
サポートの制限 | AWSリージョンごとに20個のスポットインスタンスの制限 | サポートされないサイズ:Bシリーズ | プリエンプティブルインスタンスは、システムイベントによりいつでも停止されます(ゾーンや日により異なるさまざまな状況に依存します)。 |
制限は動的です。新しいアカウントの場合は20スポットインスタンスよりも低く、時間の経過とともに増加する可能性があります。 | あらゆるサイズのプロモバージョン(Dv2やNVプロモサイズなど) | ||
アカウントにより、特定のスポットインスタンスタイプに対する制限があります。 | サポートされないリージョン:Microsoft Azure China 21 Viane | プリエンプティブルインスタンスを通常のVMインスタンスに移行はできません。 | |
プリエンプション時間 | 2分 | 30秒 | 30秒 |
最大制限時間 | 無制限(追加容量による) | 無制限(追加容量による) | 24時間/インスタンスにより6時間(カウンターはリセット可能) |
スポットインスタンスを取得する前に行うこと
1.ワークロードを知る
スポットインスタンスの実装について、どの程度積極的に取り組みますか? スポットインスタンスビジネスする前に、そのアプリケーションがジョブを完了するのに必要な時間を知っておく必要があります。
中断をうまく処理できますか?時間切れ前に、ワークロードを別のインスタンスに移動させる自動化ツールは用意されていますか?
2.インスタンスを厳選します
次に、CSPの内容を吟味することです。その場合、人気がないインスタンスを選ぶことを検討してみてください。これらのインスタンスは、中断の可能性が低く、より長い時間安定して動作する可能性があります。
利用できるインスタンスに目を通すときは、中断の頻度を必ず確認してください。中断の頻度とは、直近1カ月間にインスタンスが容量を取り戻した割合のことです。
AWSのSpot Instance Advisorでは、<5%,5-10%,10-15%,15-20%,>20%という範囲で表示されます。
3.より重要なワークロードであってもスポットインスタンスを使用できます
たとえば、AWSのスポットインスタンスでは、ほんの少し支払うことで、最大6時間(時間単位で)中断がない時間保証を得ることができます。
あらかじめ設定された期間だけ稼働するスポットインスタンスは、オンデマンド価格と比較して最大で30~50%の割引を実現します。
4.価格を入札します
次に、スポットインスタンスに支払ってもよい最高価格を設定します。 スポットインスタンスは、マーケットプレイスの価格が入札額と一致するか、より低い場合にだけ実行されます。
ここでは、オンデマンド価格と等しい最大価格を使用することが鉄則です。
カスタム金額を設定して価格が上がると、中断されるリスクがあります。
5.スポットインスタンスをグループで管理します
スポットインスタンスのグループを使用する場合、複数のインスタンスタイプを同時にリクエストができます。同時にリクエストすることにより、条件が満たされる可能性が高まります。
また、スポットプール(同じタイプ、OS、アベイラビリティゾーン、ネットワークプラットフォームを持つインスタンスのグループ)ではなく、フリート全体に対して時間当たりの上限価格を設定できることも特長の1つです。
-
AWSスポットフリート
スポットインスタンスの大規模なフリートを、異なる割り当て戦略(たとえば、最低価格を考慮し、容量に最適化されたタイプだけ)で管理できます。
-
Azure VMスケールセット
この機能を使用すると、負荷分散されたVMのグループを作成し、その数を自動的に増減して管理ができます。
-
Googleマネージドインスタンスグループ
インスタンステンプレートでプリエンタブルオプションを指定すると、プリエンプトできるインスタンスをグループとしてまとめることができます。
しかし、スポットインスタンスのグループ管理を実現するためには、膨大な数の設定、セットアップ、メンテナンスの手作業を覚悟しなければなりません。
6.自動化に目を向けます
オートスケール方式でクラウドインフラを管理する自動化ツールを導入することで、インスタンス停止によるダウンタイムを回避できます。
自動化ツールを使用することで、スポットインスタンスで実行するワークロードの量を選択し、中断された場合は、自動的にオンデマンドインスタンスにフォールバックできます。
自動化の目的はワークロードが実行する場所を確保することです。AWS Rebalanceイベントのような機能を使用して自動化することで、割り込み通知を受け取る前でもリスクを軽減できます。
これらのインスタンスの管理に、基本レベルの自動化を追加すれば、いくつかの問題は解決できます。しかし、最良の結果を得るためには、予測分析に基づいて自動化されたアクションを実行するソリューションが必要です。
スポットインスタンスの自動化でできること
業務に最適なVMタイプの選択に関する記事で紹介したケーススタディを覚えていますか?
CAST AIによるコスト削減方法をテストするために、Googleから提供されているオープンソースのeコマースデモアプリを使いました。
まずアプリケーションを準備しました。
-
最大1,000人の同時ユーザーでアプリケーションの負荷テストをしました。
-
負荷に応じて、すべてのマイクロサービスのポッドをスケーリングしました(静的にスケーリングされたディプロイでAWS EKSを使用)。
-
メトリックを取得するために、30~60分間テストを実行しました。
-
次に、30日間のコストを推定しました(想定されるトラフィックの季節性を考慮しました)。
-
これを実現するために、Pythonスクリプトを使用して30日間の使用パターンを生成しました。この例では、毎日ほぼ同じ時間にスパイクが発生し、1週間のうちの数日はトラフィックが多くなりました。
このようにしてAWSテストインスタンスでデモアプリを実行するために、必要な毎月のコストを計算しました。
アプリケーションを実行に必要な最初の月額費用は691.20ドルでした。
その後CAST AIスポットインスタンスポリシーを適用して、アプリケーションがオンデマンド料金に比べてコストを節約できるようにしました。
使用中のすべてのインスタンスがスポットインスタンスである、最も積極的なポリシー設定を使用しました。
積極的なポリシー設定を使用することにより、合計コンピューティングコストは65.01ドルになり、最適化する前に比べ、コストを90%節約できました。
要約
スポットインスタンスは飼いならすことができる野獣です。ただし、価格のメリットを享受して本番環境で安全に使用するには、CAST AIのような自動化ソリューションを使用する必要があります。
EKS、GKE、またはAKSでKubernetesを実行していますか? どれだけ節約できるかを発見してみましょう。
無料の節約レポートを生成して、節約の可能性を確認してください。そのためには、クラスターをCAST AIに接続し、読み取り専用エージェントに設定を分析させる必要があります。レポートが生成されたら、推奨事項を手動で適用するか、CAST AIに作業を任せて、スポットインスタンスを利用してクラウド料金を削減し続けることができます。
CASTAIが、どのように動作するのか疑問がありますか?であれば、こちらをお読みください。AmazonEKSコストを15分で半分に削減する方法
FAQ
-
スポットインスタンスとは?
スポットインスタンスは、3つの主要なクラウドサービスプロバイダすべてが提供する仮想マシンインスタンスの1種です(Google Cloudであればプリエンプティブルインスタンスと呼ばれます)。
スポットインスタンスは、プロバイダーがオンデマンドインスタンスよりも低価格で提供する未使用のインスタンスです。たとえば、AWSスポットインスタンスはオンデマンドインスタンスよりも最大90%安く、大幅なコスト削減につながる可能性があります。
ただし、スポットインスタンスは30秒から2分間という短いプリエンプション通知の後、プロバイダーが別のインスタンスにワークロードを移動して再利用できます。
-
スポットインスタンスはどのように動作しますか?
スポットインスタンスは、その時点では誰にも使用されていないインスタンスです。最初に、スポットインスタンスの利用リクエストをします。このリクエストのときに、支払いできる最高額を設定します。支払いできる最高額がスポット料金を超えており、プロバイダーに空きリソースがある場合、スポットインスタンスが起動します。設定した最高料金がスポット料金よりも低い場合、インスタンスは起動しません。
ヒント:スポットインスタンスを獲得できる可能性を最大限にするには、オンデマンド価格と同じ最大価格を設定します。低い金額を設定してスポットインスタンスの価格が上がると、ワークロードが中断されるリスクがあります。
-
どのようなときに、スポットインスタンスを使用するべきですか?
一般に、ステートレスで耐障害性があり、スケールアウトできる(複数のレプリカを持つ)ワークロードは、スポットインスタンスの適切な候補です。現在、最新のアーキテクチャーで開発されたほとんどのサービスはステートレスです。
スポットインスタンスでうまく機能する傾向があるワークロードの例を次に示します。
- バッチ処理ジョブ
- コンテナーとマイクロサービス
- ハイパフォーマンスコンピューティング(HPC)と機械学習アプリケーション
- 使用するツールに関係なく、CI/CDオペレーション
- Elastic searchまたはMongo DBなどの分散データベース
- オーケストレーションされた環境のあらゆるアプリケーション
-
スポットインスタンスとリザーブドインスタンスの違いは何ですか?
リザーブドインスタンスは、クラウドコストの節約をめざす企業の間で、人気がある製品です。ただし、スポットインスタンスでは、3年間のリザーブドインスタンス契約よりも多くの費用を節約できます。Amazon EC2リザーブドインスタンスは、オンデマンド料金と比較して最大75%の割引を提供しますが、スポットインスタンスは請求額を最大90%削減できます。
リザーブドインスタンスは、「使わなければ、損をする」の原則に基づいて機能します。インスタンスがアイドル状態である1時間ごとに、経済的利益が失われます。
リザーブドインスタンスのもう1つの欠点は、コミットメントする必要があることです。リザーブドインスタンスでは、特定の種類のリソースを1年または3年間使用することに同意します。しかし、昨今のビジネスのニーズをどうすれば、予測できるのでしょうか? 途中で要件を変更すると、さらに多くのコストが発生します。一方、スポットインスタンスはいつでもオフにできます。
詳細については、この記事をお読みください。
-
スポットインスタンスはどのように課金されますか?
各インスタンス時間の開始時のスポット料金に応じて課金されます。インスタンスの価格が入札額を上回ったことが原因でAWSがスポットインスタンスを終了した場合は、その1時間分の使用料金は請求されません。
-
スポットインスタンスを取得するにはどうすればよいですか?
スポットインスタンスを開始するには、手動でスポットインスタンスのリクエストを作成するか、ワークロードが追加のリソースを必要とするときに、自動でインスタンスを起動してくれるマネージドサービスを使用します。スポットインスタンスリクエストが完了すると、スポットインスタンスが起動され利用可能になり、その価格が入札額と一致するかぎり実行されます。
-
スポットインスタンスはどのくらいの頻度で中断されますか?
スポットインスタンスは平均して約5%の時間しか中断されませんが、この比率はアベイラビリティーゾーンとインスタンスタイプにより大きく異なります。
利用できるインスタンスを調べるときに、中断の頻度をチェックするのは賢い方法です。前月にインスタンスがキャパシティを回復した(つまり中断した)頻度を、中断頻度と呼びます。
AWSを使用している場合は、AmazonのSpot Instance Advisorを見て、予想される中断の頻度を大まかに把握してください。頻度は<5%、5-10%、10-15%、15-20%、および>20%の範囲で表示されます。
-
スポットインスタンスには価値がありますか?
クラウドコストの最適化を検討している場合、スポットインスタンスは間違いなく、注目に値します。これらは、柔軟なワークロードまたはフォールトトレラントなワークロードでコストを節約し、既存のリソースにキャパシティを追加する素晴らしい方法を提供します。
彼は、ベストプラクティスを活用しながら、さまざまな種類のシステムのバックエンドとフロントエンドを実装した経験があります。
彼は、常に進化し続けるソフトウェア開発の世界に追いつくように努めています。営業時間外、彼はランニングに出かけ、マウンテンバイクに飛び乗って、ポッドキャストを聴き、新しいことを学びます。
タグ一覧