記事概要
- 趣味で使っているRedmineをコンテナ環境に移行したいなと思って、Redmine内のMySQLをマネージドサービスのRDSに移行しようとした
- セキュリティグループなど適切に設定した(つもりだった)
- バックアップファイルをEC2(redmineが稼働中)からRDSにエクスポートしようとしたところでエラー
- 最初は接続出来たような気がするのに、しばらく日にちが経った後に接続しようとしたらエラー…?
遭遇したエラー
普通につながるかどうか具体的にはこんなエラーが出る
ubuntu@ip-10-0-0-167:~$ mysql -h xxxxxx-database-1.xxxxxx.ap-northeast-1.rds.amazonaws.com -u <username> -p
ERROR 2003 (HY000): Can't connect to MySQL server on 'xxxxxx-database-1.cluster-xxxxxx.ap-northeast-1.rds.amazonaws.com' (60)
普通にググると「セキュリティグループの設定見直せ!」というアドバイスが出てくるが、そんなことはわかっている。
原因調査
RDSの基本がわかっていなかったが、
- 複数のAZをまたがったサブネットグループを登録する
- セキュリティグループも複数登録可能
という条件でサブネットを登録する必要がある。
ということでVPCを選択した時に全てのサブネットをグループに含めてしまった。
これがいけない。
本来ならプライベートサブネットA,Bでグループを作るつもりが、全然関係ないプライベートサブネットCが紛れ込んでいた。
プライベートサブネットCのネットワークACLはガチガチに制限されているため、アクセス元のコンテナがあるサブネットから通信は出来ない。
最初は接続出来たという謎についても何となく原因がわかった。
RDSではプライマリインスタンスとスタンバイインスタンスが複数のサブネットに配置される。
そうなるとプライマリインスタンスが…
①サブネットA/Bに配置された場合 → 接続可能
②サブネットCに配置された場合 → 接続不可
という現象が起きる。
今回は最初①で接続出来たのに、RDSのインスタンスの設定をもう一回やり直した時に②になってしまったようだ。
対処方法
サブネットグループに登録するサブネットのネットワークACLを確認する。