cronでHerokuのDBを定期的にリストアする
概要
現在、Heroku上で下記のようなデモサイトを運用しています。
オープンソースの営業支援システム「FreeSFA」
https://free-sfa.tk/
デモサイト
https://free-sfa-demo.herokuapp.com/
このデモサイトは使い勝手を確認してもらうために作ったので、登録されたデータを残しておく必要がありません。むしろ定期的にリストアしてきれいな状態を保っておく方が管理する上でも都合が良いです。
ということでherokuコマンドを使って定期的にリストアする方法を調べたのですが、これが意外と見つかりません。
heroku schedulerの情報は大量にヒットしましたが、今回の目的には微妙に合致しません。
heroku pg:backups
には、自動でバックアップする機能はありますが、自動でリストアする機能はありません。
仕方ないので我流でやってみました。
もっとエレガントな方法があるかもしれませんが、とりあえず動いたので、記録を残しておきます。
実行環境
Ubuntu 18.04 (GCEの無料枠で稼働中)
Heroku CLI 7.18.9
DBはHeroku PostgreSQL
作業内容
Heroku CLIのインストール
$ sudo snap install --classic heroku
Herokuにログイン
$ heroku login --interactive
バックアップ実行
$ heroku pg:backups capture -a {アプリ名}
バックアップの確認例
$ sudo snap install --classic heroku
$ heroku login --interactive
$ heroku pg:backups capture -a {アプリ名}
無料版のHerokuでは、バックアップは2世代まで保存できます。
この例ではb006
というIDのバックアップをリストアの対象にしています。
実験した後なのでリストアの履歴も残っています。
$ heroku pg:backups -a {アプリ名}
› Warning: heroku update available from 7.18.9 to 7.18.10
=== Backups
ID Created at Status Size Database
──── ───────────────────────── ─────────────────────────────────── ──────── ────────
b006 2018-11-27 04:06:43 +0000 Completed 2018-11-27 04:06:46 +0000 126.67KB DATABASE
b004 2018-11-15 05:39:09 +0000 Completed 2018-11-15 05:39:11 +0000 126.28KB DATABASE
=== Restores
ID Started at Status Size Database
──── ───────────────────────── ─────────────────────────────────── ──────── ────────
r012 2018-11-27 05:25:06 +0000 Completed 2018-11-27 05:25:08 +0000 126.67KB DATABASE
r011 2018-11-27 04:56:24 +0000 Completed 2018-11-27 04:56:27 +0000 126.67KB DATABASE
r010 2018-11-27 04:50:10 +0000 Completed 2018-11-27 04:50:12 +0000 126.67KB DATABASE
r009 2018-11-27 04:48:48 +0000 Completed 2018-11-27 04:48:50 +0000 126.67KB DATABASE
r008 2018-11-27 04:47:53 +0000 Completed 2018-11-27 04:47:55 +0000 126.67KB DATABASE
r007 2018-11-27 04:07:15 +0000 Completed 2018-11-27 04:07:17 +0000 126.67KB DATABASE
r005 2018-11-27 02:43:43 +0000 Completed 2018-11-27 02:43:45 +0000 126.28KB DATABASE
r003 2018-11-05 01:20:02 +0000 Completed 2018-11-05 01:20:04 +0000 120.90KB DATABASE
r002 2018-11-05 01:19:08 +0000 Completed 2018-11-05 01:19:11 +0000 120.90KB DATABASE
リストア用バッチファイルの作成例
crontabに直書きするとメンテナンスしにくくなるので、シェルスクリプトを書きます。
#!/bin/bash
date
/snap/bin/heroku pg:backups restore -a {アプリ名} --confirm {アプリ名}
crontabの例
毎朝4時にリストアされるようにしました。
0 4 * * * ~/devel/heroku/restore.sh >> ~/log/heroku/restore.log 2>&1
動作確認
crontabを修正し、数分後にリストアされるようにして、架電実績と訪問実績を入力しました。
数分後。
$ cat restore.log
2018年 11月 27日 火曜日 16:58:01 JST
› Warning: heroku update available from 7.18.9 to 7.18.10
Starting restore of b006 to postgresql-cubic-14048... done
Use Ctrl-C at any time to stop monitoring progress; the backup will continue restoring.
Use heroku pg:backups to check progress.
Stop a running restore with heroku pg:backups:cancel.
Restoring... done
雑感
cronで実行したときにHeroku CLIのログイン状態が保持されるかどうかが心配でしたが、普通に動いてくれました。
これでデモサイトのDBはきれいな状態に保たれるはずです。
Author And Source
この問題について(cronでHerokuのDBを定期的にリストアする), 我々は、より多くの情報をここで見つけました https://qiita.com/sikkim/items/dd5b9abce323c6e30b89著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .