【问题标题】:aws describe_instances returns incorrect valuesaws describe_instances 返回不正确的值
【发布时间】:2015-03-06 07:25:40
【问题描述】:

我想要一个快速而肮脏的停止和启动实例,所以我写了下面的内容,它完全从 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

【问题讨论】:

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


    【解决方案1】:

    我怀疑您遇到了 EC2 API 的最终一致性问题。这在使用 Amazon EC2 时很常见。当你发出一个命令,比如#stop_instance#describe_instances调用会继续返回一个状态,比如运行一段时间,直到状态发生变化。这可能需要几分钟时间。

    【讨论】:

    • 看来,我认为可能是痴呆症。
    猜你喜欢
    • 2018-05-21
    • 2016-10-09
    • 2021-10-26
    • 2015-10-13
    • 2014-12-06
    • 2021-02-01
    • 2017-08-21
    • 2021-10-27
    • 2021-02-10
    相关资源
    最近更新 更多