お手軽便利!!Google Cloud Storageにファイルをバックアップする方法

バックアップやデプロイ用のファイルを置いたり、日頃からS3にはお世話になっています。ただ、ふと「あまりにもS3に依存しているけれども大丈夫かな?」と思いました。

その状況から脱するため、別の場所にも保存することにしました。で、保存先を検討した結果、お財布にも優しそうなGoogle Cloud Storageにしました。(Google Cloud Storageの料金

この記事では、Google Cloud Storageにアクセスするためのセットアップと、バックアップするスクリプトを紹介します。(WordPressの記事と画像をバックアップするスクリプトをサンプルとして掲載しています。)

プロジェクトの作成

まずはGoogle Developer Consoleからプロジェクトを作成します。

「プロジェクトを作成」をクリック

「作成」をクリック

gsutilのインストール

Google Cloud Storageのコマンドラインから操作するため、gsutilというツールをインストールします。インストールは、Googleが公開しているInstall gsutilに従って進めていきます。

gsutilのダウンロード

$ cd /tmp/
$ wget https://storage.googleapis.com/pub/gsutil.tar.gz
$ tar zvxf gsutil.tar.gz
$ mv gsutil $HOME/

パスの追加・アップデート

$ vi ~/.bash_profile

# ~/.bash_profileの一番下に追加します。
export PATH=${PATH}:$HOME/gsutil

$ source ~/.bash_profile
$ gsutil update

gsutilのセットアップ

$ gsutil config

# gsutil configと打つと「Enter the authorization code:」と表示されます。
# そしたら表示されているURLを用いて、以下のようにauthorization codeを入手します。
  1. gsutil configで表示されたURLにアクセスします。
  2. 「GSUtilが次のリクエストをしています:」と表示されるので、「承認する」ボタンをクリックします。
  3. 画面にauthorization codeが表示されるのでコピーします。

「authorization code」をコピー

Enter the authorization code:  <- authorization codeを入力します。
What is your project-id?       <- 作成したプロジェクトの、プロジェクトIDを入力します。

バックアップ用のバケット作成

S3のように、Google Cloud Storageでもバケットを作成して、そこにデータを保存します。Bucketはコンソールからも作成できますが、せっかくなのでgsutilを使ってみます。

gsutilでバケットを作成するには、mbコマンドを使います。mbコマンドはgsutil mb --helpと打つとヘルプを見れます。

※Google Developer Consoleで課金情報を登録していなかったり、課金を有効にしていない場合は、バケット作成時に404エラーが発生します。

$ gsutil mb -l ASIA -c NL gs://remotestance-backup

以上でLocation: ASIAに、Storage Class: Cloud Storage Nearlineの、名前がbackupのバケットが作成されました。

なお、2015年5月28日時点ではStorage Classは3種類あり、今回はバックアップ用途なので一番安い(その代わり可用性が低く、レイテンシが大きい)Cloud Storage Nearlineを選択しています。(Storage Classes

作成したバケットは、gsutil lsで確認することができます。

今回使用するgsutilのコマンド

今回はgsutilのcprsyncコマンドを使用します。Linuxと一緒で、cpはファイルのコピー、rsyncはファイルを同期します。それぞれ、gsutil cp --helpgsutil rsync --helpコマンドでヘルプを参照できます。

バックアップ用のスクリプト

以下のスクリプトをサーバ上に置き、<>で囲まれた部分を修正します。実行すると、Google Cloud Storageに記事と画像がバックアップされます。

#!/bin/sh
GSUTIL_BIN=$HOME/gsutil/gsutil
MYSQLDUMP_BIN=/usr/bin/mysqldump

# 保存先のバケット名
GS_BUCKET_NAME=<BUCKET_NAME>

# MySQLのユーザ名
MYSQL_USER=<MYSQL_USERNAME>
# MySQLのホスト
MYSQL_HOST=<MYSQL_HOST>
# MySQLのパスワード
MYSQL_PASS=<MYSQL_PASSWORD>
# MySQLのDB名
MYSQL_DBNAME=<MYSQL_DBNAME>
# MySQLの、バックアップの一時保存先
MYSQL_TEMPPATH=/tmp/dump.sql
# MySQLの、S3の保存先パス
MYSQL_S3_DESTPATH=mysql/

# アップロードされた画像が保存されているディレクトリのパス
UPLOADED_IMAGE_DIR=<WORDPRESS_PATH>/wp-content/uploads/
# アップロードされた画像の、S3の保存先パス
UPLOADED_IMAGE_S3_DESTPATH=uploaded_images/

# MySQLをGoogle Cloud Storageにバックアップ
$MYSQLDUMP_BIN -cu $MYSQL_USER -h $MYSQL_HOST --password=$MYSQL_PASS $MYSQL_DBNAME > $MYSQL_TEMPPATH
$GSUTIL_BIN cp $MYSQL_TEMPPATH gs://$GS_BUCKET_NAME/$MYSQL_S3_DESTPATH

# 画像をGoogle Cloud Storageにバックアップ
$GSUTIL_BIN rsync -d -c -r $UPLOADED_IMAGE_DIR gs://$GS_BUCKET_NAME/$UPLOADED_IMAGE_S3_DESTPATH

ソースコード

今回のソースコードは、https://github.com/yusukemurayama/blog-samples/blob/master/wordpress_s3_backup/gs_backup.shに公開しました。

2015/6/5 10:00追記: githubにアップしていたソースが古いバージョンだったため更新しました。差分

この記事が役に立った場合、シェアしていただけると励みになります!!