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

时间:2014-07-06 14:28:38

标签: ruby amazon-web-services amazon-ec2

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

创建它后机器的状态是“正在运行”,所以我怎么知道机器何时完成初始化并且我可以ssh到它?

我看到一个现有的代码,其中每隔X秒执行ssh一次,如果它的超时时间超过意味着机器仍在初始化。

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

2 个答案:

答案 0 :(得分:1)

创建实例后,您将获得实例ID。因此,请使用该实例ID检查“实例状态”。每个实例都必须经过2 status checks系统状态检查实例状态检查。

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

ruby​​ sdk中提取此数据的相应方法是 describe_instance_status

答案 1 :(得分:1)

我也在寻找类似的解决方案,我在AWS Ruby SDK上发现了一个测试:https://github.com/aws/aws-sdk-ruby/blob/master/samples/ec2/run_instance.rb

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

它可能不是最干净的解决方案,但它是亚马逊采用的解决方案。