AWSで検証用や一時的なRDSインスタンスを使った後に停止しても、7日後に自動的に再起動される仕組みになっています。
今回は、AWS Step Functions を使って、RDSが7日後に自動起動した後に自動停止する仕組みを構築してみました。
Lambdaを使わず、Step Functions単体で完結するのがポイントです。
1.構成
今回は以下のような構成で進めていきます。
<実現したいこと>
・RDSが7日後に自動起動した後に、自動で停止させたい
・コストのかかる検証環境を自動的にシャットダウンしたい
・コードを書かずにAWSのGUI上で完結したい
<使用するサービス>
AWS Step Functions | 処理フロー(停止〜再開)を管理 |
Amazon RDS | 管理対象のデータベース(MySQL等) |
AWS SDK 統合機能 | Step FunctionsからRDS APIを呼び出す |
<処理の全体像>
今回のステートマシンは次の流れで動作します。
①RDSインスタンスを停止
②停止状態になるまで待機・確認
③7日間(604,800秒)待機
④RDSインスタンスを再起動
これにより、たとえばテスト環境のDBを夜間や週末に止めたり、
特定期間後に自動で停止させたりできます。

2.コード
以下は、実際に使ったStep FunctionsのJSON定義ファイルの例です。
マネジメントコンソールの「コードエディタ」に貼り付けて利用できます。
<JSONコード>
{
"Comment": "State machine to manage MySQL instance",
"StartAt": "RDSインスタンスを停止",
"States": {
"RDSインスタンスを停止": {
"Type": "Task",
"Next": "Wait - 7日間",
"Resource": "arn:aws:states:::aws-sdk:rds:stopDBInstance",
"Parameters": {
"DbInstanceIdentifier": "データベース名"
},
"ResultPath": null
},
"Wait - 7日間": {
"Type": "Wait",
"Seconds": 604800,
"Next": "DescribeDBInstances"
},
"DescribeDBInstances": {
"Type": "Task",
"Resource": "arn:aws:states:::aws-sdk:rds:describeDBInstances",
"Parameters": {
"DbInstanceIdentifier": "データベース名"
},
"Next": "Choice - インスタンスステータス",
"ResultSelector": {
"Db_identifier.$": "$.DbInstances[0].DbInstanceIdentifier",
"status.$": "$.DbInstances[0].DbInstanceStatus"
}
},
"Choice - インスタンスステータス": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.status",
"StringMatches": "stopping",
"Next": "RDSインスタンスを一時的に起動"
}
],
"Default": "Success - インスタンスが別の要因で起動または削除されました"
},
"RDSインスタンスを一時的に起動": {
"Type": "Task",
"Resource": "arn:aws:states:::aws-sdk:rds:startDBInstance",
"Parameters": {
"DbInstanceIdentifier": "データベース名"
},
"ResultPath": null,
"Next": "Wait - 10分"
},
"Wait - 10分": {
"Type": "Wait",
"Seconds": 600,
"Next": "RDSインスタンスを停止"
},
"Success - インスタンスが別の要因で起動または削除されました": {
"Type": "Succeed"
}
}
}
ポイントは、"Wait" ステートで7日(604,800秒)待機させている部分です。
<実行の流れ>
記事内のスクリーンショットのように、Step Functionsを実行すると
各ステップが「緑色のチェックマーク」で順に実行されます。
①停止タスク実行
②状態確認
③7日待機
④起動タスク完了
このように 可視化されたワークフロー で、エラー箇所も一目で分かります。
画像にあるように、成功と出ています。
これで、RDSの7日後の自動起動後の自動停止は実現できました。

3.まとめ
AWSを日常運用していると、こうした「自動停止の仕組み」が地味に役立ちます。
Step Functionsを使えば、シンプルかつ視覚的に管理できるので、コスト削減と効率化の両立にぴったりの構成です。
<Lmbdaを使わないメリット>
一般的に、RDSの自動停止は「CloudWatch + Lambda」で構成されますが、Step Functionsだけで実現すれば以下のメリットがあります。
・コード不要(ノーコード運用)
・GUIでステップ確認可能
・異常時のハンドリングが簡単
・運用コストが低い
AWSコンソール上で「一目で分かる自動化」を作れるのは、学習にも実践にも最適です。
<利用シーン>
・検証、開発用の一時DBを自動停止
・深夜、休日にコストを節約したい環境
・長期間放置を防止したいRDSインスタンス
Step Functionsは無料枠も広く、AWS学習者にもおすすめです。