Heroku:从 S3 导入失败

Sim*_*ivi 5 postgresql heroku amazon-s3 amazon-web-services heroku-postgres

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

我已经成功:

  • 创建了一个转储
  • 将其上传到 S3 Bucket
  • 从 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.
Run Code Online (Sandbox Code Playgroud)

打开日志显示:

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
Run Code Online (Sandbox Code Playgroud)

我试过了:

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

不知道从哪里开始,但希望得到任何帮助。(我在业余计划中,因此我无法向 Heroku 寻求帮助)

编辑:我也试过:

  • 删除并重新创建 S3 存储桶
  • 安装 AWS CLI 的第 1 版以查看预签名链接的结构是否偶然发生了变化

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

小智 7

确保计算机上存储的~/.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. 创建签名 URLaws s3 presign s3://your-bucket-address/your-object
  6. 运行恢复heroku pg:backups:restore '<SIGNED URL>' DATABASE_URL

  • 这对我来说是关键。我的默认区域设置在“~/.aws/config”中,但包含转储文件的存储桶位于不同的区域。当我将两者对齐时,预签名的 URL 开始工作。谢谢! (4认同)

che*_*are 1

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