#!/usr/bin/ruby require 'rubygems' require 'right_aws' require 'yaml' require 'pp' require "time" require "libs.rb" $default_retention = 7 ## # main proccess ## config = YAML.load(File.open('config.yml')) config[:accounts].each_pair do |account, params| begin puts "[Info] <#{account}> Start Backup" ec2 = RightAws::Ec2.new( params[:access_key_id], params[:secret_access_key], :region => config[:region], :logger => Logger.new('/dev/null') ) instances = ec2.describe_instances(:filters => {'instance-state-name' => 'running'}) volumes = ec2.describe_volumes # Create Snapshot. target_volumes = elect_snapshot_targets(instances, volumes) target_volumes.each do |volume| snapshot = ec2.create_snapshot(volume[:aws_id], "<instance_name:#{volume[:aws_instance_name]}> <volume_id:#{volume[:aws_id]}>") tags = ec2.create_tags(snapshot[:aws_id], {"ManagedByAutoBackup" => "True"}) puts "[Info] <#{account}> Created snapshot <instance_name:#{volume[:aws_instance_name]}> <volume_id:#{volume[:aws_id]}> <snapshot_id:#{snapshot[:aws_id]}>" end snapshots = ec2.describe_snapshots(:owner => ['self'], :filters => {'tag:ManagedByAutoBackup' => 'True'}) grouped_snapshots = grouping_snapshots_by_volume_id(snapshots) # Delete aged Snapshot. aged_snapshot_ids = detect_aged_snapshots(grouped_snapshots, volumes) aged_snapshot_ids.each do |aged_snapshot_id| ec2.delete_snapshot(aged_snapshot_id) puts "[Info] <#{account}> Deleted aged snapshot <snapshot_id:#{aged_snapshot_id}>" end # Detect deleted volume. deleted_volume_ids = detect_deleted_volumes(grouped_snapshots, volumes) deleted_volume_ids.each do |deleted_volume_id| warn "[info] <#{account}> Detected deleted volume <volume_id:#{deleted_volume_ids}>" end # Detect unused volume. unused_volume_ids = detect_unused_volumes(volumes) unused_volume_ids.each do |unused_volume_id| warn "[info] <#{account}> Detected unused volume <volume_id:#{unused_volume_id}>" end rescue => ex warn "[Error] #{account} Error has Occured" warn "[Error] #{account} #{ex.message}" next end end