class AWS::EC2::InstanceCollection


# => { “i-12345678” => :running, “i-87654321” => :shutting_down }
ec2.instances.inject({}) { |m, i| m = i.status; m }
To get a map of instance IDs to instance status:
i.exists?
i = ec2.instances[“i-12345678”]

To get an instance by ID:
ec2.instances.create(:image_id => “ami-1b814f72”)
To run an instance:
{EC2#instances}.
should get an instance of this class by calling
Represents a collection of EC2 instances. Typically you

def [] id

Returns:
  • (Instance) - Returns an object representing the EC2 instance
def [] id
  super
end

def count_options options

def count_options options
  min = max = 1
  count = options[:count]
  case count
  when Range
    min = count.begin
    max = (count.exclude_end? ? count.end - 1 : count.end)
  when Integer
    min = max = count
  end
  { :min_count => min, :max_count => max }
end

def create options = {}

Returns:
  • (Instance or Array) - If a single instance is being created,

Options Hash: (**options)
  • :ebs_optimized (Boolean) -- EBS-Optimized instances
  • :dedicated_tenancy (Boolean) -- Instances
  • :private_ip_address (String) -- If you're using VPC,
  • :subnet (Subnet, String) -- The VPC Subnet (or
  • :instance_initiated_shutdown_behavior (String) --
  • :disable_api_termination (Boolean) -- Specifies
  • :ramdisk_id (String) -- The ID of the RAM disk to
  • :kernel_id (String) -- The ID of the kernel with
  • :instance_type (String) -- The type of instance to
  • :user_data (String) -- Arbitrary user data. You
  • :security_group_ids (Array) -- Security groups
  • :security_groups (Array) -- Security groups are used
  • :key_pair (KeyPair) -- A {KeyPair} that should
  • :key_name (String) -- The name of the key pair to
  • :image_id (String) -- ID of the AMI you want to
  • :availability_zone (String) -- Specifies the
  • :monitoring_enabled (Boolean) -- Setting this to
  • :block_device_mappings (Array) -- Specifies how block
  • :iam_instance_profile (String) -- The name or
  • :count (Integer) -- How many instances to request. By

Parameters:
  • options (Hash) -- Options for new instance. `:image_id` is

Other tags:
    Example: Launching in an Amazon VPC subnet -
    Example: Specifying block device mappings -
    Example: Running multiple instances with the same parameters -
    Example: Running a single instance -
def create options = {}
  if profile = options.delete(:iam_instance_profile)
    profile = case profile
    when /^arn:aws:iam::/ then { :arn => profile }
    when String then { :name => profile }
    when Hash then profile
    else
      msg = "expected a name or ARN string for :iam_instance_profile"
    end
    options[:iam_instance_profile] = profile
  end
  if image = options.delete(:image)
    options[:image_id] = image.id
  end
  if kernel = options.delete(:kernel)
    options[:kernel_id] = kernel.id
  end
  if ramdisk = options.delete(:ramdisk)
    options[:ramdisk_id] = ramdisk.id
  end
  if key_pair = options.delete(:key_pair)
    options[:key_name] = key_pair.name
  end
  options = count_options(options).merge(options)
  options.delete(:count)
  options[:user_data] = Base64.encode64(options[:user_data]).strip if
    options[:user_data]
  if options[:block_device_mappings].is_a?(Hash)
    options[:block_device_mappings] =
      translate_block_device_mappings(options[:block_device_mappings])
  end
  options[:monitoring] = { :enabled => true } if
    options[:monitoring_enabled]
  options.delete(:monitoring_enabled)
  placement = {}
  if options[:availability_zone]
    placement[:availability_zone] = options[:availability_zone].to_s
    options.delete(:availability_zone)
  end
  if options[:dedicated_tenancy]
    placement[:tenancy] = 'dedicated'
    options.delete(:dedicated_tenancy)
  end
  options[:placement] = placement unless placement.empty?
  network_interface = {}
  if options[:associate_public_ip_address]
    if subnet_id = subnet_id_option(options)
      network_interface[:subnet_id] = subnet_id
      options.delete(:subnet)
      options.delete(:subnet_id)
    end
    if private_ip_address = options.delete(:private_ip_address)
      network_interface[:private_ip_address] = private_ip_address
    end
    if security_group_ids = options.delete(:security_group_ids)
      network_interface[:groups] = Array(security_group_ids)
    end
    network_interface[:associate_public_ip_address] = true
    network_interface[:device_index] = 0
  end
  options.delete(:associate_public_ip_address)
  options[:network_interfaces] = [network_interface] unless network_interface.empty?
  if subnet_id = subnet_id_option(options)
    options[:subnet_id] = subnet_id
  end
  security_group_opts(options)
  options[:client_token] = UUIDTools::UUID.timestamp_create.to_s
  resp = client.run_instances(options)
  if options[:min_count] == options[:max_count] and
      options[:min_count] == 1
    self[resp.instances_set.first.instance_id]
  else
    resp[:instances_set].map {|i| self[i[:instance_id]] }
  end
end

def each(&block)

Other tags:
    Yield: - Yields each instance in the collection.
def each(&block)
  response = filtered_request(:describe_instances)
  response.reservation_set.each do |reservation|
    reservation.instances_set.each do |i|
      yield(Instance.new(i.instance_id, :config => config))
    end
  end
end

def member_class

def member_class
  Instance
end

def security_group_opts options

def security_group_opts options
  ids = []
  names = []
  Array(options.delete(:security_group_ids)).each do |g|
    ids << g
  end
  # this may be security group objects or names
  Array(options.delete(:security_groups)).each do |g|
    case g
    when String        then names << g
    when SecurityGroup then ids << g.id
    else
      raise ArgumentError, ':security_groups may only contain ' +
        'security group names, ids or objects'
    end
  end
  return if ids.empty? and names.empty?
  if options[:subnet_id]
    # vpc instances only accepts security group ids, so any group
    # names must be converted to ids, which requires a service
    # request
    unless names.empty?
      ec2 = EC2.new(:config => config)
      groups = ec2.security_groups.filter('group-name', names)
      ids += groups.collect{|g| g.id }
    end
    options[:security_group_ids] = ids
  else
    # non-vpc instances accept both group names and ids, so
    # we accept whichever
    options[:security_groups] = names unless names.empty?
    options[:security_group_ids] = ids unless ids.empty?
  end
end