python - 使用 Django 在 Heroku 上进行 Redshift 连接

标签 python django database psycopg2 amazon-redshift

我正在尝试在需要在 Redshift 集群上执行只读查询的 Heroku 上部署 Python/Django 应用程序。主要问题是应用程序具有动态 IP 地址,但 Redshift 需要将特定 IP 地址列入白名单

我希望能够使用 psycopg2 引擎或 AWS SDK (Boto) 以编程方式查询集群。一种可能是使用 Heroku 附加组件,例如 Proximo 或 QuotaGuard Static 来获取静态 IP 地址,但是:

  1. 不想通过这些附加组件路由所有流量 - 只有 Redshift 查询
  2. 我不知道如何通过这些服务“包装”数据库查询

有没有其他人处理过这个问题?在此先感谢您的帮助!

我可以在本地连接到 Redshift,但是在将应用程序部署到 Heroku 后我该如何连接?我试过使用 Boto3 SDK 和静态 ip Heroku 附加组件,如 QuotaGuard Static 或 Proximo。

最佳答案

我能够使用 Proximo 插件解决这个问题,方法如下:

https://devcenter.heroku.com/articles/proximo#provisioning-the-proximo-add-on

为了仅路由 Redshift 查询,我使用了此处描述的 Proximo 掩码:

https://devcenter.heroku.com/articles/proximo#configuring-the-proximo-wrapper

已编辑

配置 Proximo 附加组件

$ heroku addons:create proximo:development
$ heroku config | grep PROXIMO_URL
$ heroku addons:create proximo:development

安装 Proximo 包装器

cd ~/myapp
$ curl http://downloads.proximo.io/proximo-stacklet.tgz | tar xz
$ git add bin/proximo vendor/dante
$ git commit -m "add proximo stacklet"

修改您的 Procfile 以将 bin/proximo 添加到任何您希望通过代理转发其连接的命令: web: bin/proximo [你现有的命令]

要使用 Proximo mask :

默认情况下,bin/proximo 包装器将通过您的代理转发来自包装进程的所有出站流量。如果您只想发送一部分流量,可以使用 PROXIMO_MASK 进行限制:

heroku config:set PROXIMO_MASK="172.18.32.0/24"

关于python - 使用 Django 在 Heroku 上进行 Redshift 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34904325/

相关文章:

python 统计模型 : Help using ARIMA model for time series

python - Django "save() takes no arguments (3 given)"

python - 显示其他属性值(如果 django 模板中已知)

database - 苏 postgres : Sorry?

python - 将所有标签值移离轴

python - 预期和预测的数组最终在 scikit 学习随机森林模型中相同

python - 如何使用 python 脚本重命名文件?

python - 通用代码的类型提示

sql - 在连续的 Postgresql 行中查找数据模式

ruby-on-rails - 为什么我无法使用 "rake db:create"创建数据库?