如何检查实例状态使用" aws-sdk"在红宝石?

时间:2015-05-19 12:02:57

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

我在EC2客户端上使用run_instances方法创建了一个实例。 我想检查实例是否正在运行。 一种方法是使用describe_instances方法并解析响应对象。 我想定期检查实例状态,直到实例状态为:running。谁知道怎么做? 有没有更简单的方法而不是解析响应对象? (我无法使用fog gem,因为它不允许我在VPC中创建实例)

3 个答案:

答案 0 :(得分:3)

v2 aws-sdk宝石附有服务员。这些允许您安全地轮询资源以进入所需状态。他们有明智的限制,并会在一段时间内提出服务员失败的错误后停止等待。您可以使用v2 SDK的资源接口或使用客户端界面执行此操作:

# resources
ec2 = Aws::EC2::Resource.new
ec2.instance(id).wait_until_running

# client
ec2 = Aws::EC2::Client.new
ec2.wait_until(:instance_running, instance_ids:[id])

答案 1 :(得分:1)

wait_until方法肯定比检查自己的状态要好。

但是,如果你想看到实例状态:

#!/usr/bin/env ruby

require 'aws-sdk'

Aws.config.update({
  region: 'us-east-1',
  credentials: Aws::Credentials.new(ENV['AWS_ACCESS_KEY'], ENV['AWS_SECRET_KEY'])
})

ec2 = Aws::EC2::Client.new

instance_id = 'i-xxxxxxxx'

puts ec2.describe_instance_status({instance_ids: [instance_id]}).instance_statuses[0].instance_state.name

答案 2 :(得分:-1)

这是开始的事情:

i = ec2.instances[instance_id]
i.status
while i.status != :running
 sleep 5
end