尝试将 AWS S3 数据库备份到 heroku postgres 时出现 403 错误
Posted
技术标签:
【中文标题】尝试将 AWS S3 数据库备份到 heroku postgres 时出现 403 错误【英文标题】:403 error when trying to backup AWS S3 database to heroku postgres 【发布时间】:2015-10-01 21:12:06 【问题描述】:我正在尝试在 Heroku 上部署我的 Django 应用程序。我创建了一个 Heroku Postgres 数据库,我想从 AWS S3 将一个现有的 PostgreSQL 数据库导入其中。我跟着tutorial in the Heroku docs 到了这封信。我创建了一个 Heroku Postgres 数据库并将其提升到主数据库。我按照Heroku's AWS S3 tutorial 设置所有配置变量,以便heroku 可以访问我的S3 存储桶。但是当我运行 heroku pg:backups restore 'https://s3.amazonaws.com/<bucket name>/<database name>' DATABASE_URL
时,我收到一条错误消息,提示“发生错误,您的备份未完成。”
这是heroku pg:backups info
的完整输出:
=== Backup info: r012
Database: BACKUP
Started: 2015-07-13 13:43:30 +0000
Finished: 2015-07-13 13:43:30 +0000
Status: Failed
Type: Manual
Backup Size: 0.00B
=== Backup Logs
2015-07-13 13:43:30 +0000: 2015/07/13 13:43:30 aborting: could not write to output stream: Expected HTTP Status 200, received: "403 Forbidden"
2015-07-13 13:43:30 +0000: pg_restore: [custom archiver] could not read from input file: end of file
2015-07-13 13:43:30 +0000: waiting for restore to complete
2015-07-13 13:43:30 +0000: restore done
2015-07-13 13:43:30 +0000: waiting for download to complete
2015-07-13 13:43:30 +0000: download done
当然,由于这是一个 403 错误,我认为我的身份验证有问题。我已经运行heroku config
并三重检查了我所有的配置变量。 AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY 和 DATABASE_URL 环境变量都是正确的,并且与我在 AWS 和 Heroku Postgres GUI 中看到的一致。
为什么我会看到此错误消息?
【问题讨论】:
【参考方案1】:windows用户;heroku pg:backups:restore "https://s3.amazonaws.com/me/items/3H0q/mydb.dump" DATABASE_URL
根据官方文档,如果您使用的是 Windows,请务必在远程 url 周围使用双引号。 see official docs
【讨论】:
【参考方案2】:从 AWS 拉入 Heroku 时出现同样的错误
如果在 AWS 存储桶内的转储文件上未正确设置权限,Heroku 有时会拒绝导入备份/转储文件。 (如果 Heroku 无法访问该文件,则无法上传。)
您可以在“操作”>“属性”按钮下找到权限设置,或者单击文件,然后单击右侧的“属性”按钮。
一个简单的解决方法是暂时公开转储文件,进行 heroku 恢复,然后锁定或删除转储文件。
【讨论】:
【参考方案3】:好吧,我觉得自己很笨,但问题的原因是我忘记在我的 AWS url 中的文件名末尾添加“.dump”。
【讨论】:
别难过,你的评论对我有帮助。我只能通过散列 url 访问我的数据库转储,因此没有 .dump 扩展名,导致同样的问题。谢谢!以上是关于尝试将 AWS S3 数据库备份到 heroku postgres 时出现 403 错误的主要内容,如果未能解决你的问题,请参考以下文章
从 heroku 访问 s3 内容时,AWS 访问密钥显示在浏览器 url 中
允许用户访问特定 S3 存储桶进行备份的 AWS IAM 策略