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