· 8 years ago · Jan 26, 2018, 11:16 AM
1# -*- coding: utf-8 -*-
2require 'rubygems'
3require 'aws-sdk'
4
5## アクセスIDã¨ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆã‚¢ã‚¯ã‚»ã‚¹ã‚ーを指定ã—ã¾ã™
6ACCESS_KEY = 'SET UP YOUR ACCESS KEY'
7SECRET_KEY = 'SET UP YOUR SECRET KEY'
8
9## 引数ãƒã‚§ãƒƒã‚¯
10unless ARGV.size == 4
11 puts "Usage: #{$0} <aws_region_url> <num> <volume_id> <snapshot_description>"
12 exit 0
13end
14
15## 引数ã‹ã‚‰ã‚¹ãƒŠãƒƒãƒ—ショットä¿å˜è¨å®šã‚’行ã„ã¾ã™
16aws_region = ARGV[0]
17history = ARGV[1].to_i
18vol_id = ARGV[2]
19snapshot_memo = ARGV[3]
20
21## スナップショットã®descriptionを作æˆã—ã¾ã™
22snapshot_description = "#{snapshot_memo} #{Time.now.strftime('%Y/%m/%d %H:%M')}"
23
24## EC2インスターフェースを作æˆã™ã‚‹ãŸã‚ã«èªè¨¼ã‚’行ã„ã¾ã™
25AWS.config(:access_key_id => ACCESS_KEY, :secret_access_key => SECRET_KEY, :ec2_endpoint => aws_region)
26ec2 = AWS::EC2.new
27
28## 対象ボリュームã‹ã‚‰ã‚¹ãƒŠãƒƒãƒ—ショットを作æˆã—ã¾ã™
29ec2.snapshots.create(:volume => ec2.volumes[vol_id], :description => snapshot_description)
30
31## ç¾åœ¨ä¿å˜ã•れã¦ã„る対象ボリュームã‹ã‚‰ä½œæˆã•れãŸã‚¹ãƒŠãƒƒãƒ—ショットをリスト化ã™ã‚‹
32snapshots_list = []
33snapshots = ec2.snapshots.filter('volume-id', vol_id)
34snapshots.each { |snap| snapshots_list << snap.id }
35
36## 指定世代分を残ã—ã¦å¤ã„スナップショットを削除ã—ã¾ã™
37snapshots_to_delete = []
38snapshots_list.each { |snap| snapshots_to_delete << ec2.snapshots[snap] }
39snapshots_to_delete = snapshots_to_delete.sort_by { |snap| snap.start_time }.reverse
40snapshots_to_delete.each_with_index do |snap, i|
41 snap.delete unless i < history
42end