Amazon Web Services ブログ

EC2スポットインスタンスのコストと運用を深掘りする

この記事は、フレキシブルコンピュート担当シニアスペシャリスト SA の Sudhi Bhatが2022年8月26日に投稿した「Diving Deep into EC2 Spot Instance Cost and Operational Practices」を翻訳したものです。

Amazon EC2 スポットインスタンスは、AWS で実行されるワークロードのコスト最適化を検討しているお客様に人気の選択肢の1つです。スポットインスタンスではAWS クラウド内で使用されていない Amazon Elastic Compute Cloud (Amazon EC2) のキャパシティを活用でき、オンデマンド EC2 インスタンス料金と比較して最大 90% 割引された料金で利用できます。オンデマンドインスタンスとスポットインスタンスの主な違いは、Amazon EC2で再びキャパシティが必要になった際、2 分前の通知のあと、スポットインスタンスがEC2 によって中断される可能性があることです。スポットインスタンスは、ビッグデータ、コンテナ化されたワークロード、継続的インテグレーション/継続的デリバリー (CI/CD)、ウェブサーバ、ハイパフォーマンスコンピューティング (HPC)、テストおよび開発ワークロードなど、ステートレスであったり耐障害性が高かったりする、さまざまな柔軟なアプリケーションでの活用を推奨しています。

お客様はさまざまなサービスの使用状況を追跡して最適化するための迅速で簡単な方法を求めていらっしゃると思います。この記事では、スポットインスタンスを使用するワークロードの用途と動作について有益な発見を提供するツールとテクニックに加え、それらのテクニックをトラブルシューティングやコスト追跡の目的でどのように活用できるかに焦点をあてたいと思います。

運用ツール

インスタンス選択

スポットインスタンスのベストプラクティスの1つは、インスタンスタイプ、リージョン、アベイラビリティーゾーンの選択に柔軟性を持たせることです。これにより、希望するキャパシティをEC2スポットが選択して割り当てる際のコンピューティングプールの範囲が広がります。AWS では、インスタンス要件を vCPU、メモリ、ストレージなどの属性のセットとして表現できる属性ベースのインスタンスタイプ選択などの機能により、Auto Scaling グループEC2 フリートでのインスタンス選択の幅をより容易に広げることができます。また、これらの属性の要件は一致するインスタンスタイプに自動的に変換されます。

次に考えるのは、25 以上のリージョンと 80 以上のアベイラビリティーゾーンから構成されるAWSクラウドにおいて、スポットインスタンスを起動することなくスポットキャパシティの要件を満たす最適なロケーション (リージョンまたはアベイラビリティーゾーン) を見つけるためにはどうしたらよいか、ということです。これはAWS のお客様が複数のリージョンまたはアベイラビリティーゾーンにわたってワークロードを柔軟に実行可能な場合に特に当てはまります。Amazon EC2 スポットプレースメントスコアがこの便利な機能を提供しています。スポットプレースメントスコアは、リクエストされたインスタンスタイプ、ターゲットキャパシティ、過去および現在のスポットインスタンス使用傾向、リクエストの時間などの要因に基づいて、1 ~ 10でスコア付けされたリージョンまたはアベイラビリティーゾーンの一覧を提供します。スコアはスポットキャパシティリクエストが成功する可能性を表しており、10はリクエスト成功の可能性が高いことを意味します。

お客様のワークロードに合ったインスタンスを選択し利用したい場合は、引き続きスポットインスタンスアドバイザーも参照することを推奨します。スポットプレイスメントスコアで直近の起動のしやすさを判断し、またスポットインスタンスアドバイザーで過去 30 日間の履歴データに基づいた中期にわたる相対的な割引や関連する中断頻度を把握することができます。ただし、過去の中断頻度はこれらのインスタンスが将来利用可能かどうかを予測するためのものではないことに注意が必要です。したがって、インスタンスの中断の頻度が高いかどうかにかかわらず、多様なできるだけ多くのインスタンスを活用するようにしてください。

スポットインスタンスの料金設定履歴

