RDSのMySQLをエクスポート
今回はデータベース全体をエクスポートします。
EC2にログイン
以下参考ページの「Amazon EC2コンソールを使用した接続」の手順でログインします。
EC2 Instance connectとSSHの違い
セキュリティグループの指定方法が異なります。
EC2 Instance connectはセキュリティグループのインポート設定を0.0.0.0/0と全開放しなければならないのに対してSSHでの接続ではMy IPという指定をして現在自分が使っているグローバルIPからのみにアクセスを限定することができます。このIP開放範囲に関してはSSHのMy IPを使う方が範囲が狭くなりセキュリティリスクは低いと言えます。一方EC2 Instance connectは背後で複数サーバを経由して接続しているようです。先日色々触っていて違いがわかりましたので参考までにメモしておきます。
いずれにしてもセキュリティをもっと高めようとすればやりようはあると思いますが、現実的にどこまで「リスクが想定されるか」や「掛けられるコスト」に応じてセキュリティに関しては決めることが多い気がしますので適宜ご自身の状況に合わせて考えてみてください。
mysqldumpコマンドでエクスポート
以下のコマンドをEC2内で実行することでrdsからデータを取得できます。
$ mysqldump -h rdsendpoint.ap-northeast-1.rds.amazonaws.com -u username -p databasename > backup.sql
lsコマンドなどで確認するとbackup.sqlというファイルが落ちてきているのがわかると思います。
EC2からファイルをダウンロード
scpコマンドを使ってファイルをダウンロードします。前提としてkeyの設置が済んでいることが条件なのでそちらが未設定の方は以下のページを参考に設定してみてください。
$ scp -i /path/to/your/key.pem username@ec2-public-ip:/path/to/file /local/path
これでRDSからSQLデータをダウンロードすることができました。
dockerにインポートしてみる
dockerにインポートする際は以下の記事を参考にしてみてください。
ハマりポイント
以下予想ですがハマりポイントを挙げてみます。
サブネット設定がうまくいっていない
EC2がアタッチされているサブネットがプライベートになっているとそもそもローカルPCとEC2の通信ができない状態になっています。コマンドが通らない時この辺りも原因になるので確かめてみましょう。
セキュリティグループが間違っている
セキュリティグループの設定が正しくできていないとローカルPC→EC2、EC2→RDSの通信が通らなくなります。EC2にアタッチされているセキュリティグループのssh22番ポートが開いているか、RDSにアタッチされているセキュリティグループがEC2からの通信を許可しているかを確認しましょう。
EC2のLinuxユーザーはディストリビューションごとに違う
Linuxディストリビューションによってデフォルトのユーザー名が変わります。Linuxのユーザー名が違う場合、ssh,scpコマンドが失敗します。下記ページを参考に自分の環境に合わせて試してみましょう。
Discussion