46

私のクライアントは、VPS に AWS を使用しています。彼が問題を抱えていることの 1 つは、スポット インスタンスの入札が彼の入札を上回った場合、彼のインスタンスが終了することです。スポット インスタンスが永続的でないことを除けば、それほど大したことではないように思われるため、これが発生するたびにイメージから復元する必要があります。

彼が私に求めているのは、終了したインスタンスを X 時間ごとにチェックし、それらを自動的に再起動する何かを書くことです。さらに重要なことに、彼は「持続性」を装う何らかの方法を望んでいます。私が持っている最良のアイデアは、各サーバーからY時間ごとにイメージを作成し、そのイメージから起動することです(そのインスタンスが終了した場合)。

他のアイデアを聞いてうれしいです。私の質問は、私はここで正しい軌道に乗っているかということだと思います。また、すでに存在する可能性のあるこれに対する解決策を知っていますか?

更新:ほぼ 1 年後、私はここに戻ってきて、これらすべての素晴らしい反応と、私が予想していたよりもこのトピックへの注目を集めていることに気づきました。以下の回答の多くは、有益で役に立ちますが、私の推論に疑問を投げかけています. その時でさえ、これは賢明な考えではなく、物事をより良い方向に向けるための私の側の試みにもかかわらず、クライアントが要求したものであることに 100% 同意したことを述べたいと思います.

お世話になりました皆様、誠にありがとうございました。私は自分のやりたいことを正確に実行する方法を見つけ出し、終了したインスタンスを自動的に再起動するコードを書くことができました。決して簡単ではありませんでしたが、新しいクライアントに移るまでにはうまくいきました。

同じ問題を抱えている皆さんの幸運を祈ります。あなたは(私の場合のように、おそらく強制的に)簡単ではない何かに取り組んでいます。ここで何人かの人々が応答でほのめかしたように、特に永続性が提供されていないため、スポットリクエストは安価です. そうでなければ、「スポットリクエスト」市場の価格は大きく異なると思います。

それでも、それ可能です、私はそれをやりました、そしてそれは素晴らしい経験でした. 方法がない場合は、それを偽造する必要があります。あなたがしなければ、他の誰かがするでしょう。

更新 II:これは本質的に私が任されたものであることを皆さんに思い出してもらいたいのです。当時は多くの人がコンセプト全体を却下していましたが、私は多かれ少なかれ機能的な SaaS に行き着き、すべてのスポット インスタンスを簡単に管理および監視できるようになりました。インスタンス、個々のインスタンスのスケジュール時間 (開始する必要があるかどうか) など。

開発者の観点からすれば、それは洗練されていない要求であり、当時はそうしたくありませんでした。私は多くのことを学んだだけでなく、自分の能力と自分のコードに多くの自信を得ただけでなく、私の知る限り、非常に有用なソフトウェアを作成しました。クライアント (彼らがよく知らなかったために間違ったことを求めていたとしても)。

私は彼にそれをやめさせようとしましたが、彼は主張しました.彼はお金を払っていたので、私はそこに注意を向けました.

そんなばかげていたら、誰もお金を節約できなかっただろう.

ほら、私は今この投稿を読んで、少しうんざりしています。その時、私はもっと素朴でした。私は AWS のことをよく知っています。今ではコーディングもずっと上手になってます。当然のことです。

しかし、私は今でもこの問題を解決できたことを誇りに思っています。なぜなら、この問題を解決できない、またはすべきではないと私に言ったのは、間違いなく偉大なプログラマーであり、年配で、はるかに経験豊富な仲間だったからです。あなたは私に挑戦させてくれた人たちだったので、ありがとう!

収益化できるとしたら?そうすべきではないと確信していますか?

4

7 に答える 7

26

