使用ruby创建ec2实例并连接到创建的机器

使用ruby创建ec2实例并连接到创建的机器,ruby,amazon-web-services,amazon-ec2,Ruby,Amazon Web Services,Amazon Ec2,使用instances.create创建实例后,我需要连接到计算机并执行一些操作。 问题是——知道创作已经完成,我可以连接到机器的最佳方式是什么 创建后的机器状态为“正在运行”,因此我如何知道机器何时完成初始化,以及我可以通过ssh连接到它 我看到一个现有的代码,它是通过每隔X秒ssh'ing完成的,如果它超时,则表示机器仍在初始化 我正在寻找一种更优雅的方式。创建实例后,您将获得实例ID。因此,使用该实例ID检查“实例状态”。每个实例必须进行2次状态检查:系统状态检查和实例状态检查。 我观察到

使用instances.create创建实例后,我需要连接到计算机并执行一些操作。 问题是——知道创作已经完成,我可以连接到机器的最佳方式是什么

创建后的机器状态为“正在运行”,因此我如何知道机器何时完成初始化,以及我可以通过ssh连接到它

我看到一个现有的代码,它是通过每隔X秒ssh'ing完成的,如果它超时,则表示机器仍在初始化


我正在寻找一种更优雅的方式。

创建实例后,您将获得实例ID。因此,使用该实例ID检查“实例状态”。每个实例必须进行2次
状态检查
系统状态检查实例状态检查。

我观察到,一旦这两个检查都通过,实例就可以登录了


ruby sdk中提取此数据的对应方法是

我也在寻找类似的解决方案,我在AWS ruby sdk上发现了一个测试,它可以做到这一点:


这可能不是最干净的解决方案,但它是Amazon采用的解决方案。

问题是,即使计算机状态为“正在运行”,状态检查仍处于“初始化”状态,实例很快将处于“正在运行”状态,但实例/状态检查需要一些时间才能完成。是的。这就是我的结论:)
begin
  Net::SSH.start(instance.ip_address, "ec2-user",
                 :key_data => [key_pair.private_key]) do |ssh|
  puts "Running 'uname -a' on the instance yields:"
  puts ssh.exec!("uname -a")
end
rescue SystemCallError, Timeout::Error => e
  # port 22 might not be available immediately after the instance finished
  launching
  sleep 1
  retry
end