如何从日常备份中自动还原Heroku Postgres登台数据库?

时间:2019-06-12 21:14:35

标签: automation restore heroku-postgres staging backups

我已计划将Heroku生产数据库安排为进行每日备份,并且我也想每天将备份还原到暂存数据库中。这样,我可以使登台盒与生产保持同步,以进行测试/调试,并自动运行恢复过程的每日测试。

我试图安排一个bash脚本在临时框上运行以执行还原。我使用的脚本使用Heroku CLI提取最新备份的URL并执行还原。我遇到的问题是认证Heroku CLI。由于无法在dyno上打开浏览器,因此需要找到一种安全的身份验证方法。

我应该从某个地方提取.netrc文件吗?给Dyno CLI甚至是个好主意吗?是否有更好的方法来解决此问题,而无需站立另一台服务器来运行恢复?

1 个答案:

答案 0 :(得分:0)

您可以在暂存环境的HEROKU_API_KEY env变量中放置一个授权令牌。使用heroku auth:token生成令牌。

然后使用heroku config:set HEROKU_API_KEY=token -a staging

设置登台令牌

从安全角度考虑,这意味着您的登台环境几乎可以完全访问您的生产环境。

一种更安全的方法是,在生产应用程序或新应用程序上运行计划任务,仅将数据库备份复制到暂存应用程序可以访问的S3存储桶中。登台应用程序从s3存储桶中的备份还原。暂存不需要访问生产。

无论如何,这是一个好主意-如果您失去对Heroku的访问权限,则仍然可以访问备份。

为此提供了一个构建包-https://github.com/kbaum/heroku-database-backups。我鼓励您阅读构建包中的代码-这是一个非常简单的过程。我也可以派生buildpack,或者只是编写自己的代码,因为它将完全访问您的生产环境。我永远不会相信第三方构建包。

如果您的工作从生产数据库中清除敏感信息以进行登台,则奖励积分。可以通过以下方式做到这一点:

  • 将生产备份还原到第二个数据库
  • 从第二个数据库中清除敏感信息
  • 备份第二个数据库
  • 将第二个数据库备份推送到S3存储桶。