Amazon ec2 告知新ec2主机何时可以连接到的过程

Amazon ec2 告知新ec2主机何时可以连接到的过程,amazon-ec2,fabric,boto,Amazon Ec2,Fabric,Boto,我一直在使用fabric和boto来启动新的ec2主机进行一些临时处理,但我总是很难知道何时可以连接到主机。问题是我可以问ec2什么时候东西准备好了,但它从来没有真正准备好 这是我注意到的最有效的过程(尽管它仍然很糟糕): 轮询ec2,直到它表示主机处于“活动”状态 轮询ec2,直到它有一个public\u dns\u名称 尝试在循环中连接到新主机,直到它接受连接 但有时它似乎在知道与之关联的ssh密钥对之前就接受了连接,然后要求输入密码 在ec2主机启动后,是否有更好的方法来决定何时可以开始连

我一直在使用fabric和boto来启动新的ec2主机进行一些临时处理,但我总是很难知道何时可以连接到主机。问题是我可以问ec2什么时候东西准备好了,但它从来没有真正准备好

这是我注意到的最有效的过程(尽管它仍然很糟糕):

  • 轮询ec2,直到它表示主机处于“活动”状态
  • 轮询ec2,直到它有一个
    public\u dns\u名称
  • 尝试在循环中连接到新主机,直到它接受连接
  • 但有时它似乎在知道与之关联的ssh密钥对之前就接受了连接,然后要求输入密码


    在ec2主机启动后,是否有更好的方法来决定何时可以开始连接到它们?是否有人编写了一个库,可以很好地、高效地实现这一点?

    EC2本身无法知道您的实例何时准备好接受SSH连接;它的运行水平比这低得多

    最好的方法是更新您的AMI,使其具有某种健康servlet。它可以非常简单——只有几行脚本——在启动的后期运行,只向任何HTTP请求返回状态代码200。当servlet响应请求时,其他的一切都应该准备好了,这样您就可以使用该URL上的指数回退来检查您的实例

    如果您曾经将实例放在负载平衡器后面(它有自己的优点),那么无论如何都需要这个健康servlet,它还有一个额外的优点,即在实例因任何原因发生故障时通知负载平衡器。这只是EC2上的一般最佳实践。

    我对#1和#2做了相同的操作,但对于#3,我有一个代码循环,尝试在短时间内建立到ssh端口(22)的简单TCP连接并重试。当它最终成功时,它再等待五秒钟,然后运行ssh命令

    sshd启动和添加公共ssh密钥的时间和顺序。ssh/authorized_密钥可能因您运行的AMI而异

    注意:我温和地建议直接使用公共IP地址而不是DNS名称。IP地址编码在DNS名称中,因此在进程中添加DNS查找没有任何好处