3

我正在使用 python 和 Cassandra(Astra 提供程序)开发一个应用程序,并尝试将它部署在 Heroku 上。

问题是连接到数据库需要凭证 zip 文件在本地存在- https://docs.datastax.com/en/astra/aws/doc/dscloud/astra/dscloudConnectPythonDriver.html '/path/to/secure- connect-database_name.zip' 和 Heroku 不支持上传凭证文件。

我可以将用户名和密码配置为环境变量,但凭证 zip 文件不能配置为环境变量。

heroku config:set CASSANDRA_USERNAME=cassandra
heroku config:set CASSANDRA_PASSWORD=cassandra
heroku config:set CASSANDRA_KEYSPACE=mykeyspace

有什么方法可以使用 zip 文件作为环境变量,我想提取所有文件并将每个文件配置为 Heroku 中的环境变量。

但是如果我开始使用从环境变量中提取的文件,我不确定要指定什么而不是Cluster(cloud=cloud_config, auth_provider=auth_provider) ?

我知道我可以在我的私人 git 存储库中检查凭证 zip,但检查凭证似乎并不安全。

我想到的另一个想法是将其存储在 S3 中并在部署期间获取文件并将其提取到临时目录中以供使用。

非常感谢任何指示或帮助。

4

1 回答 1

7

如果您可以将安全包签入 repo,那么它应该很容易 - 您只需从云配置映射中指向它,并通过环境变量从配置的机密中获取用户名/密码:

from cassandra.cluster import Cluster
from cassandra.auth import PlainTextAuthProvider
import os

cloud_config = {
    'secure_connect_bundle': '/path/to/secure-connect-dbname.zip'
}
auth_provider = PlainTextAuthProvider(
    username=os.environ['CASSANDRA_USERNAME'], 
    password=os.environ['CASSANDRA_PASSWORD'])
cluster = Cluster(cloud=cloud_config, auth_provider=auth_provider)
session = cluster.connect()

关于将文件存储在 S3 上并下载的想法 - 也不是很糟糕。您可以在脚本本身中实现它以获取文件,并且您也可以使用环境变量来传递 S3 凭据,因此在存储库中将无法访问文件,此外,如果需要,交换安全包会更容易。

于 2020-06-30T06:06:56.067 回答