AWSスポット価格を自動的に確認する方法は?


15

私は、Jenkinsの仕事について、私たちがスピンアップするエージェントボックスの価格をチェックすることを考えていました。頻繁に価格が急騰し、新しいエージェントが来ないことに誰かが気付くまでに1、2時間かかるので、手動で行ってスポット価格を確認し、それに応じて調整するか、ゾーンを切り替えるなどする必要があります。

私の最初の本能は、最良のルートは1時間ごとのJenkinsジョブを実行し、aws ec2 describe-spot-instance-requests失敗したリクエストをチェックすることです(そして、失敗すると私たちをゆるめます)。しかし、成功した/失敗したリクエストを見るのではなく、実際にハード価格を比較する(したがって、何が何で、どれだけであるかを正確に伝えることができる)クリーンな方法があるのだろうかと思っています。

誰でも似たようなものをセットアップしましたか?どうだった?


1
合理的な質問だと思います...しかし、なぜインスタンスが実際にあなたに価値があるものだけに入札しないのですか?複数のインスタンスタイプを選択してください時々-これを書いているときも含めて-私はcc2.8xlargeを持っています。これは、4倍のコアと4倍のメモリを持っているにもかかわらず、必要なc3.2xlargeよりも現在安いので、システムにインスタンスを処理させるためです市場に基づいたタイプ選択とAZ配置?
マイケル-sqlbot

1
@ Michael-sqlbotプロセスのその部分で言うことはありません。監査目的で特定のサイズのインスタンスを購入することを記載したドキュメントがあります。理想的な状況を最大限に活用しようとしています。
アレックス

1
結構です、@ Alex。あなたがそれを考慮しなかった場合に備えて、私はそれを投げると思いました。
マイケル-sqlbot

@Alex興味深いことに、特定のインスタンスのサイズは請求書で簡単に確認できますか?あなたは(むしろ、彼ら!)タグを使用してから、コストエクスプローラーでそれらを見ることができるからです。
ティムマローン

回答:


15

これに役立つかもしれないオートスポッティングと呼ばれるオープンソースツールを見つけました:

既存のオンデマンドAutoScalingグループで有効にすると、より安く、少なくとも同じ大きさで、現在のオンデマンドインスタンスと同一に設定されたEC2スポットインスタンスを起動します。新しいインスタンスの準備が整うとすぐに、そのインスタンスがグループに追加され、オンデマンドインスタンスがグループから切り離されて終了します。

予定パイプラインにこれ​​があります。これを完了すると、コンテキストを追加できるようになります。

更新:

会議で最近デモされた別のツールはmapbox / spotswapでした

これは少し異なります。オンデマンドまたはリザーブドインスタンスのいずれかで通常のASGを監視し、規模が生じた場合は、別のASGで同様のコンピューティングレベルのインスタンスを入札およびプロビジョニングします。


2
Hashfyreサイトへようこそ:)
Dawny33

1
私はAutoSpottingの作者です。言及してくれてありがとう!まだ試してみましたか?私はユーザーからのフィードバックに耳を傾けています。
クリスティアンマヘルアン-スタンチュ

6

私は個人的にこのようなモデルを検討します:

Timed Lambdas -> Checks spot price -> Push to ElastiCache

次に、インスタンスが必要な場合:

Timed lambdas -> Pulls spot price from ElastiCache, sets it as environment variable on your Machine where you spin up IaC from -> This is parsed as argument to IaC code and pushes out the spot price

たとえば、ラムダ内でいくつかの許容値(重要度に基づいて10、25、50%増加)、およびオンデマンドのハードキャップを設定することもできます。また、処理するロジックを構築するのに最適な場所です。たとえば、最も安いAZを見つける、比較的安いスポット価格(2xt2.mediumvs t2.large)を見つけるなどです。


参考までに、削除された回答を編集し、フラグを立てて削除を依頼することもできます。(害はありません、それはただ有益です:))
Tensibai

1
永遠に間違った日々を過ごしていることを思い出させるために、私は辛抱強く頑張ります。
ヘンリー

Rofl、恥は本当にありません、心配しないでください:)
天柴iba

3
私の傷跡は私が
ヘンリー

クールなアイデア-また、ElastiCacheクラスターがまだ存在しない場合は、価格をDynamoDBテーブルにプッシュできることにも言及する価値があります;)。または、S3バケット内のJSONファイルでさえあります。
ティムマローン

4

これを行うためのツールに依存しない方法を紹介します。

頻繁に価格が急騰し、新しいエージェントが来ないことに誰かが気付くまでに1、2時間かかるので、手動でスポット価格を確認し、それに応じて調整するか、ゾーンを切り替えるなどする必要があります

構築中のインフラストラクチャでも同じ問題に直面しました。そのif-elseため、インスタンスのオンデマンド価格に応じて、入札価格を設定するスタイルブロックがありました。

AWSには、インスタンスのオンデマンド価格を取得するためのAPIがあります。このPythonラッパーを目的に使用しました。

我々は、オンデマンド価格を得た後ので、(のは言わせてX、私たちはプラグイン)if-elseされているスタイルブロック、0.4*X0.6*X0.8*XX、我々は上40%、60%、の範囲で入札価格の80%をしようとしている手段-デマンド価格。すべてが失敗した場合、オンデマンドインスタンスの作成に戻ります。

また、これはAWSの現在のスポット価格に依存しないため、オンデマンド価格を超える価格を支払うことはありません。

ただし、オンザフライで実行する方法を探している場合は、Hashfyreのソリューションが最適です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.