私たちは最終的に解決策を見つけました。これが私たちがしなければならなかったことです。同様のタイプのソリューションを探している人がこれを簡単に再作成できるように、これを段階的にリストします...

  1. 新しいスポット リクエスト インスタンスを作成します。次の手順でボリュームが取り残されるように、ルート デバイスの [削除時に削除] のチェックを外してください。アーキテクチャ (私たちは常に x86_64 を使用します) とインスタンスが使用しているカーネル ID (非常に重要です!) を書き留めておいてください。
  2. 次に、新しいインスタンスに SSH で接続し、ファイルなどを作成します。永続化の効果を直接確認できます。ファイルシステムにいくつかの変更を加えた後、先に進んで SSH 接続からログアウトし、インスタンスを終了します。
  3. 素晴らしい。次に、EC2 Web コンソールに移動し、終了したばかりのインスタンスに使用されていた新しいボリュームを見つけます。ボリュームを右クリックし、[イメージの作成] を選択します。ウィザードに従って、前にメモしたものと同じアーキテクチャとカーネル ID を選択してください。
  4. 次に、新しいイメージを使用してスポット リクエスト ウィザードを開始します。ウィザードに従って、「終了時に削除」のチェックを外してください。さらに、これは見落としがちな手順です。[Advanced Options] というタイトルの折りたたまれたセクションを展開し、正しいカーネル ID を再度設定してください。

上記の手順に従って T を実行すると、古いインスタンスが終了した時点と同じ時点で新しいインスタンスが作成されます。したがって、私たちはある種の永続性を達成しました。

于 2013-11-09T00:35:14.863 に答える
11

(元のアイデアのいくつかについて Ethan Barron に感謝します。これは、いくつかの修正と明確化を加えたバージョンです。)

[1]。新しいスポット インスタンスを作成します。ルート デバイスの「終了時に削除」を無効にします。アーキテクチャ (x86_64) とカーネル ID を書き留めます。

[2]。新しいインスタンスに SSH 接続し、ファイルを作成します。このファイルは、再起動後も保持される必要があります。インスタンスはまだ終了しないでください。

[3]。インスタンスの実行中にインスタンスのスナップショットを作成します (これにより、まれにファイル システムの不整合が発生する可能性があるため、ブート ボリュームへの書き込みを制限します)。そのスナップショットの名前に注意してください。

[4]。SSH 接続を終了し、インスタンスを終了します。

[5]。ステップ 3 で作成したスナップショットから AMI を作成します (AWS はボリュームからの AMIS の作成をサポートしていません。スナップショットである必要があります。残りのボリュームを使用している場合は、追加のステップがあります: そのスナップショットを作成します)。

[6]。ステップ 1 のアーキテクチャ、ステップ 1 のカーネル ID、ステップ 5 で作成した AMI に基づいて、新しいスポット インスタンスをリクエストします。

これはうまくいくはずです。

于 2014-03-08T04:48:35.093 に答える
10

更新: 時間が変更されました

EC2 スポット インスタンス リクエストは、スポット インスタンスの入札stopの代わりにterminate、またはスポット インスタンスの中断を引き起こすその他の容量関連のイベントに対して設定できるようになりました。

EC2 開発者ガイドの割り込み動作を参照してください。特定のクラスのインスタンスは、適切なエージェントがインストールされている場合、休止状態にすることもできます。

この新機能は、インスタンスが引き続き実行されることを保証するものではなく、以前の EBS ボリューム、プライベート IP、Elastic IP、およびインスタンス ID がすべてそのままで再起動されることのみを保証するものであることに注意してください。

以前の回答は次のとおりです。


スポットインスタンスは永続化できませんが、スポットリクエストは永続化できます。

永続的なスポット リクエスト: スポット入札リクエストを「永続的」に指定すると、入札リクエストをキャンセルするまで、インスタンスが終了した後 (ユーザーまたは Amazon EC2 によって) 自動的に再送信されるようになります。これにより、スポット料金が上限料金を下回るたびに、スポット インスタンスの起動を自動化できます。

http://aws.amazon.com/ec2/spot-instances/#4

これにより、価格が範囲内にあるときはいつでもマシンを実行し続けることができますが、残りの部分については、スポット インスタンスが何を行っているかを検討して、ディスクの永続化が進むべき道であると考えさせてください。「クラウド」と考えてください。「一時的」と考えてください。スポット インスタンスは、起動、作業のフェッチ、作業の実行、作業のコミットを行うエフェメラル マシンであることを意図しており、それらがなくなっても、作業はまだそこにあり、次のインスタンスが再びフェッチして完了し、コミットするのを待っています。それらを EBS で使用してボリュームを永続化することはできますが、その場合、それらのインスタンスを再起動することはできません (お気付きのように)。

