ITのチカラで、デジタルビジネスへの変革を。

[Spotinst] EC2 スポットインスタンスの運用をラクにする ~Spotinst 5つの特徴~

#AWS #Elastigroup #Ocean #Spotinst

はじめに

今回はEC2スポットインスタンスの運用において、Spotinstを使うことでどのようなメリットがあるかを解説していきたいと思います。

 

EC2 スポットインスタンスの課題

    低価格オンデマンドと同様に利用できる、と非常に魅力的なEC2の購入オプション “スポットインスタンス” ですが、利用に踏み込みにくい理由として下記の課題があります。

    • キャパシティ変動による仮想マシンの停止

    スポットインスタンスは、他購入オプション(リザーブドインスタンス/オンデマンドインスタンス)の余剰キャパシティを用いて販売されていますので、リザーブドやオンデマンドの利用率が上がり、Spot用のキャパシティがなくなると、仮想マシンが強制的に停止されてしまいます。

    課題に対する一般的な対応策

    「仮想マシンの停止」といったクリティカルな課題に対して、一般的には下記の対応が推奨されています。

    • “中断警告”をトリガーとしたリカバリーツールによる対応

    スポットインスタンスでは、キャパシティ変動による停止2分前に“中断警告” 通知をインスタンスメタデータCloudWatch Eventsで受け取ることが可能です。

    これらの通知をトリガーに、Lambdaなどを用いて仮想マシンを新たに起動する、あるいはバックアップスクリプトを実行する…など、自作のリカバリーツールによってスポットインスタンスの停止に対応することができます。

    しかし、リカバリーツール自体は自身で作成する必要があり、その管理や運用もユーザ自身で行う必要があります。

    また、Kuberenetesなどのコンテナオーケストレーション環境でスポットインスタンスを利用するに際には、オーケストレーションツールからVMを登録解除するための作り込みが必要だったり、コンテナのDrainingを中断警告後の2分以内で行う必要があったりなど、管理や運用に一手間かかる現状があります。

    こうしたスポットインスタンス運用の課題に対して、可用性を保ちながら、かつ運用負担を増加させることなく、そしてコストメリットを活かしたまま、スポットインスタンスを活用できるツールがSpotinstです。

    Spotinstの利用メリット

    ①. スポット停止の予測 & 自動リカバリ

    Spotinstは、スポットインスタンスの停止を事前に予測し、VMを新たに起動する機能を持っています。

    具体的な挙動は下記の通りです。

    1. 過去のスポット中断パターンリアルタイムのスポットマーケット分析に基づき、Spotinstが不安定なスポットマーケットを検出
    2. 他のスポットマーケットが利用可能であれば、新しい仮想マシンを最も安価なスポットマーケットで起動する
    3. 新しい仮想マシンの起動後、古い仮想マシンは削除される
    4. 他のスポットマーケットが利用できない場合は、オンデマンドインスタンスを起動する

    Spotinstでは”中断警告”ではなく、独自のアルゴリズムでスポットマーケットの変動を予測し、中断を検知しているため、スポット停止の15分前にはリプレイスを実行することができます。

    上記機能を提供するのは、Spotinst内のサービス “Elastigroup”です。Auto Scaling Group同様、インスタンスのクラスタリングと宣言的な管理を行う機能です。
    詳細は、下記Blogを参照ください。

    参照: インスタンスの利用料金を削減するサービス『Elastigroup』とは?

    ②. SaaSベースでのサービス提供

        Spotinstの機能はすべてSaaSベースでマネージドサービスとして提供されるため、ユーザ側でツールの作り込みやツールそのものの運用・管理は必要ありません。

        Spotinstと既存環境の連携は、簡単な手順で始めることができます。
        例えば、Auto Scaling Groupでクラスタリングしている既存環境をElastigroupに移行する場合、GUIコンソール上で数クリックで移行することが可能です。AWS API経由でASGの起動設定などを取り込むため、非常にスムーズな移行を実現しています。

        またCloudFormation、Terraformなどの構成管理ツール用にyaml&jsonベースで設定をSpotinst側で自動生成してくれるため、自身で書き直す必要もありません。詳細は下記Blogを参照ください。

        参照URL: ASGからElastigroupへ移行して料金削減!

        ③. 利用料は割引金額の20% (レベニューシェア)

        Spotinstの課金体系は、レベニューシェアモデルとなり、Spotinstにより実現した割引額の20%を徴収する形となります。

        オンデマンド利用時の金額とスポット利用時の金額との差分=割引額として、同割引額の20%が利用料となります。

        利用料金の算出イメージは下記表の通りです。

        オンデマンド利用料 ※1 $10,000
        スポット利用料 $2,500
        割引額 $7,500
        Spotinst 利用料金 $1,500

        ※1…オンデマンド利用料金はAmazon EC2 オンデマンドインスタンスの公開コストをもとに算出されます。

        ④. コンテナ環境でのスポット活用機能

        Spotinstでは、AWSのECSEKS、あるいはスクラッチで構築したAWS上のKubernetes環境など、各種コンテナオーケストレーションツールとの連携が可能です。

        ①で説明したスポット停止予測アルゴリズムをもとに、Spotinstとコンテナオーケストレーター側が連携することで、下記の制御を自動で行います

        • スポット停止予測アルゴリズムに基づき、コンテナオーケストレータークラスタ内の仮想マシンを自動リプレイス
        • この際、コンテナオーケストレーターに仮想マシンの登録解除新規登録を伝達
        • 停止対象仮想マシン上コンテナのDrainingを実施

        前述の通り、スポット停止予測はインスタンス停止の15分前に行われるため、余裕を持ったコンテナのDrainingが可能です。

        その他にもSpotinstでは、コンテナ環境に最適化した下記の機能が利用可能です。

        • コンテナのリソース要件に応じたクラスタ内仮想マシンの自動サイジング
        • クラスタ単位で必要なリソースを明示的に指定し仮想マシンを最適配置
        • コンテナのスケールに応じた、仮想マシンのオートスケール/サイジング
        • 余剰仮想マシンへのコンテナ最適配置でクラスタ内リソースの最適化

        上記機能は、ElastigroupやKuberenetes連携特化のSpotinst内サービス”Ocean”で利用可能です。

        Oceanについては、下記Blogを参照ください。

         参照: Kubernetesの基盤運用を自動化するサービス『ocean』とは?

        ⑤. ステートフルアプリケーション対応

        一般的にEC2 スポットインスタンスでは、急な停止に備えるため、ステートレスなアプリケーション環境での利用が推奨されており、データベースやストリーム処理などが行われるステートフルなアプリケーションでの利用は推奨されていません。

        こうした現状に対して、Spotinstでは、ステートフルアプリケーションでもスポットインスタンスを活用できるよう、いくつかのオプション機能を持っています。

        • Auto AMI Backup
        • Private IPの引継ぎ
        • Root VolumeのSnapshot取得 & リプレイス機能
        • Data VolumeのSnapshot & リプレイス機能

        AMIのバックアップを定期取得する機能や、仮想マシンのリプレイス前後で同一のPrivate IP Addressを保持する機能、Root Volume、Data Volumeの細やかなSnapshot取得により、リプレイス時に最新のボリュームを引き継ぐ機能など、Spotによる中断地点からデータを引き継いでアプリケーションを開始するための支援機能を持ちます。

        さいごに

        EC2スポットインスタンスの運用において、Spotinstを使うことでどのようなメリットがあるかについて説明しました。

        Spotinstについて、TrialやDemoにご興味のある方はぜひ下記フォームよりお問い合わせください!

        お問い合わせフォーム

        Mafuyu Miyano

        この記事を書いた人

        Mafuyu Miyano