使用 Django 在 Heroku 上的 Redshift 连接

Posted

技术标签:

【中文标题】使用 Django 在 Heroku 上的 Redshift 连接【英文标题】:Redshift Connection on Heroku using Django 【发布时间】:2016-01-20 15:41:07 【问题描述】:

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

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

    不想希望通过这些插件路由所有流量 - 仅 Redshift 查询 我不知道如何通过这些服务“包装”数据库查询

以前有没有其他人处理过这个问题?提前感谢您的帮助!

我可以在本地连接到 Redshift,但是一旦将应用程序部署到 Heroku 上,我该怎么做?我尝试使用 Boto3 SDK 和静态 ip Heroku 附加组件,例如 QuotaGuard Static 或 Proximo。

【问题讨论】:

【参考方案1】:

我可以通过使用 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 掩码:

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

heroku config:set PROXIMO_MASK="172.18.32.0/24"

【讨论】:

如果您要投反对票,请至少发表评论说明原因,现在您对该答案的有效性产生了歧义。谢谢。 我在 Proximo 中使用 postgres 时遇到了麻烦。我最终选择了quotaguard,遇到了同样的问题。我通过电子邮件向他们的客户支持发送了电子邮件,他们创建了一个新脚本(目前处于测试阶段)并以我的方式发送它,其行为类似于 proximo 掩码,但我的 postgres 超时更少。 (环境是nodejs,但需要解决类似的问题)

以上是关于使用 Django 在 Heroku 上的 Redshift 连接的主要内容,如果未能解决你的问题,请参考以下文章

Heroku 上的 Django - 损坏的管理静态文件

在 Heroku 上的 Django 应用中启用 CORS

RabbitMQ 上的 Heroku、Django 和 celery

Heroku Dyno 上的 Django 静态文件

Heroku 上的 webpack 和 django:collectstatic 之前的捆绑

Heroku 上的 Django - 缺少静态文件 manifest.json 文件