Auroraクラスターを7日間以上停止する一番簡単な方法
はじめに
AWSのDBは、メンテナンスやパッチ適用を定期的に実施するためなど様々な理由から、7日間以上停止することができないようになっています。7日経過すると自動的に起動します。そのためしばらく使わないとわかっているDBがある場合、インスタンス時間にかかるコストだけでも削減しようとするなら、7日ごとに起動してくるDBを忘れずに停止する必要があります。
自動化するために色々なやり方があるのですが、AWSが公開しているやり方は2年前に更新されたナレッジで、一番簡単な方法ではないような気がしましたので、私なりのやり方を書いてみます。
色々なやり方
私が今回紹介するのは以下の3つやり方のうち、最後のやり方になります。
1.Lambda関数とEventBridgeスケジューラを組み合わせて停止する
Lambdaは、プログラムコードの管理とランタイムバージョンの保守が地味に大変なので、Lambdaを作らなくても解決する場合は、そちらを選択するようにしています。
2.StepFunctionsとEventBridgeスケジューラを組み合わせて停止する
StepFunctionsを作るのが手間だと思いましたので、採用しませんでした。
3.EventBridgeスケジューラからSSMオートメーションを実行して停止する
AWSから上記のLambdaを使ったやり方や、StepFunctionsを使ったやり方が紹介されていますが、今回はEventBridgeスケジューラから直接SSMオートメーションを実行するやり方を紹介します。このやり方は設定するのはEventBridgeスケジューラだけで、オートメーションのドキュメントはAWSが用意してくれているものを呼び出すだけなので簡単だと思います。
今回使用するオートメーションのドキュメント
やり方
IAMポリシー
- EventBridgeスケジューラのためのロールを作成し、許可するポリシーを以下のようにします。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["ssm:StartAutomationExecution"],
"Resource": [
"arn:aws:ssm:*:*:automation-definition/AWS-StartStopAuroraCluster:$DEFAULT"
]
},
{
"Effect": "Allow",
"Action": [
"rds:DescribeDBClusters",
"rds:StartDBCluster",
"rds:StopDBCluster"
],
"Resource": ["*"]
}
]
}
DBのメンテナンスウインドウの確認
DBのメンテナンスウインドウは、RDSコンソールで確認することができます。
私の場合は水曜日の17:15〜17:45でした。
起動スケジュールを作成
- 「EventBridge」のコンソールの「スケジュール」をクリックし、「スケジュールを作成」をクリックします。
- 「スケジュール名」に作成するスケジュールの名前を入力します。(例:start_db)
- スケジュールのパターンで「定期的なスケジュール」を選択し、cron式にメンテナンスウィンドウが開始する30分前に起動するように設定します。(例:cron(45 16 ? * WED *))
- 次の「ターゲットの選択」で「すべてのAPI」を選択します。
- 検索窓に「ssm」と入力し「Systems Manager」を選択します。
- 次の画面の検索窓に「automation」と入力し「StartAutomationExecution」を選択します。
- StartAutomationExecutionに渡す入力値を以下のようにします。(
{クラスター名}
の部分は実際の値に書き換えます。){ "DocumentName": "AWS-StartStopAuroraCluster", "Parameters":{ "ClusterName": ["{クラスター名}"], "Action": ["Start"] } }
停止スケジュールを作成
- 「EventBridge」のコンソールの「スケジュール」をクリックし、「スケジュールを作成」をクリックします。
- 「スケジュール名」に作成するスケジュールの名前を入力します。(例:stop_db)
- スケジュールのパターンで「定期的なスケジュール」を選択し、cron式にメンテナンスウィンドウが終了してから30分後に停止するように設定します。(例:cron(15 18 ? * WED *))
- 次の「ターゲットの選択」で「すべてのAPI」を選択します。
- 検索窓に「ssm」と入力し「Systems Manager」を選択します。
- 次の画面の検索窓に「automation」と入力し「StartAutomationExecution」を選択します。
- StartAutomationExecutionに渡す入力値を以下のようにします。(
{クラスター名}
の部分は実際の値に書き換えます。){ "DocumentName": "AWS-StartStopAuroraCluster", "Parameters":{ "ClusterName": ["{クラスター名}"], "Action": ["Stop"] } }
確認方法
「Systems Manager」のコンソールの「自動化」をクリックすると「Executions」タブが選択されていて、実行履歴やステータスを確認することができます。
Auroraクラスター以外の場合
クラスター構成でなかったり、Auroraでなかったりした場合は、別のオートメーションドキュメントが用意されているので、似たようなことはできると思います。
インスタンスIDを指定して起動・停止する以下のようなドキュメントがあります。
おわりに
LambdaやStepFunctionsを作らずにEventBridgeスケジューラの設定だけで、Auroraクラスターを7日間以上停止するやり方の紹介でした。
Discussion