こんにちは、遠藤です。
今回は、Alibaba CloudのECSとRDSを使用して運用しているサービスにおいてデータベースのバックアップを取得してOSSに保存する方法について紹介します。
RDSはデフォルトでデータベースのバックアップを保存しているのですが、耐久性の面で不安があります。そこで今回はデータベースのバックアップをより耐久性の高いOSSに保存するのはどうかと考えました。
OSSは複数のハードやゾーンにデータをコピーしておいてくれるため、1つのハードやゾーンが何らかの理由で使えなくなったとしても復元可能であるため耐久性が高いと言えます。
- OSSでバケットを作成
- ECSでRDSのデータベースバックアップを取得してECSからOSSにアップロードするシェルを作成
- aliyunコマンドを使用するための設定
- CRONを使用して定期実行
- 1週間以上経過で標準OSSから移動または削除する設定
- 保存ファイルのダウンロードを制御
OSSでバケットを作成
最初にOSSでバケットを作成します。
ここで注意しておきたいのが、2023年2月時点ではJapan(Tokyo)はマルチゾーン対応しておりませんでした。そのため、OSSにおける耐久性という面で、複数のハードウェアに保存されているという点における恩恵を受けることはできますが、複数のゾーンに保存というより高い耐久性の恩恵を受けることができません。
今回はJapan(Tokyo)でバケットを作成しますが、必要に応じて別リージョンで作成する必要があります。
ECSでRDSのデータベースバックアップを取得してECSからOSSにアップロードするシェルを作成
以下のようなシェルを作成しました。
mysqlのdumpコマンドでダンプを取得した後、CLIを使用してOSSのバケットにダンプファイルを送信しています。
1 2 3 4 5 6 |
#!/bin/sh DATE=`date "+%Y%m%d_%H%M%S"` mysqldump -h {RDSのホスト名} -u {ユーザー名} -p{パスワード} --databases {データベース名} > dump-$DATE.sql /usr/local/bin/aliyun oss cp dump-$DATE.sql oss://{OSSバケット名} rm dump-$DATE.sql</code><code> |
aliyunコマンドを使用するための設定
上記でaliyunコマンドが出てきましたが、aliyunコマンドを使用するには設定が必要です。
最初にパッケージをダウンロードし、aliyunコマンドを実行できるようにします。
1 2 3 |
wget https://aliyuncli.alicdn.com/aliyun-cli-linux-{バージョン}-amd64.tgz tar -xzvf aliyun-cli-linux-{バージョン}-amd64.tgz mv aliyun /usr/local/bin |
次に、aliyunコマンドの初期設定を行います。
最初にaliyunコマンド実行用のRAMユーザーを作成します。
ログイン名及び表示名に任意の名前を設定します。
権限付与で以下の権限を付与します。
- Administarater
- ECSFull
- RDSFull
- OSSFull
最後にアクセスキーを作成します。
CLIで以下を実行すると設定完了です。試しに「aliyun oss ls」とするとバケット一覧が表示されます。
1 2 3 4 5 6 7 |
aliyun configure ------------------------------------------------------------- Access Key Id []: {アクセスキーID} Access Key Secret []: {シークレットアクセスキー} Default Region Id []: ap-northeast-1 Default Output Format [json]: json (Only support json) Default Language [zh|en] en: |
CRONを使用して定期実行
毎日朝の5時にバックアップを取得したいのでCRONに以下を設定します。
1 |
00 5 * * * sh /home/sria/db-backup.sh |
1週間以上経過で標準OSSから移動または削除する設定
バックアップファイルをOSSに送信した後、永久にバックアップファイルを保存しておくわけにはいきません。OSSは5GBまで無料で利用可能ですが、以降は料金が発生します。そこで、OSSのライフサイクルルールを使用して1週間経過したら標準ストレージからより安価なIAストレージへ移行、さらに1週間経過した場合削除するという設定を行いました。
保存ファイルのダウンロードを制御
実際にバックアップファイルが必要な場合は、OSSからダウンロードして使用します。OSSの管理画面からダウンロードできるだけなら問題ないのですが、OSSはデフォルトでオブジェクトごとのURLを発行しており、そのURLを知ってさえいればダウンロードできてしまいます。デフォルトで非公開設定ですので、URLと言っても制限機関などのさまざまなパラメータが付与されていて到底不正アクセスが簡単にできるものではありませんが、念の為URLからのアクセスはできないようにしておくべきです。
そこで、OSSのアンチホットリンク設定を利用します。ホワイトリストにOSS管理コンソールのURLのみを設定することでWEBからオブジェクトごとに発行されるURLにアクセスしてもダウンロードできなくなります。一方、ホワイトリストに登録されているOSS管理画面からはダウンロードできます。