ファイルバックアップをGASのAPI経由でGoogle Driveに保管する

掲載日

はじめに

前の記事でDBをバックアップしました。

今回は、各記事に添付する画像などのアップロードファイルもバックアップしていきます。

バックアップを取得していく

サーバー上にバックアップ

まず、サーバー上にファイルを圧縮してバックアップを配置します。

アップロードファイルは容量が大きくなりやすいので、なるべく圧縮するのが望ましいですが、圧縮形式は様々なので迷い所。

バックアップをローカルに展開する際の手間も考えてLinux標準かWindows標準でいきたいので、「tar.gz」もしくは「zip」形式での保存を候補にします。
(業務の場合は、容量が大きくなりやすければローカル展開の手間などは考えずなるべく圧縮率が高いものにする等、ここはケースバイケースです。)

tar.gzとzipのそれぞれのメリットデメリットを比較します。

 

tar.gz(gzip)

zip

メリット

  • Linuxにプレインストールされてる。
  • windowsにプレインストールされている。
  • windowsのデフォルトなので普及率が高い。
    非エンジニア向けや相手の環境が分からない場合ならこっちの使用が安心。
  • パスワード付けたり色々できる

デメリット

  • Windowsでは7zip等専用ソフトを使わないと解凍できない。

備考

まとめてるが、実際はtarとgzipの2つの処理で圧縮自体はgzipの役目。

「一つのことをうまくやる」というUnix哲学に基づいて作られているため、tarがやるのはアーカイブのみ。
gzipがやるのは圧縮のみ、ということらしい。

 
tar.gz と zipのメリットデメリット

 

自分のブログデータは基本的にsquooshでwebpに圧縮してアップロードしているので

  • さほど大容量にはならない
  • 開発環境はwindows
     

なので諸々メリットを考えると、サーバーにzipコマンドをinstallして使用するのが簡単かつ対応の幅が広いと思われるので、「zip」形式を採用しました。

サーバーにはyumコマンドでzip、unzipを入れておきます。

yum -y install zip unzip

以下のスクリプトで圧縮してサーバー上にバックアップを配置します。

zip -r [バックアップファイルを配置したいパス]/[バックアップファイル名].zip [バックアップしたいディレクトリパスもしくはファイルパス]

外部サーバーにバックアップ

前の記事のGASの機能を使ってバックアップをGoogle Driveに配置します。
これでサーバー外にDBとアップロードファイルを逃がせたので、万が一サーバーに何か起きても安心です。

バックアップスクリプトの全体が以下。こちらをcronに登録すれば定期的にバックアップを取得し、外部にデータを逃がしてくれます。

#!/bin/bash

filename='[バックアップファイル名]'
backupTo='[バックアップ配置ディレクトリパス]'
backupFrom='[バックアップ元のディレクトリパス]'

zip -r "$backupTo""$filename" "$backupFrom"

URL='https://script.google.com/macros/s/[GASのdeployId]/exec'
DATA="$(base64 $backupTo$filename)"
curl -L -d @- $URL << EOM
{
    "filename": "[Google Driveに配置する時のバックアップファイル名]",
    "file": "${DATA}"
}
EOM

おわりに

前の記事とあわせて、DBとアップロードファイルのバックアップを取得して外部サーバーに配置することが出来るようになりました。

Googleのサーバーとさくらインターネットのサーバーが同時に吹き飛ばない限りは何か起きても容易に復旧が可能になります。

記事の作成者のA.W.のアイコン

この記事を書いた人

A.W.
茨城県在住Webエンジニアです。 PHPなどを業務で使用しています。 趣味ではGoやNuxt、Flutterをやってます。

Comment