VPSサーバー上のWordPressをAWS S3にバックアップ


やりたいこと

さくらのVPSサーバー上にあるWordPressのバックアップを取りたい
1日に1回バックアップを取りたい
バックアップデータの保持先はAWS S3上にする

私の技術レベル

  • さくらのVPS/さくらのクラウドのようなIaaS環境でのWebサーバー構築は何度か行っていて、Linux操作には慣れている
  • AWSは精通していないが業務でなんとなく使っている
  • S3は「安くファイルをおける場所。読み書きのためにAWSキーとAWS CLIコマンドが必要」というくらいの理解だった。

設計

  • MySQL DB dumpデータとWordPressディレクトリをgzip圧縮し、awsコマンドでS3にPUT
  • AWS S3アクセスキーはVPSサーバー上に保持
  • VPSサーバー上でcronで毎日AM02:00にバッチ実行
  • S3上には過去10日分だけ保持

TODO

  • 1.AWS S3バケットの作成
  • 2.適切な権限のアクセスキー発行
  • 3.ライフサイクルポリシーの設定
  • 4.「MySQL DB dumpデータとWordPressディレクトリをgzip圧縮し、awsコマンドでS3にPUT」を行うshファイルを作成
  • 5.shファイルを手動実行し、バックアップ成功することを確認
  • 6.shファイルを毎日実行するようcron設定

1.AWS S3バケットの作成


バージョニングだけチェックを入れて、他はデフォルトのまま、バケット作成。過去10日分のバックアップを同じファイル名で済ますためのバージョニング

2.IAM設定をし、適切な権限のアクセスキー発行

作成したS3バケットに対してのみ操作可能というポリシーを作成→その権限だけを持つユーザー作成、と進める。

まずAWS IAM画面設定にて、「作成したS3バケットに対してのみ操作可能」というポリシーを作る。[ポリシーの作成]から作っていく。


サービス=S3
アクション=*(全て)
リソース=object -> ARNの追加でさっき作成したS3バケットのARNを指定


(はじめ、リソース=bucketと指定してしまい後で詰まった。画像のようにobjectリソースを指定しないといけないよう。)

 
 
次にIAMユーザーを作成する。そのユーザーはAWS Webダッシュボードにログインさせたいユーザーではなく、CLI用ユーザーなので アクセスの種類:プログラムによるアクセス を選択。

ユーザーに、先ほど作成したポリシーのみをアタッチしユーザー作成。
適切な権限のアクセスキーが発行完了。

3.ライフサイクルポリシーの設定


[+ライフサイクルルールの追加]をする

バックアップデータ置き場専用のバケットのため、バケット内のすべてのオブジェクトに適用

S3にPUTされた最新バージョンのファイルは削除して欲しくないので「現行バージョン」にはチェックを入れない。
最新バージョン以前のバージョンのファイルは10日分保持させればよい、つまりバックアップファイルは10日分保持されてればよいので「以前のバージョン」をチェックし、10日と設定。

4.shファイルを作成。「MySQL DB dumpデータとWordPressディレクトリをgzip圧縮し、awsコマンドでS3にPUT」を行う

python3,pip,aws-cliのインストールについては省略
awsコマンドのインストール完了後、 aws configure して、作成したIAMユーザーのアクセスキー+シークレットキーを設定する。

ブラウザでAWS S3コンソール上でバケットに適当なファイルをアップロードし、

aws s3 ls s3://yourbacketname

でバケット内のファイル表示できることを確認する。

5.shファイルを手動実行し、バックアップ成功することを確認

~/backup/backup.sh
#!/bin/sh#

# WordPressのディレクトリをコピー。管理画面からアップロードされた画像などをバックアップ
\cp -rf /var/www/mywordpress.com ~/backup
# DBdumpデータをバックアップ
mysqldump -u MYSQL_USER -pMYSQL_PASS -h MYSQL_HOST MYSQL_DB > ~/backup/mywordpressdb_dump.sql

# ディレクトリやsqlファイルを圧縮
tar czf ~/backup/mywordpress.com.tar.gz ~/backup/mywordpress.com
tar czf ~/backup/mywordpressdb_dump.tar.gz ~/backup/mywordpressdb_dump.sql

# S3にPUT
aws s3 cp ~/backup/mywordpress.com.tar.gz s3://yourbacketname/mywordpress.com.tar.gz
aws s3 cp ~/backup/mywordpressdb_dump.tar.gz 
s3://yourbacketname/mywordpressdb_dump.tar.gz 

試行錯誤しながら、↑のようになった。tarでアラームでるが

sh ~/backup/backup.sh

アップロード成功を確認

6.shファイルを毎日実行するようcron設定

crontab -e
0 2 * * * /home/yourname/backup/backup.sh

多分動くので10日後確認します