アレアレ

お役立ち情報、お悩み解決情報を発信!

WordPress

S3に保存したUpdraftPlusのバックアップファイルのうち最新のものだけを取得する方法

S3に保存したUpdraftPlusのバックアップファイルのうち最新のものだけを取得する方法

今回は、WordPressのバックアップに、プラグインのUpdraftPlusを利用している人のうち、その保存先をAWSのS3にしている人に伝えたい情報です。

お伝えしたいのは、S3に保存されるUpdraftPlusのバックアップファイルのうち、S3から最新のものだけをAWS CLIを使ってローカルにダウンロードするためのBashのシェルスクリプトです。

UpdraftPlusのバックアップからローカルに最新データのテスト環境を作りたい

私は、UpdraftPlusでバックアップしたWordPressのデータをローカルに持ってきて利用したくなることがたまにあります。

なぜかというと、それを利用すると、本番環境の最新データを利用したWordPressのテスト環境を、ローカル側(自分のパソコン上)に構築できるからです。

そして、UpdraftPlusのバックアップデータを、S3に保存している場合は、そこからローカル側にダウンロードする必要があるわけですね。

最新のもの1セットだけをダウンロードしたい

UpdraftPlusのバックアップデータは、その設定次第で、複数のセットが保存されます。例えば、標準設定では、サーバー上に2セット残すようになっています。

次の図は、S3に保存された、このブログのUpdraftPlusのバックアップしたデータです。

AWSのS3のファイル一覧

よく見るとわかるのですが、「2017-10-21」の1セット、「2017-10-22」の1セットと2つのセットがあることがわかります。これは、私が、UpdraftPlusのバックアップ設定を「1日1回、2セット分残す」としているので、こうなっています。

そして、この2セットあるバックアップのうち、私は、2017-10-22の最新のものだけをダウンロードしたいわけですね。というのも、S3からデータをダウンロードすると、その量に応じて利用料金が増えるからです。

なので、不要なファイルのダウンロードはせず、必要な最新の1セットだけをダウンロードしたいわけです。

最新の1セットをAWS CLIからダウンロードしたい

さて。その最新の1セットのダウンロードにあたり、AWSのウェブ画面から、手動で行うのであれば、それは難しいことではありません。自分で必要なファイルのチェックボックスをチェックし、ダウンロードすれば良いだけだからです。

ただ、私は、そのチェックボックスを選ぶ作業さえ面倒くさくてやりたくありません。ので、AWS CLIを使って、コマンド一発で、最新のものだけをダウンロードしたかったわけです。そこで、それができるBash用のシェルスクリプトを作りました。

次の通りです。

s3path=bucketname/foldername/ #s3のパスを設定する

# db.gzで終わる最新のファイル名を1件を取得する
# (head -1するので、このループは1度しか実行されない)
dbfiles=($(aws s3 ls ${s3path} | sort -nr | awk '{print $4}' | grep "\-db.gz" | head -1))
for dbfile in ${dbfiles[@]}; do
    
    # そのdbをダウンロードする
    echo ${dbfile} "をダウンロードします。"
    aws s3 cp s3://${s3path}${dbfile} .

    ## dbファイルと同じプリフィクスをもつzipファイルをダウンロードする
    zipfiles=($(aws s3 ls ${s3path} | awk '{print $4}' | grep ${dbfile/\-db.gz/}.*zip))
    for zipfile in ${zipfiles[@]}; do
        echo ${zipfile} "をダウンロードします。"
        aws s3 cp s3://${s3path}${zipfile} .
    done
done

このスクリプトでは、自分の環境に合わせて変更する箇所があります。1行目の次の箇所です。

s3path= bucketname/foldername/ #s3のパスを設定する

例えば、私は、UpdraftPlusのS3の保存先として、あるバケットの下に、「blog.areare.net」というフォルダを作り、その中に保存するように設定しています。次の図は、そのUpdraftPlusの設定画面の様子です。

WordPressのUpdraftPlusプラグインのS3の設定例

そして、AWS上で言うと、次の図の「blog.areare.net」フォルダの中に、上述したバックファイルの一群が保存されている言うことですね。

AWS S3のフォルダ一覧

そして、そのフォルダを入れているバケット名が仮に、「mysuperbucket」だったとしましょう。その場合は、一行目は、次のように設定することになります。

s3path=mysuperbucket/blog.areare.net/ #s3のパスを設定する

仮に、フォルダを切らずにバケット直下にバックアップファイルを保存している場合は、次のように設定してください。

s3path=mysuperbucket/ #s3のパスを設定する

あとはファイルにして実行権をつけて実行するだけ

1行目の変更を終えたら、後は簡単です。上のスクリプトを任意のファイル名にして保存し、実行権をつけて実行するだけです。例えば、「dls3.sh」と言うファイル名にしたとしたら次のようにすれば、良いです。

chmod +x dls3.sh
./dls3.sh

上手く実行されると、次のように、UpdraftPlusのバックアップファイルのうち、最新の1セットだけが、S3からローカル側に保存されます。

S3に保存したUpdraftPlusのバックファイルのうち最新の一セットをローカル側に保存できた例

ちなみに、今回、「必要なファイルだけ1セットをダウンロードしたい」と考えていたので、このような方法を取っています。一方、AWS CLIには、「sync」と言うコマンドがあり、S3上の特定のフォルダ内の全てを、ローカル側にコピーするのは、これを利用するのが簡単です。

ただ、そうすると指定したS3上のフォルダ内の全ファイルをローカル側に保存してしまいます。ので、WordPressのバックアップファイルのデータサイズと繰り返す回数次第では、その転送料金が馬鹿にならないことになるのでご注意ください。

Return Top