特定の Amazon EC2 スポットインスタンスの料金設定履歴を理解することは、インスタンスを選択する際に役立ちます。ただし、こうした料金変動の追跡は単純ではない場合があります。2017年11月以降、AWS はスポットインスタンスの購入をシンプルにする新しい料金モデルを開始しました。スポットインスタンスの料金はスポットインスタンスのキャパシティにおける需要と供給の長期的な傾向に基づいて決定されるようになったため、新しいモデルでは数日から数週間かけて緩やかに調整される予測可能な料金がAWSのお客様に提供されます。現在のスポットインスタンスの料金は AWS のウェブサイトで確認でき、スポットインスタンスの料金設定履歴は Amazon EC2 コンソールで確認するか、AWS コマンドラインインターフェイス (AWS CLI) からアクセスできます。お客様は、スポット料金がどのように変化したかを確認するためにインスタンスタイプ、オペレーティングシステム、アベイラビリティーゾーンでフィルタリングしながら、過去90日間のスポット料金設定履歴にアクセスできます。

スポット料金設定履歴へは、AWS CLIのdescribe-spot-price-history または、Get-EC2SpotPriceHistory (AWS Tools for Windows PowerShell) を使用してアクセスします。

aws ec2 describe-spot-price-history --start-time 2022-12-16T09:00:00 --end-time 2022-12-16T10:00:00 --instance-types c5.2xlarge --availability-zone ap-northeast-1a --region ap-northeast-1 --product-description "Linux/UNIX (Amazon VPC)"
{
        "SpotPriceHistory": [
                {
                        "AvailabilityZone": "ap-northeast-1a",
                        "InstanceType": "c5.2xlarge",
                        "ProductDescription": "Linux/UNIX",
                        "SpotPrice": "0.134900",
                        "Timestamp": "2022-12-16T07:29:02+00:00"
                }
        ]
}

スポットインスタンスデータフィード

EC2では、お使いのアカウントにおけるスポットインスタンスの使用状況と料金をサブスクライブ可能なデータフィードにより提供しています。この機能を用いると、データフィードは Amazon Simple Storage Service (Amazon S3) バケットに1時間ごとに送信されます。スポットインスタンスデータフィードのセットアップと S3 バケットオプションの設定の詳細については、こちらのドキュメントをご覧ください。なお、サンプルデータフィードは次のようになります。

上記のスポットインスタンスのデータフィードデータの例は、使用中のスポットインスタンスについての詳細を示しています。例えば、Timestamp で指定された時点でm4.large インスタンスが使用され、MyBidIDのsir-11wsgc6kはこのインスタンスのスポットリクエストのIDであり、Chargeの0.045 USD はオンデマンド料金に設定された MyMaxPrice との比較した割引料金を示しています。特定のインスタンスが終了した場合でもスポットインスタンスに関する情報を参照できるため、この情報はトラブルシューティング時に役立ちます。さらに、Amazon Athena を使用して、簡単なクエリや可視化、分析の目的でこのデータを使用することもできます。

Amazon EC2 スポットインスタンス中断ダッシュボード

スポットインスタンスの中断は、スポットインスタンスのライフサイクルに固有のステータスです。たとえば、スポットインスタンスを起動することのできるEC2サービスの持つ空きキャパシティの状況が悪い場合、スポットインスタンスが中断される可能性は常にあります。そのため、アプリケーションがスポットインスタンスの中断に備えた作りになっていることを確認する必要があります。

英語版のみとなりますが「Best practices for handling EC2 Spot Instance interruptions」というブログで紹介されているように、スポットインスタンスにおける中断の処理に関して、いくつかのベストプラクティスがあります。スポットインスタンスの中断を追跡することは、特定のインスタンスタイプの中断に対する許容度についてお客様のワークロードを評価したり、テスト環境の中断頻度を詳しく調べてインスタンス選択を微調整したりする場合など、いくつかのシナリオで役立つ場合があります。このようなシナリオではEC2 Spot Interruption Dashboardを利用することができます。このダッシュボードはスポットインスタンスの中断を記録するためのオープンソースのサンプルリファレンスソリューションです。ただ、このようにして中断をトラッキングして集めたデータはあくまでもサンプリングされたものであり、スポットインスタンス中断に対するEC2スポットサービス全体の体験そのものを表現しているわけではないことに注意してください。したがって、このソリューションはスポットインスタンスの中断によって特定の結果が通知されるような状況に使用することをおすすめします。具体的には、本番環境でスポットインスタンスをどのように使用するかについての知見を得るために、このソリューションを開発/テスト環境で使用することをおすすめします。

コスト管理ツール

AWS 料金見積りツール

