◀ 前の記事 | 記事一覧に戻る | 次の記事 ▶ |
2020年3月6日
ビジネスデベロップメントDiv.のテクニカルSec.高橋です。
突然ですが、RDSはEC2と違ってインスタンスを止めても勝手に起動してきてしまいますよね。。。
マネージドサービスだからAWSとしては課金できないと無駄なリソースになってしまうからということでしょうか。そもそもデータベースは常時起動が前提なので、止める必要性がないんでしょうね。
弊社は、AWSを利用したいと考えていらっしゃるユーザー様のために、積極的にセミナーを開催しています。最近だと、2月5日にグランフロントで開催して盛況をいただきました。まだ参加されたことがない方は是非足をお運びください!
セミナーとか、展示会の出展用にデモ環境を作ったりしますが、例えば、ひと月前に作ったとして、1ヶ月間起動し続けるのはもったいないので、停止しておきます。ですが、RDSは最大 7 日しか止めれません。7 日経つと勝手に起動してきます。
そこで、Lambda と CloudWatch Eventsを使って自動で止めるようにしてみました。コードは、Python 3.7です。
import boto3
import os
def lambda_handler(event, context):
client = boto3.client('rds')
db_name = os.environ['db_name']
response = client.describe_db_instances(
DBInstanceIdentifier = db_name
)
response = response['DBInstances'][0]['DBInstanceStatus']
# RDS インスタンスの状態
print (response)
if response == 'available':
response = client.stop_db_instance(
DBInstanceIdentifier='redmine-database'
)
else:
response = 'not running...'
print (response)
return
環境変数にデータベース名を入力したデータベースを停止できます。
Lambdaを実行させるロールは、以下がオススメです。通常のLambda Basic Excutionと別でインラインポリシーを追加してください。
早速、動かしてみます!RDSのインスタンスは「利用可能」になっているので、
Lambdaのテストボタンをクリックして実行してみます。
はい!成功しました。
RDSの画面に移動すると、データベースが「停止中」に変わりました。
次回は、CloudWatch Eventsのcron設定で自動停止させる方法を書きたいと思います。
◀ 前の記事 | 記事一覧に戻る | 次の記事 ▶ |
カテゴリー
タグ