💰
AWS CLIでRDSインスタンスを停止・起動してコストを削減する方法
1. 背景
RDSは高額なサービスです。
使用していない時間帯は停止しておくことで、コストを削減できます。
この記事は、AWS CLIを使ってRDSインスタンスを停止・起動する手順のメモです。
2. RDSのコストとメリット
RDSの料金体系
Amazon RDSの料金は、主に以下の要素で構成されます。
| 料金項目 | 説明 | 停止時の課金 |
|---|---|---|
| インスタンス料金 | DBインスタンスの稼働時間 | 停止中は無料 |
| ストレージ料金 | データ保存容量(GB/月) | 停止中も課金 |
| バックアップストレージ | 自動バックアップの保存容量 | 停止中も課金 |
| データ転送料金 | データの送受信量 | 停止中は無料 |
RDS停止によるコスト削減効果
例:db.t3.micro(MySQL)を東京リージョンで使用する場合
- インスタンス料金:約$0.034/時間 = 約$24.48/月(730時間)
- ストレージ料金:$0.138/GB/月(20GBで約$2.76/月)
停止による削減額:
- 平日夜間・土日を停止(月400時間停止):約$13.60/月の削減
- 開発環境で平日9-18時のみ稼働:約$18.36/月の削減
RDS停止の制限事項
重要な制限:
- 7日間で自動再起動:停止後7日経過すると、自動的に起動される
- Multi-AZ構成:プライマリとスタンバイの両方が停止される
- Read Replica:個別に停止が必要(自動では停止しない)
- 自動バックアップ:停止中も継続される
停止できない状況:
- リードレプリカの作成中
- バックアップの実行中
- メンテナンスウィンドウ中
- マルチAZ構成の場合、フェイルオーバー中
3. 前提条件
必要な環境
- AWS CLI:バージョン2.x以上を推奨
- 認証情報:適切に設定済み(
~/.aws/credentialsまたは環境変数) - IAMポリシー:RDSの停止・起動権限
AWS CLIのインストール確認
# AWS CLIのバージョン確認
aws --version
# 出力例
# aws-cli/2.11.0 Python/3.11.2 Linux/5.15.0 exe/x86_64.ubuntu.22
認証情報の確認
# 現在の認証情報を確認
aws sts get-caller-identity
# 出力例(ユーザー情報が表示される)
# {
# "UserId": "AIDACKCEVSQ6C2EXAMPLE",
# "Account": "123456789012",
# "Arn": "arn:aws:iam::123456789012:user/your-username"
# }
必要なIAM権限
RDSの停止・起動には、以下の権限が必要です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rds:DescribeDBInstances",
"rds:StopDBInstance",
"rds:StartDBInstance"
],
"Resource": "*"
}
]
}
最小権限の原則:特定のRDSインスタンスのみに限定する場合
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rds:DescribeDBInstances",
"rds:StopDBInstance",
"rds:StartDBInstance"
],
"Resource": "arn:aws:rds:ap-northeast-1:123456789012:db:test-db"
}
]
}
4. RDSインスタンスの状態確認
基本的な確認方法
すべてのRDSインスタンスの詳細情報を取得します。
aws rds describe-db-instances --db-instance-identifier test-db
このコマンドはJSON形式で多くの項目を表示するため、内容を把握しにくいです。
推奨される確認方法(表形式)
--output tableを使用して、状態のみを分かりやすく表示します。
aws rds describe-db-instances \
--query 'DBInstances[*].[DBInstanceIdentifier,DBInstanceStatus]' \
--output table
出力例:
--------------------------
| DescribeDBInstances |
+----------+-------------+
| test-db | available |
| prod-db | available |
| dev-db | stopped |
+----------+-------------+
RDSのステータス一覧
ステータスは以下のとおりです。
| ステータス | 説明 | 課金状態 |
|---|---|---|
available |
使用可能(起動中) | 課金あり |
stopped |
停止中 | インスタンス料金なし |
stopping |
停止処理中 | 課金あり |
starting |
起動処理中 | 課金あり |
backing-up |
バックアップ中 | 課金あり |
modifying |
変更中 | 課金あり |
maintenance |
メンテナンス中 | 課金あり |
5. RDSインスタンスの停止
基本的な停止方法
aws rds stop-db-instance --db-instance-identifier test-db
実行結果:
{
"DBInstance": {
"DBInstanceIdentifier": "test-db",
"DBInstanceStatus": "stopping",
"DBInstanceClass": "db.t3.micro",
"Engine": "mysql",
...
}
}
停止にかかる時間
RDSの停止には時間がかかります。
- データ量が少ない場合:5〜10分
- データ量が多い場合:10〜15分以上
- バックアップ実行中:バックアップ完了まで待機
停止中のステータス確認
aws rds describe-db-instances \
--query 'DBInstances[*].[DBInstanceIdentifier,DBInstanceStatus]' \
--output table
停止中の出力例:
-------------------------
| DescribeDBInstances |
+----------+------------+
| test-db | stopping |
+----------+------------+
停止完了の確認
上記と同じコマンドを使い、停止しているとstoppedと表示されます。
------------------------
| DescribeDBInstances |
+----------+-----------+
| test-db | stopped |
+----------+-----------+
スナップショットを作成して停止
停止前にスナップショットを作成しておくと、より安全です。
6. RDSインスタンスの起動
基本的な起動方法
aws rds start-db-instance --db-instance-identifier test-db
実行結果:
{
"DBInstance": {
"DBInstanceIdentifier": "test-db",
"DBInstanceStatus": "starting",
"DBInstanceClass": "db.t3.micro",
"Engine": "mysql",
...
}
}
起動にかかる時間
停止と同様に、起動にも時間がかかります。
- 通常の場合:5〜10分
- Multi-AZ構成:10〜15分
起動中のステータス確認
aws rds describe-db-instances \
--query 'DBInstances[*].[DBInstanceIdentifier,DBInstanceStatus]' \
--output table
起動中の出力例:
-------------------------
| DescribeDBInstances |
+----------+------------+
| test-db | starting |
+----------+------------+
起動完了の確認
aws rds describe-db-instances \
--query 'DBInstances[*].[DBInstanceIdentifier,DBInstanceStatus]' \
--output table
起動完了の出力例:
--------------------------
| DescribeDBInstances |
+----------+-------------+
| test-db | available |
+----------+-------------+
Discussion