Heroku:从 S3 导入失败



我正在尝试将本地Postgresql数据库导入Heroku,并且 https://devcenter.heroku.com/articles/heroku-postgres-import-export#import-to-heroku-postgres 按照以下步骤操作。

我已成功:

  • 创建了转储
  • 已将其上传到 S3 存储桶
  • 从 AWS CLI 创建的签名链接
  • heroku pg:backups:restore '<SIGNED URL>' DATABASE_URL运行命令(使用我的应用名称添加 -a(。

还原备份的过程正确启动,但随后退出,并显示以下代码:

!    An error occurred and the backup did not finish.
!
!    Could not initialize transfer
!
!    Run heroku pg:backups:info r011 for more details.

打开日志显示:

Database:         BACKUP
Finished at:      2020-01-09 18:49:30 +0000
Status:           Failed
Type:             Manual
Backup Size:      0.00B (0% compression)
=== Backup Logs
2020-01-09 18:49:30 +0000 Could not initialize transfer

我试过:

  • 将文件重新上传到存储桶,
  • 生成新的签名链接,
  • 将应用程序置于维护模式,
  • 我在 IAM 管理服务中创建了一个具有完全 S3 访问权限的用户,并将凭证保存在应用程序环境中
  • ,就像 https://devcenter.heroku.com/articles/s3

不知道从这里去哪里,但会不胜感激任何帮助。(我正在爱好计划中,因此我无法向Heroku的支持寻求帮助(

编辑:我也试过:

  • 删除并重新创建 S3 存储桶
  • 安装 AWS CLI 版本 1,以查看预签名链接的结构是否偶然更改

编辑2:由于我找不到解决方案,因此我暂时选择完全在AWS上迁移主机

确保计算机上存储在默认值~/.aws/凭据设置为您为 heroku 配置创建的凭据。然后,还要确保使用这些凭据和配置创建签名 URL。我必须将默认凭据设置为我在 heroku 配置中输入的凭据。然后,我还必须在~/.aws/config中设置默认区域以匹配存储桶位置。之后应该工作。

如果您使用的是 mac 或 linux.
对不起 Windows 人,这里有一些说明。我认为这是类似的东西。

  1. 在 AWS 上的 IAM 中创建新的访问 ID 和密钥
  2. 将 heroku 配置设置为使用这些凭据heroku config:set AWS_ACCESS_KEY_ID=xxx AWS_SECRET_ACCESS_KEY=yyy
    • 可选(您可能也必须在 heroku 配置中设置存储桶名称(
  3. 在计算机上,将刚刚创建的凭据设置为~/.aws/credentials中的默认值
  4. 在您的计算机上设置与您的存储桶相对应的默认区域~/.aws/config
  5. 创建签名网址aws s3 presign s3://your-bucket-address/your-object
  6. 运行还原heroku pg:backups:restore '<SIGNED URL>' DATABASE_URL

有完全相同的错误,并进行了这 2 次调整。在 S3 控制台中,单击要用于备份的文件。您应该会看到文件的名称,后跟 4 个选项卡。在"常规信息"选项卡中,执行以下操作:

  1. 单击">公开">以使文件可供下载。

  2. 获取该对象的 URL,其中显示对象的 URL

    (应该是类似https://mybucket.s3.amazonaws.com/my.file,您可以通过将该网址粘贴到新的 Chrome 标签页中并点击该网址来测试它是否有效。这应该会触发您的文件下载(

上一次检查工作后,您可以继续

heroku pg:backups restore 'https://mybucket.s3.amazonaws.com/my.file' DATABASE_URL

我遇到了同样的问题,发现问题是我将存储桶的区域设置为us-east而不是us-east-1

最新更新