我正在尝试在需要在 Redshift 集群上执行只读查询的 Heroku 上部署 Python/Django 应用程序。主要问题是应用程序具有动态 IP 地址,但 Redshift 需要将特定 IP 地址列入白名单。
我希望能够使用 psycopg2 引擎或 AWS SDK (Boto) 以编程方式查询集群。一种可能是使用 Heroku 附加组件,例如 Proximo 或 QuotaGuard Static 来获取静态 IP 地址,但是:
- 我不想通过这些附加组件路由所有流量 - 只有 Redshift 查询
- 我不知道如何通过这些服务“包装”数据库查询
有没有其他人处理过这个问题?在此先感谢您的帮助!
我可以在本地连接到 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/