class AWS::EC2::InstanceCollection

Represents a collection of EC2 instances. Typically you should get an instance of this class by calling {AWS::EC2#instances}.

To run an instance:

ec2.instances.create(:image_id => "ami-8c1fece5")

To get an instance by ID:

i = ec2.instances["i-12345678"]
i.exists?

To get a map of instance IDs to instance status:

ec2.instances.inject({}) { |m, i| m[i.id] = i.status; m }
# => { "i-12345678" => :running, "i-87654321" => :shutting_down }

Public Instance Methods

[](id) click to toggle source

@return [Instance] Returns an object representing the EC2 instance

with the given ID.
# File lib/aws/ec2/instance_collection.rb, line 271
def [] id
  super
end
create(options = {}) click to toggle source

Runs one or more EC2 instances.

@example Running a single instance

i = ec2.instances.create(:image_id => "ami-8c1fece5")
sleep 1 while i.status == :pending

@example Running multiple instances with the same parameters

 instances = ec2.instances.create(
   :image_id => "ami-8c1fece5",
   :count => 10)

sleep 1 while instances.any? {|i| i.status == :pending }

@example Specifying block device mappings

ec2.instances.create({
  :image_id => "ami-8c1fece5",
  :block_device_mappings => {
    "/dev/sda2" => {
      :volume_size => 15, # 15 GiB
      :delete_on_termination => true
    }
  }
})

@example Launching in an Amazon VPC subnet

ec2.instances.create(
  :image_id => "ami-8c1fece5",
  :subnet => "subnet-abc123ef")

@param [Hash] options Options for new instance. :image_id is

the only required option.

@option options :count How many instances to request. By

default one instance is requested.  You can specify this
either as an integer or as a Range, to indicate the
minimum and maximum number of instances to run.  Note that
for a new account you can request at most 20 instances at
once.

@option options [Hash] :block_device_mappings This must be a

hash; the keys are device names to map, and the value for
each entry determines how that device is mapped.  Valid
values include:

* A string, which is interpreted as a virtual device name.

* The symbol :no_device, which overrides the default
  mapping for a device so that it is not mapped to anything.

* A hash with any of the following options.  One of
  +:snapshot+, +:snapshot_id+ or +:volume_size+ is
  required.

  [:snapshot] A snapshot to use when creating the block
              device.

  [:snapshot_id] The ID of a snapshot to use when creating
                 the block device.

  [:volume_size] The size of volume to create, in gigabytes.

  [:delete_on_termination] Setting this to true causes EC2
                           to delete the volume when the
                           instance is terminated.

@option options [Boolean] :monitoring Setting this to true

enables CloudWatch monitoring on the instances once they
are started.

@option options [String] :availability_zone Specifies the

availability zone where the instance should run.  Without
this option, EC2 will choose an availability zone for you.

@option options [String] :image_id ID of the AMI you want to

launch.

@option options [String] :key_name The name of the key pair to

use.  Note: Launching public images without a key pair ID
will leave them inaccessible.

@option options [Array] :security_groups Security groups are used

to determine network access rules for the instances.  
+:security_groups+ can be a single value or an array of values.
Values should be group name strings or {SecurityGroup} objects.

@option options [Array<String>] :security_group_ids Security groups

are used to determine network access rules for the instances.  
+:security_group_ids+ accepts a single ID or an array of security
group IDs.

@option options [String] :user_data Arbitrary user data. You

do not need to encode this value.

@option options [String] :instance_type The type of instance to

launch, for example "m1.small".

@option options [String] :kernel_id The ID of the kernel with

which to launch the instance.

@option options [String] :ramdisk_id The ID of the RAM disk to

select. Some kernels require additional drivers at
launch. Check the kernel requirements for information on
whether you need to specify a RAM disk. To find kernel
requirements, refer to the Resource Center and search for
the kernel ID.

@option options [Boolean] :disable_api_termination Specifies

whether you can terminate the instance using the EC2
API. A value of true means you can't terminate the
instance using the API (i.e., the instance is "locked"); a
value of false means you can. If you set this to true, and
you later want to terminate the instance, you must first
enable API termination.  For example:

  i = ec2.instances.create(:image_id => "ami-8c1fece5",
                           :disable_api_termination => true)
  i.api_termination_disabled?        # => true
  i.terminate                        # raises an exception
  i.api_termination_disabled = false
  i.terminate                        # terminates the instance

@option options [String] :instance_initiated_shutdown_behavior

Determines whether the instance stops or terminates on
instance-initiated shutdown.

@option options [String] :subnet (nil) The ID of an EC2 VPC

subnet to launch the instance in.

@option options [String] :private_ip_address (nil) If you’re using VPC,

you can optionally use this option to assign the instance a 
specific available IP address from the subnet (e.g., '10.0.0.25').
This option is not valid for instances launched outside a VPC (i.e.
those launched without the :subnet option).

@option options [Boolean] :dedicated_tenancy (false) Instances

with dedicated tenancy will not share physical hardware with
instances outside their VPC.  *NOTE:* Dedicated tenancy
incurs an additional service charge.  This option is not
valid for instances launched outside a VPC (e.g. those
launched without the :subnet option).

@return [Instance or Array] If a single instance is being created,

this returns an {EC2::Instance} to represent the newly
created instance.  Otherwise it returns an array of instance 
objects.
# File lib/aws/ec2/instance_collection.rb, line 193
def create options = {}

  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]

  options[:block_device_mappings] =
    translate_block_device_mappings(options[:block_device_mappings]) if
    options[:block_device_mappings]

  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?

  options[:subnet_id] = options.delete(:subnet) if options[:subnet]

  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 do |i|
      self[i.instance_id]
    end
  end
end
Also aliased as: run
each() { |instance(instance_id, :config => config)| ... } click to toggle source

@yield [Instance] Yields each instance in the collection.

# File lib/aws/ec2/instance_collection.rb, line 260
def each(&block)
  response = filtered_request(:describe_instances)
  response.reservation_set.each do |r|
    r.instances_set.each do |i|
      yield(Instance.new(i.instance_id, :config => config))
    end
  end
end
run(options = {}) click to toggle source
Alias for: create

Protected Instance Methods

member_class() click to toggle source

@private

# File lib/aws/ec2/instance_collection.rb, line 277
def member_class
  Instance
end