こんにちは、ふじみやです。
以前、EC2を利用している場合のバックアップ方法についてご紹介をしましたが、Xserver VPSなどのVPSを利用している場合には当然ながらこの方法では上手くできません。
そこで、今回はUbuntu 22.04にて動作させているマインクラフトのマルチプレイ用サーバーのワールドデータを例に、Amazon S3 というサービスを利用して定期的にデータのバックアップを保存する方法についてご紹介をしたいと思います。
Amazon S3の設定
今回、バックアップを保存するサービスとしては、Amazon Simple Storage Service(通称「S3」)を利用します。
Amazon S3とは
S3は、非常に簡単に申し上げれば、AWSが提供するオンラインストレージサービスです。
ただデータを格納するだけではなく、格納したデータのバージョン管理を行ったり、ライフサイクルポリシーを設定して一定期間経過したデータはAmazon Glacierというアーカイブに移行させたり削除をしたりと、簡単に管理も可能なサービスです。
バケットの作成
まずはバックアップデータを格納する場所である バケット を作成しましょう。
- AWSのマネジメントコンソールにて、S3 と検索してS3の管理画面を表示。
- 表示された バケット の一覧画面にて右上にある バケットを作成 をクリックしてください。
- バケット名を入力(誰かと名称が被った場合エラーとなります)し、タグ と デフォルトの暗号化 は必要に応じて設定のうえ、バケットの作成をクリック。
元の画面に戻ったらバケットの作成完了です。
ライフサイクルルールの設定
毎日バックアップを保存していくと古いデータもずっと残ってしまい、料金がムダにかかってしまいます(S3は保存容量に応じた従量料金制です。)。ですので、もう参照することはないような古いデータは自動的に削除するよう設定をしましょう。
1. バケットの作成が完了したら、バケット名をクリックして上部のタブより 管理 をクリック。
2. ライフサイクルルールを作成する
をクリック。
3. ルール名を入力し、ルールスコープは「バケット内のすべてのオブジェクトに適用」を選択。
4. ライフサイクルルールのアクションでは「オブジェクトの現行バージョンを有効期限切れにする」を選択。
5. 有効期限の日数を入力し、ルールの作成 をクリック。
IAMユーザーの作成
次にサーバーからAWSにアクセスできるよう、IAMユーザーを作成します。
- AWSのマネジメントコンソールよりIAMと検索。
- IAMリソースより ユーザー をクリックし、右上の ユーザーを作成 をクリック。
- ユーザー名を入力し、AWS認証情報タイプは「アクセスキー – プログラムによるアクセス」を選択。
- アクセス許可の設定では「既存のポリシーを直接アタッチ」を選択し、「AdministratorAccess」または「AmazonS3FullAccess」の左側にあるボタンをクリックして次のステップに進んでください。
- 必要に応じてタグを設定のうえ、内容を確認し問題なければ ユーザーの作成 をクリックしてください。
- ユーザーの作成が完了すると アクセスキーID と シークレットアクセスキー の確認画面になりますので、忘れずにメモするかcsvファイルをダウンロードしてください。なくした場合にはユーザーの再作成が必要になります。
ポリシーの選択においては、サーバーにS3以外のAWSとの連携もさせたい場合には「AdministratorAccess」を選択いただいて問題ありませんが、ファイルのバックアップだけを目的とする場合には「AmazonS3FullAccess」を選択するようにしましょう。無駄な権限の付与はセキュリティリスクを高めることになりかねません。
AWS CLIの設定
サーバーからAWSが操作できるように、AWS CLIをインストールします。今回は Ubuntu 22.04 へのインストールを行いますが、Windowsへインストールさせる場合には以下の記事をご参考ください。
AWS CLIのインストール
サーバーにSSH接続し、まずはインストールようにファイルをダウンロードしましょう。
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
ファイルをダウンロードしたら解凍。
unzip awscliv2.zip
解凍が完了したらインストールを実行しましょう。
sudo ./aws/install
インストールが完了すれば、次のコマンドでバージョンの確認が出来るようになります。
aws --version
AWS CLIの設定
インストールが完了したら次に設定をしていきます。
aws configure
すると次のような画面になりますので入力をしていきます。
AWS Access Key ID [None]:IAMユーザーのアクセスキーID
AWS Secret Access Key [None]:IAMユーザーのシークレットアクセスキー
Default region name [None]:ap-northeast-1
Default output format [None]: json
スクリプトの作成
定期実行用のスクリプトを準備します。これにより、毎回手操作でコマンドを入力をする必要がなくなります。
今回は、ホームディレクトリ直下にスクリプトを作成し、バックアップの対象となるファイル・ディレクトリは /home/user/minecraft
に保存されている前提にしていますので、必要に応じてディレクトリ名などはご修正ください。
vim s3-backup.sh
スクリプト内には次のように記載をします。
アップロード先となる S3 のアドレスはs3://バケット名
となりますので、設定したバケット名を忘れた方は AWS の S3管理画面に戻って確認をしましょう。
#!/bin/bash
# バックアップ対象となるファイル・ディレクトリが保存されている場所に移動
cd /home/user/minecraft
# バックアップ対象(world、world_nether、world_the_end)をtar.gz形式で圧縮。
# ファイル名には実行日の日付を自動記入し、バックアップ日が分かるようにしています。
# 例えば「20221209_world_data.tar.gz」という圧縮ファイルが作成されます。
tar -zcf `date "+%Y%m%d"`_world_data.tar.gz world world_nether world_the_end
# 上記で圧縮したアーカイブファイルをS3にアップロード
aws s3 cp `date "+%Y%m%d"`_world_data.tar.gz s3://minecraft-ubuntu-backup
# 不要となったtar.gzファイルをサーバーから削除
rm *.tar.gz
入力が完了したらesc
キーを押下した後に:wq
と入力し、ファイルを保存して終了。保存後は忘れずに権限を付与しましょう。
sudo chmod +x s3-backup.sh
最後にホームディレクトリにて次のコマンドを入力してスクリプトを実行させ、S3にファイルが保存されていればOKです。
./s3-backup.sh
cronの設定
最後にcronを利用して定期的にスクリプトを実行するようにしていきます。
cronの書き方などについては以下の記事にてご説明をしていますので、今回は省略します。
まずはcronの編集画面を表示
crontab -e
編集画面では次を入力しましょう。毎日0時0分に s3-backup.sh のスクリプトを実行するように指定しています。
# Amazon S3への定期バックアップ
0 0 * * * bash -c "/home/user/s3-backup.sh"
入力が完了したら「:wq」と入力し、ファイルを保存して終了。
まとめ
仮想サーバーをAWSからXserver VPSに移行してしばらく経ちますが、やっぱりAWSのサービスは便利ですね。
仮想サーバー自体は利用していなくても今回のようなバックアップファイルを保存するオンラインストレージとして利用するのも簡単ですし、個人として利用する範囲であれば、適切なライフサイクルルールを設定していれば保存データ量が膨大になって料金が高くなることもありませんので、コスト効率に優れていると思います。
しっかりバックアップを取得しておけば、万一荒らしにあっても、過去データから復元ができますのでより安心して遊ぶことができますね。
それではまた。
コメント