Skip to content

Instantly share code, notes, and snippets.

@juno
Forked from okochang/awssdk_create_snapshot.rb
Created July 21, 2011 03:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save juno/1096451 to your computer and use it in GitHub Desktop.
Save juno/1096451 to your computer and use it in GitHub Desktop.
Create EC2 SnapShot from Volume with AWS-SDK for Ruby
# -*- coding: utf-8 -*-
require 'rubygems'
require 'aws-sdk'
## アクセスIDとシークレットアクセスキーを指定します
ACCESS_KEY = 'SET UP YOUR ACCESS KEY'
SECRET_KEY = 'SET UP YOUR SECRET KEY'
## 引数チェック
unless ARGV.size == 4
puts 'How to Use: create_ebs_snapshots.rb <aws_region_url> <num> <volume_id> <snapshot_description>'
exit 0
end
## 引数からスナップショット保存設定を行います
aws_region = ARGV[0]
history = ARGV[1].to_i
vol_id = ARGV[2]
snapshot_memo = ARGV[3]
## スナップショットのdescriptionを作成します
snapshot_description = "#{snapshot_memo} #{Time.now.strftime('%Y/%m/%d %H:%M')}"
## EC2インスターフェースを作成するために認証を行います
AWS.config(:access_key_id => ACCESS_KEY, :secret_access_key => SECRET_KEY, :ec2_endpoint => aws_region)
ec2 = AWS::EC2.new
## 対象ボリュームからスナップショットを作成します
ec2.snapshots.create(:volume => ec2.volumes[vol_id], :description => snapshot_description)
## 現在保存されている対象ボリュームから作成されたスナップショットをリスト化する
snapshots = ec2.snapshots.filter('volume-id', vol_id)
## 指定世代分を残して古いスナップショットを削除します
snapshots_to_remain = snapshots.sort_by { |snap| snap.start_time }.reverse[0, history]
snapshots_to_delete = snapshots.to_a - snapshots_to_remain.to_a
snapshots_to_delete.each { |snap| snap.delete }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment