3

fabric と boto を使用して、一時的な処理のために新しい ec2 ホストを起動していますが、いつホストに接続できるかを知るのに常に苦労していました。問題は、何かの準備が整ったときに ec2 に問い合わせることができますが、実際には準備ができていないことです。

これは、私が気づいた最も効果的なプロセスです (ただし、それでもうまくいきません)。

  1. ホストが「アクティブ」であると表示されるまで、ec2 をポーリングします。
  2. ec2 をポーリングします。public_dns_name
  3. 接続が受け入れられるまでループ内で新しいホストへの接続を試行します

しかし、私が関連付けた ssh キーペアを認識してからパスワードを要求する前に、接続を受け入れているように見えることがあります。

起動後に EC2 ホストへの接続をいつ開始できるかを決定するより良い方法はありますか? これを適切かつ効率的に行うライブラリを作成した人はいますか?

4

2 に答える 2

4

#1と#2についても同じことを行いますが、#3については、短いタイムアウトでsshポート(22)への単純なTCP接続を確立して再試行するコードループがあります。最終的に成功すると、さらに5秒間待機してから、sshコマンドを実行します。

sshdが開始され、公開sshキーが.ssh / authorized_keysに追加されるタイミングと順序は、実行しているAMIによって異なる場合があります。

注:DNS名の代わりにパブリックIPアドレスを直接使用することをお勧めします。IPアドレスはDNS名でエンコードされているため、プロセスにDNSルックアップを追加するメリットはありません。

于 2011-09-13T21:14:39.207 に答える
0

EC2 自体には、インスタンスが SSH 接続を受け入れる準備ができていることを知る方法がありません。それよりもはるかに低いレベルで動作します。

これを行う最善の方法は、AMI を更新して何らかのヘルス サーブレットを持たせることです。起動の後の段階で実行され、HTTP 要求に対してステータス コード 200 を返すだけの、非常に単純な (数行のweb.pyスクリプト) にすることができます。サーブレットがリクエストに応答するまでには、他のすべても稼働している必要があるため、その URL で指数バックオフを使用してインスタンスを確認できます。

インスタンスをロード バランサーの背後に配置した場合 (それには独自の利点があります)、このヘルス サーブレットはとにかく必要であり、何らかの理由でインスタンスがダウンしたときにロード バランサーに通知するという追加の利点があります。これは、EC2 での一般的なベスト プラクティスにすぎません。

于 2011-09-13T18:40:38.310 に答える