今年の6月から、RDSのインスタンスを stop/start できるようになりました。
Amazon RDS Supports Stopping and Starting of Database Instances
当然ながら、ここで想定されるユースケースの中で最もそれっぽいものは、開発環境やテスト環境の夜間停止・週末停止です。
この機能が出るまでは、RDSの機能を停止(言い換えればRDS本体の課金を停止)させるには、データが削除されることが前提でした。(snapshotは取れますが)
さて、夜間停止や週末停止を実現したり、1週間stopのまま放置(放置すると自動で起動する仕様)した後の自動stopを実現するためには、自動化したいところです。
既に実現している人もきっと多いことでしょう。
この記事は、その自動化を実施するにあたってのメモです。
権限設定(IAM Policy)
aws.amazon.com
上記のサイトの Security Policy のところに、許可しないといけないアクションが書いてあります(全部大文字なのは、ええんかな?)。
これをIAMの user / role / group / policy のどこか使っているところに付与してあげる訳ですが…よくお世話になるツール Policy Generator は、現時点ではまだRDSの start/stop に対応していないようです。
自分でJSONを書く必要があります。
うちは、こんなのを書きました。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1503413225000", "Effect": "Allow", "Action": [ "rds:DescribeDBInstances", "rds:StartDBInstance", "rds:StopDBInstance" ], "Resource": [ "*" ] } ] }
EC2との挙動の違い
EC2だと、既にrunningになっているものに対して start の指示を出してもエラーにはならずに正常終了しますが、
RDSでは、起動中のものを起動しようとするとエラーになります。要注意です。
waitの取り扱い
CLIツールでは wait というサブコマンドがあって、何かが起きるまで終了せずに待っていてくれる機能があります。しかし、startし終えたことは検知できても、stopし終えたことは検知できません。
ま、将来的には機能追加される可能性は十分ありますね。
さいごに
はー、快適。