ファイルバックアップをGASのAPI経由でGoogle Driveに保管する
- 掲載日
はじめに
前の記事でDBをバックアップしました。
今回は、各記事に添付する画像などのアップロードファイルもバックアップしていきます。
バックアップを取得していく
サーバー上にバックアップ
まず、サーバー上にファイルを圧縮してバックアップを配置します。
アップロードファイルは容量が大きくなりやすいので、なるべく圧縮するのが望ましいですが、圧縮形式は様々なので迷い所。
バックアップをローカルに展開する際の手間も考えてLinux標準かWindows標準でいきたいので、「tar.gz」もしくは「zip」形式での保存を候補にします。
(業務の場合は、容量が大きくなりやすければローカル展開の手間などは考えずなるべく圧縮率が高いものにする等、ここはケースバイケースです。)
tar.gzとzipのそれぞれのメリットデメリットを比較します。
| 
 | tar.gz(gzip) | zip | 
|---|---|---|
| メリット | 
 | 
 | 
| デメリット | 
 | 
 | 
| 備考 | まとめてるが、実際はtarとgzipの2つの処理で圧縮自体はgzipの役目。 「一つのことをうまくやる」というUnix哲学に基づいて作られているため、tarがやるのはアーカイブのみ。 | 
自分のブログデータは基本的に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.
- 茨城県在住Webエンジニアです。 PHPなどを業務で使用しています。 趣味ではGoやNuxt、Flutterをやってます。