Class: Akashi::Ec2::Instance

Inherits:
Base
  • Object
show all
Defined in:
lib/akashi/ec2/instance.rb

Class Method Summary collapse

Methods inherited from Base

#name, #name=, service_class

Methods inherited from Base

all, base_class, collection, find, find_by, #initialize, object_class, where

Constructor Details

This class inherits a constructor from Akashi::Base

Class Method Details

.create(ami:, instance_class:, security_group:, subnet:, allocated_storage:) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/akashi/ec2/instance.rb', line 9

def create(ami:, instance_class:, security_group:, subnet:, allocated_storage:)
  name = "#{subnet.name}-#{next_number(subnet: subnet)}"

  response = Akashi::Aws.ec2.instances.create(
    image_id:                    ami.id,
    key_name:                    Akashi.name,
    security_group_ids:          [ security_group.id ],
    subnet_id:                   subnet.id,
    instance_type:               instance_class,
    associate_public_ip_address: true,
    block_device_mappings:       [
      {
        device_name:  ami.root_device_name,
        ebs:          {
          volume_size:           allocated_storage,
          delete_on_termination: true,
          volume_type:           "standard",
        },
      },
    ],
  )

  new(response.id).tap do |instance|
    instance.name = name
    puts "Created an EC2 Instance (#{instance.id}) on a Subnet (#{subnet.id})."
  end
end

.next_number(subnet:) ⇒ Object



37
38
39
# File 'lib/akashi/ec2/instance.rb', line 37

def next_number(subnet:)
  "%03d" % (where(subnet_id: subnet.id).count + 1)
end