💰

AWS CLIでRDSインスタンスを停止・起動してコストを削減する方法

に公開
2025/12/01

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  |
+----------+-------------+

参考URL

GitHubで編集を提案

Discussion