[小ネタ] RDS にリードレプリカが含まれていると停止できません

RDS にリードレプリカが含まれていると停止できません。
2024.06.05

コーヒーが好きな emi です。

タイトルがすべてなのですが、RDS にリードレプリカが含まれていると停止できません。
リードレプリカ自体も停止できませんし、リードレプリカの元となっているソース DB も停止できません。

リードレプリカが含まれているか、リードレプリカである DB インスタンスは停止できません。
DB インスタンスの停止に関する制限事項

テストであっても止められないので料金に注意

例えばアプリケーションのテストで、リードレプリカを使った負荷分散テストやパフォーマンス改善テストをする場合、リードレプリカがあると停止できないので料金に注意してください。
「テスト中だから節約のために停止しよう」などといったことはできません。
テスト中のコストが気になる場合はリードレプリカを削除しましょう。

挙動の確認

結論は冒頭で申し上げた通りなのですが、挙動も確認しましたのでご紹介します。

検証構成は以下です。Multi-AZ DB instance 構成の RDS for MySQL に、リードレプリカを 2 台作成しています。

  • 補足
    • 本当にリードレプリカを作るだけの検証をしたかったので深く考えていない AZ 配置になっています。
    • AZ 間のレイテンシーの影響を受けないようにしたい場合はソース DB と同じ AZ にリードレプリカを配置すべきです。

リードレプリカを停止しようとすると

以下のように、リードレプリカは 2 台とも「一時的に停止」がグレーアウトしており、停止できません。

AWS CLI からも停止できません。

リードレプリカを停止しようとする AWS CLI コマンド

aws rds stop-db-instance \
  --db-instance-identifier database-1-secrets-test-read-replica2

▼実行結果

[cloudshell-user@ip-10-132-71-122 ~]$ aws rds stop-db-instance \
>   --db-instance-identifier database-1-secrets-test-read-replica2

An error occurred (InvalidDBInstanceState) when calling the StopDBInstance operation: Cannot stop or start a Read-Replica target instance
[cloudshell-user@ip-10-132-71-122 ~]$

An error occurred (InvalidDBInstanceState) when calling the StopDBInstance operation: Cannot stop or start a Read-Replica target instance
(機械翻訳)StopDBInstance 操作の呼び出し時にエラーが発生しました(InvalidDBInstanceState): Read-Replica ターゲット・インスタンスを停止または開始できません。

ソース DB を停止しようとすると

ソース DB の場合、「一時的に停止」は選択できてしまいます。停止操作を途中まで進められますが、やはりエラーになります。

Cannot stop or start the source instance for a Read-Replica
(機械翻訳)Read-Replicaのソース・インスタンスを停止または開始できない。

AWS CLI からも停止できません。

ソース DB を停止しようとする AWS CLI コマンド

aws rds stop-db-instance \
  --db-instance-identifier database-1-secrets-test

▼実行結果

[cloudshell-user@ip-10-132-71-122 ~]$ aws rds stop-db-instance \
>   --db-instance-identifier database-1-secrets-test

An error occurred (InvalidDBInstanceState) when calling the StopDBInstance operation: Cannot stop or start the source instance for a Read-Replica
[cloudshell-user@ip-10-132-71-122 ~]$

An error occurred (InvalidDBInstanceState) when calling the StopDBInstance operation: Cannot stop or start the source instance for a Read-Replica
(機械翻訳)StopDBInstance 操作の呼び出し時にエラーが発生しました(InvalidDBInstanceState): Read-Replica のソース・インスタンスを停止または開始できません。

以上です。

参考

  • リードレプリカには通常の RDS インスタンスと同じインスタンス料金が発生します。ソース DB と同じストレージ料金も発生するため料金はシンプルに 2 倍になります。
  • ソース DB からリードレプリカへのデータレプリケーションで発生するデータ通信料金は無料です。