Created
July 11, 2012 15:55
-
-
Save okochang/3091321 to your computer and use it in GitHub Desktop.
AWS RDS auto start/stop ruby script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- 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