AMI がインスタンス ストアを使用し、永続化する必要があるすべてのものを外部 (たとえば S3) に格納する場合、AWS アーキテクチャをハッキングする必要はなく、価格が下がったときにマシンが起動するのを座って見ることができます。正しい、彼らの仕事をして、価格が範囲外になると再びシャットダウンします. そして、すべてのブーツが光沢のあるクリーンなシステムであるため、少し腐敗することはありません.

または、インスタンスは、常にオンになっているマシンによってエクスポートされた NFS 共有をマウントできます。

またはこれ: https://serverfault.com/questions/448043/auto-attach-ebs-volume-to-a-new-spot-instance

于 2013-10-25T00:40:17.583 に答える
9

ubuntu を使用している場合、この問題の便利な解決策を見つけました。ubuntu ディストリビューションに含まれている「overlayroot」という機能を使用します。アイデアは、ルート ファイルシステムを読み取り専用に保ち、すべての変更を EBS でバックアップされたオーバーレイ ファイルシステムに書き込むことです。ルートは読み取り専用であるため、終了時に削除でき、すべての変更はオーバーレイ ファイルシステムに保存されます。

  1. 最初に、overlayroot を有効にするカスタム AMI を作成します。AWS コンソールを使用して、お気に入りの AMI を起動します。ログインして、次の行を /etc/overlayroot.local.conf に追加します。

    overlayroot=device:dev=/dev/xvdf,timeout=180,recurse=0

AWS を使用して、インスタンスからカスタム AMI を作成します "Instances->Actions->Image->Create Image"

次に、EBS ボリュームを作成してインスタンスにアタッチします。「ボリューム -> アクション -> ボリュームのアタッチ」を選択し、ボリュームを初期化します。

mkfs.ext4 /dev/xvdf

この最初のインスタンスは、カスタム AMI の作成とボリュームの初期化にのみ使用されたため、終了できます。イメージに含まれないように、カスタム イメージを作成するまで EBS ボリュームをアタッチしないでください。

スポット インスタンスを起動するたびに、次の手順に従う必要があります。

  1. カスタム インスタンスを起動します。必ずスポット価格を設定してください。
  2. インスタンスが起動したら、オーバーレイ ボリュームを /dev/sdf のインスタンスにアタッチします。
  3. インスタンスを再起動します。「インスタンス -> アクション -> インスタンスの状態 -> 再起動」。ログイン後、このようなものが表示されるはずです

    ubuntu@ip-10-178-74-83:~$ mount overlayroot on / type overlayfs (rw,discard) ... /dev/xvda1 on /media/root-ro type ext4 (ro,relatime,data=ordered) /dev/xvdf on /media/root-rw type ext4 (rw,relatime,data=ordered)

于 2015-12-10T05:16:36.730 に答える
3

スポット インスタンスの性質は一時的なものであるため、インスタンスを「永続的」にすることはできません。ただし、EBS を使用してデータを永続化することができます。

あなたのアイデアは画像に関しては良いものであり、正直に言うと他の方法があるかどうかはわかりません.

いつでもスポット インスタンスのドキュメントを確認したり、フォーラムにアクセスして、そこにいる AWS エンジニアにアイデアがあるかどうかを確認したりできます。

- 編集 -

追加コストが発生するため、これが機能するかどうかはわかりませんが、生成されたイメージからインスタンスをすぐに起動し、既存のインスタンスを終了することができます。特にデータ保持のために EBS ボリュームに依存していない場合は、持続性の錯覚を与えます。

于 2013-10-24T20:49:44.237 に答える
2

AWS は最近、新しいスポット インスタンス ダッシュボードを開始しました。これにより、インスタンスを永続的な状態に維持することが非常に簡単になります。これには、自動価格設定と地域サポートも含まれているため、理想的な価格の入札について心配する必要はありません. インスタンスが起動したら、インスタンスの AMI を作成します。それだけです。次回スポット インスタンスをリクエストするときは、[保存されたインスタンス] リストからそのインスタンスを選択するだけです。カーネルと EBS はそのまま復元されます。

于 2016-06-15T07:59:23.997 に答える