Class: Cucloud::RdsUtils
- Inherits:
-
Object
- Object
- Cucloud::RdsUtils
- Defined in:
- lib/cucloud/rds_utils.rb
Overview
RdsUtils class - for interacting with the AWS relational database service
Defined Under Namespace
Classes: RDSInstanceAlreadyExist
Instance Method Summary collapse
-
#create_snapshot_and_wait_until_available(rds_instance, tags = []) ⇒ Aws::RDS::DBSnapshot
Create a new snapshot of the instance, if no snapshots are already in the process of being created, and wait indefinitely until the snapshot is complete.
-
#delete_db_instance(db_instance_identifier, db_snapshot_identifier = nil) ⇒ Object
Delete a givne db instance.
-
#does_db_exist?(db_instance_identifier) ⇒ boolean
Determine if a givne db instance exist.
-
#find_latest_snapshot(db_instance_identifier, snapshot_type = 'manual') ⇒ String
Find the latest snapshot for a given RDS instance.
-
#find_rds_snapshots(options = {}, snapshot_type = 'manual') ⇒ String
Find RDS Snapshot older than supplied days.
-
#get_instance(db_instance_identifier) ⇒ Aws::RDS::DBInstance
Get the RDS instance object with the given name.
-
#initialize(rds_client = Aws::RDS::Client.new) ⇒ RdsUtils
constructor
A new instance of RdsUtils.
-
#modify_db_instance(options) ⇒ Hash
Base function to modify DB, resets defualts for apply_immediately and copy_tags_to_snapshot.
-
#modify_option_group(db_instance_identifier, option_group_name) ⇒ Hash
Modify the options group for a RDS instance.
-
#modify_security_group(db_instance_identifier, vpc_security_groups) ⇒ Hash
Modify the security groups for a RDS instance.
-
#pending_snapshots(rds_instance) ⇒ Collection<Aws::RDS::DBSnapshot>
Return list of pending snapshots for the instance.
-
#restore_db(db_instance_identifier, restore_from, options = {}) ⇒ Object
Restore DB from a snapshot.
-
#start_snapshot(rds_instance, tags = []) ⇒ Aws::RDS::DBSnapshot
Begins the creation of a snapshot of the given RDS instance.
-
#wait_until_snapshot_available(snapshot, max_attempts = nil, delay = 10) ⇒ Aws::RDS::DBSnapshot
Wait for the completion and availability of a snapshot.
Constructor Details
#initialize(rds_client = Aws::RDS::Client.new) ⇒ RdsUtils
Returns a new instance of RdsUtils.
9 10 11 |
# File 'lib/cucloud/rds_utils.rb', line 9 def initialize(rds_client = Aws::RDS::Client.new) @rds = rds_client end |
Instance Method Details
#create_snapshot_and_wait_until_available(rds_instance, tags = []) ⇒ Aws::RDS::DBSnapshot
Create a new snapshot of the instance, if no snapshots are already in the process of being created, and wait indefinitely until the snapshot is complete.
171 172 173 174 175 |
# File 'lib/cucloud/rds_utils.rb', line 171 def create_snapshot_and_wait_until_available(rds_instance, = []) return nil unless pending_snapshots(rds_instance).empty? snap = start_snapshot(rds_instance, ) wait_until_snapshot_available(snap, nil, 10) end |
#delete_db_instance(db_instance_identifier, db_snapshot_identifier = nil) ⇒ Object
Delete a givne db instance
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/cucloud/rds_utils.rb', line 34 def delete_db_instance(db_instance_identifier, db_snapshot_identifier = nil) unless does_db_exist?(db_instance_identifier) raise Aws::RDS::Errors::DBInstanceNotFound.new( db_instance_identifier, '' ) end if db_snapshot_identifier.nil? @rds.delete_db_instance(db_instance_identifier: db_instance_identifier, skip_final_snapshot: true) else @rds.delete_db_instance(db_instance_identifier: db_instance_identifier, final_db_snapshot_identifier: db_snapshot_identifier) end @rds.wait_until(:db_instance_deleted, db_instance_identifier: db_instance_identifier) end |
#does_db_exist?(db_instance_identifier) ⇒ boolean
Determine if a givne db instance exist
24 25 26 27 28 29 |
# File 'lib/cucloud/rds_utils.rb', line 24 def does_db_exist?(db_instance_identifier) get_instance(db_instance_identifier).instance_create_time true rescue false end |
#find_latest_snapshot(db_instance_identifier, snapshot_type = 'manual') ⇒ String
Find the latest snapshot for a given RDS instance
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/cucloud/rds_utils.rb', line 96 def find_latest_snapshot(db_instance_identifier, snapshot_type = 'manual') latest_snapshot_time = Time.new(2002) latest_snap_shot = nil snapshots_info = @rds.describe_db_snapshots( db_instance_identifier: db_instance_identifier, snapshot_type: snapshot_type )[:db_snapshots] snapshots_info.each do |snapshot_info| next if snapshot_info[:status] != 'available' if latest_snapshot_time.to_i < snapshot_info[:snapshot_create_time].to_i latest_snapshot_time = snapshot_info[:snapshot_create_time].to_i latest_snap_shot = snapshot_info end end latest_snap_shot.nil? ? nil : latest_snap_shot[:db_snapshot_identifier] end |
#find_rds_snapshots(options = {}, snapshot_type = 'manual') ⇒ String
Find RDS Snapshot older than supplied days
181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 |
# File 'lib/cucloud/rds_utils.rb', line 181 def find_rds_snapshots( = {}, snapshot_type = 'manual') days_old = [:days_old] found_snap_shots = [] snapshots_info = @rds.describe_db_snapshots(snapshot_type: snapshot_type)[:db_snapshots] snapshots_info.each do |snapshot_info| next if snapshot_info[:status] != 'available' if !days_old.nil? snapshot_days_old = (Time.now.to_i - snapshot_info[:snapshot_create_time].to_i) / Cucloud::SECONDS_IN_A_DAY if snapshot_days_old > days_old found_snap_shots.push(snapshot_info[:db_snapshot_identifier]) end else found_snap_shots.push(snapshot_info[:db_snapshot_identifier]) end end found_snap_shots end |
#get_instance(db_instance_identifier) ⇒ Aws::RDS::DBInstance
Get the RDS instance object with the given name
16 17 18 19 |
# File 'lib/cucloud/rds_utils.rb', line 16 def get_instance(db_instance_identifier) resource = Aws::RDS::Resource.new(client: @rds) resource.db_instance(db_instance_identifier) end |
#modify_db_instance(options) ⇒ Hash
Base function to modify DB, resets defualts for apply_immediately and copy_tags_to_snapshot
71 72 73 74 75 76 |
# File 'lib/cucloud/rds_utils.rb', line 71 def modify_db_instance() [:apply_immediately] = [:apply_immediately].nil? ? true : [:apply_immediately] [:copy_tags_to_snapshot] = [:copy_tags_to_snapshot].nil? ? true : [:copy_tags_to_snapshot] @rds.modify_db_instance() end |
#modify_option_group(db_instance_identifier, option_group_name) ⇒ Hash
Modify the options group for a RDS instance
64 65 66 |
# File 'lib/cucloud/rds_utils.rb', line 64 def modify_option_group(db_instance_identifier, option_group_name) modify_db_instance(db_instance_identifier: db_instance_identifier, option_group_name: option_group_name) end |
#modify_security_group(db_instance_identifier, vpc_security_groups) ⇒ Hash
Modify the security groups for a RDS instance
56 57 58 |
# File 'lib/cucloud/rds_utils.rb', line 56 def modify_security_group(db_instance_identifier, vpc_security_groups) modify_db_instance(db_instance_identifier: db_instance_identifier, vpc_security_group_ids: vpc_security_groups) end |
#pending_snapshots(rds_instance) ⇒ Collection<Aws::RDS::DBSnapshot>
Return list of pending snapshots for the instance. New snapshots cannot be created if there are any snapshots in the process of being created for the given instance.
138 139 140 141 142 143 |
# File 'lib/cucloud/rds_utils.rb', line 138 def pending_snapshots(rds_instance) snaps = rds_instance.snapshots snaps.select do |snap| snap.status == 'creating' end end |
#restore_db(db_instance_identifier, restore_from, options = {}) ⇒ Object
Restore DB from a snapshot
81 82 83 84 85 86 87 88 89 90 |
# File 'lib/cucloud/rds_utils.rb', line 81 def restore_db(db_instance_identifier, restore_from, = {}) raise RDSInstanceAlreadyExist if does_db_exist?(db_instance_identifier) db_snapshot_identifier = [:db_snapshot_identifier].nil? ? find_latest_snapshot(restore_from) : [:db_snapshot_identifier] [:db_instance_identifier] = db_instance_identifier [:db_snapshot_identifier] = db_snapshot_identifier @rds.restore_db_instance_from_db_snapshot() @rds.wait_until(:db_instance_available, db_instance_identifier: db_instance_identifier) end |
#start_snapshot(rds_instance, tags = []) ⇒ Aws::RDS::DBSnapshot
Begins the creation of a snapshot of the given RDS instance. This is a non-blocking call so it will return before the snapshot is created and available.
122 123 124 125 126 127 128 129 130 131 |
# File 'lib/cucloud/rds_utils.rb', line 122 def start_snapshot(rds_instance, = []) date = Time.new snap_id = rds_instance.db_instance_identifier + '-' + date.year.to_s + '-' \ + zerofill2(date.month) + '-' + zerofill2(date.day) + '-' \ + zerofill2(date.hour) + '-' + zerofill2(date.min) rds_instance.create_snapshot( db_snapshot_identifier: snap_id, tags: ) end |
#wait_until_snapshot_available(snapshot, max_attempts = nil, delay = 10) ⇒ Aws::RDS::DBSnapshot
Wait for the completion and availability of a snapshot.
153 154 155 156 157 158 159 160 161 |
# File 'lib/cucloud/rds_utils.rb', line 153 def wait_until_snapshot_available(snapshot, max_attempts = nil, delay = 10) snapshot.wait_until(max_attempts: max_attempts, delay: delay) do |snap| # Status == available is a conservative test for completion. # A more liberal test would be percent_progress == 100. snap.status == 'available' end rescue Aws::Waiters::Errors::WaiterFailed nil end |