AWS 料金見積りツールは、EC2やスポットインスタンスを含む AWS サービスで実行するワークロードの料金見積りができる無料のツールです。このツールでコンピュートインスタンスのコストを計算し、将来のコストを見積もることが可能です。これにより、お客様はスポットインスタンスを起動する前に、スポットインスタンスによるコスト削減を比較することができます。AWS 料金見積りツールの詳細見積りパスはAmazon EC2インスタンスの6つの料金戦略があり、料金モデルにはオンデマンド、リザーブド、Savings Plans、スポットインスタンスが含まれます。生成された見積りをCSV または PDF ファイル形式にエクスポートして共有したり、提案されたアーキテクチャの料金をさらに分析したりすることもできます。

スポットインスタンスの場合、見積りツールには選択したインスタンスの過去の平均割引率が表示され、予測を作成するための割引率を入力できます。ワークロードを実行し概算の見積りを作成するために、コンピュート、メモリ、ネットワークの要件を最もよく満たすインスタンスタイプを選択することをおすすめします。ただし、起動のしやすさといった観点から多様な複数のインスタンスタイプを活用することが極めて重要であることを忘れないでください。

AWS コスト管理

AWS が提供する人気のレポートツールの1つが AWS Cost Explorer です。Cost Explorerはスポットインスタンスを含むAWS のコストと使用量の時系列変化を可視化し、管理可能な、使いやすいインターフェイスを提供します。過去12ヶ月までのデータを表示し、今後3ヶ月の料金を予測できます。Cost Explorerの「購入オプション」でフィルタリングすると、スポットインスタンスに費やした料金のパターンを時系列で確認したり、料金のトレンドを確認したりできます。さらに、データの時間範囲を指定し、時間データを日ごとまたは月ごとに表示できます。さらに、Amazon EC2 Instance Usage and Reserved Instance Utilization Reports(英語版のみ)を活用して、全体的な EC2利用を最適化するために必要な情報とともに、インスタンスの使用状況とパターンに関する発見を得ることができます。

AWS Billing and Cost Management では、コスト配分タグを活用してリソースコストをコスト配分レポートにコスト配分タグごとに整理できます。これにより、各請求期間のすべての AWS コストを含むコスト配分レポートを使用して、AWSコストの分類と追跡が可能です。レポートにはタグ付けされたリソースとタグ付けされていないリソースの両方が含まれ、タグによりリソースの料金を明確に整理できます。たとえば、スポットインスタンス上にデプロイされたアプリケーション名でリソースにタグを付けることで、それらのリソースで実行されるそのアプリケーションの総コストを追跡できます。タグ「createdBy」はAWS が定義するタグで、サポートされている AWS リソースにコスト配分の目的で適用されます。このタグは RequestSpotInstances API が呼び出されるたびに「スポットインスタンスリクエスト」リソースタイプに適用されます。これにより請求レポートでスポットインスタンスの作成アクティビティを追跡することができます。

コストと使用状況レポート

AWS のお客様は、AWS のコストと使用状況 (AWS CUR) レポートを通じて、コストと使用状況の生データにアクセスできます。これらのレポートには、AWS の使用状況とコストに関する包括的な情報が含まれています。財務チームは、毎月、四半期、年ごとの AWS 支出の概要を把握するために、このようなデータを通常必要とします。しかし、このデータは、どのリソースの料金が多いか、システムのどの部分を最適化すべきかを理解するために、リソースレベルの詳細を必要とする技術チームにとっても同様に価値があります。業務要件に応じてスポットインスタンスを起動した場合、その利用状況はCURではpricing_termといったpricing_から始まる列、product_availability_zoneやproduct_marketoptionといったproduct_から始まる列に記載されるようになります。AWS CUR のこのデータを通じてスポットインスタンスを使用して過去に達成した削減額を計算できます。なお、この機能は 2021年7月に有効となったため、AWS CURのスポットインスタンス利用のデータはそれ以降のみ利用可能であることに注意してください。コスト管理と最適化の基盤を作ることに役立つCloud Intelligence Dashboardは、AWS の使用状況とコストを詳細に把握するための可視化機能を提供します。Cloud Intelligence Dashboardのデプロイの詳細については、英語のみのブログとなりますが、「Visualize and gain insights into your AWS cost and usage with Cloud Intelligence Dashboards and CUDOS using Amazon QuickSight」を参照してください。

まとめ

お客様のワークロードに適したAmazon EC2 スポットインスタンスを使用する際は、常にEC2 スポットを利用するうえでのベストプラクティスに従うことをおすすめします。この記事では、スポットインスタンスを使用しているワークロードについてさらに深い洞察を得るためのガイドとなるいくつかのツールとテクニックについてご説明しました。これはコスト削減の理解を深め、また、スポットインスタンスのトラブルシューティングにも役立つはずです。

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