Skip to content

Instantly share code, notes, and snippets.

@okochang
Created July 11, 2012 15:55
Show Gist options
  • Save okochang/3091321 to your computer and use it in GitHub Desktop.
Save okochang/3091321 to your computer and use it in GitHub Desktop.
AWS RDS auto start/stop ruby script
# -*- coding: utf-8 -*-
require 'rubygems'
require 'right_aws'
### 使用例
# ruby rightaws_runstop_dbinstance.rb rds_instance_name db.m1.small security-group parameter_group
### 事前に指定するパラメータ
# * RDSのインスタンス名
# * RDSのインスタンスタイプ
# * RDSのセキュリティグループ
rds_db_instance = ARGV[0]
rds_instance_type = ARGV[1]
rds_security_group = ARGV[2]
rds_parameter_group = ARGV[3]
### スクリプト内に埋め込む設定
# * AWSのリージョン設定
rds_end_point_url = 'ap-northeast-1.rds.amazonaws.com'
### スナップショットで使用するタグ(一意なもの)
tag = 'fsstag'
## 引数が正しく設定されているかチェックします
unless ARGV.size == 4
puts "Usage: #{$0} <rds_db_instance> <rds_instance_type> <rds_security_group> <rds_parameter_group>"
exit 0
end
## アクセスIDとシークレットアクセスキーを指定します
ACCESS_KEY = 'YOUR_ACCESS_KEY'
SECRET_KEY = 'YOUR_SECRET_KEY'
## RDSのインスターフェースを作成するために認証をします
rds = RightAws::RdsInterface.new(ACCESS_KEY, SECRET_KEY, :default_endpoint_url => rds_end_point_url)
## DB削除時に作成するファイナルスナップショットの名前を作成します
final_db_snapshot = "#{tag}-#{rds_db_instance}"
## 指定した名前のDBインスタンスが起動している場合はリストに入れときます
check_db_instance = []
rds.describe_db_instances.each do |dbinstance|
if rds_db_instance == dbinstance[:aws_id]
check_db_instance << dbinstance
end
end
## 指定した名前のDBインスタンスが起動していなければ最新のスナップショットからDBをリストアします
## 指定した名前のDBインスタンスが起動していればファイナルスナップショットを作成してDBインスタンスを削除します
if check_db_instance.empty?
rds.restore_db_instance_from_db_snapshot(final_db_snapshot, rds_db_instance, params={:instance_class => rds_instance_type})
sleep 180
until rds.describe_db_instances(rds_db_instance)[0][:status] == "available"
sleep 30
end
rds.modify_db_instance(rds_db_instance, params={:db_security_groups => rds_security_group, :db_parameter_group => rds_parameter_group, :apply_immediately => true})
sleep 30
rds.reboot_db_instance(rds_db_instance)
rds.delete_db_snapshot(final_db_snapshot)
else
rds.delete_db_instance(rds_db_instance, params={:snapshot_aws_id => final_db_snapshot})
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment