cron으로 Heroku DB를 정기적으로 복원

개요



현재 Heroku에서 아래와 같은 데모 사이트를 운영하고 있습니다.

오픈 소스 영업 지원 시스템 "FreeSFA"
h tps : // f Ree-s Fu. tk/

데모 사이트
h tps : // f Ree-s Fu-에서도. 어리석은 p. 코m/

이 데모 사이트는 사용성을 확인하기 위해 만들어졌기 때문에 등록된 데이터를 남길 필요가 없습니다. 오히려 정기적으로 복원하여 깨끗한 상태를 유지하는 것이 관리하는 데도 편리합니다.

그래서 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 {アプリ名}

백업 확인 예



무료 버전의 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에 직접 쓰면 유지 보수가 어렵기 때문에 쉘 스크립트를 작성합니다.

restore.sh
#!/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

입력한 가전 실적과 방문 실적이 0건으로 돌아왔습니다.


잡감



cron에서 실행했을 때 Heroku CLI의 로그인 상태가 유지되는지 걱정했지만 정상적으로 움직였습니다.
이제 데모 사이트의 DB는 깨끗한 상태로 유지되어야합니다.

좋은 웹페이지 즐겨찾기