2015-03-05 2 views
1

Я хотел быстро и грязно остановиться и запустить экземпляры, поэтому я написал ниже, который полностью получает ответы bizzare из описания_информации и показывает, что мой экземпляр работает, когда он фактически остановлен и не останавливается или начать что-нибудь.aws describe_instances возвращает неверные значения

Кто-нибудь получил указатель на мою очевидную ошибку?

#!/bin/ruby 

require 'rubygems' 
require 'bundler/setup' 
require 'aws-sdk' 
require 'uuid' 
require 'pp' 


class InstanceManager 
    def listInstances() 
    ec2 = Aws::EC2::Client.new(region: "eu-west-1") 
    resp = ec2.describe_instances() 
    resp.reservations.each do |res| 
    res.instances.each do |inst| 
     iid = inst[:instance_id] 
     istate = inst[:state].name 
     puts "#{iid} #{istate}" 
    end 
    end 
    end 
    def stop(iid) 
    ec2 = Aws::EC2::Client.new(region: "eu-west-1") 
    inst = ec2.describe_instances(instance_ids: [iid]).reservations[0].instances[0] 
    if (inst[:state].name == "running") 
     puts "stopping #{iid}" 
     res=ec2.stop_instances(dry_run: false, instance_ids: [iid],force: true) 
     pp res 
    else 
     puts "#{iid} already stopped" 
    end 
    pp inst 
    end 
    def start(iid) 
    ec2 = Aws::EC2::Client.new(region: "eu-west-1") 
    inst = ec2.describe_instances(instance_ids: [iid]).reservations[0].instances[0] 
    if (inst[:state].name == "stopped") 
     pp inst 
     puts "starting #{iid}" 
     res=ec2.start_instances(dry_run: false, instance_ids: [iid],force: true) 
     pp res 
    else 
     puts "#{iid} already started" 
    end 
    pp inst 
    end 
end 

if __FILE__ ==$0 
    z = InstanceManager.new 
    z.listInstances() 
# z.stop("i-e122b106") 
    z.start("i-e122b106") 
end 

ответ

1

Я подозреваю, что вы столкнулись с возможными проблемами согласованности с EC2 API. Это очень часто встречается при работе с Amazon EC2. Когда вы выдаете команду, например #stop_instance, вызов #describe_instances будет продолжать возвращать такой статус, как запуск в течение определенного периода времени до изменения состояния. Это может занять несколько минут.

+0

Так казалось, я думал, что это может быть деменция. –