Кассандра Астра безопасно развертывается на героку
Я разрабатываю приложение с использованием python и Cassandra(поставщик Astra) и пытаюсь развернуть его на Heroku.
Проблема заключается в том, что подключение к базе данных требует, чтобы почтовый файл учетных данных присутствовал локально - https://docs.datastax.com/en/astra/aws/doc/dscloud/astra/dscloudConnectPythonDriver.html'/path / to / secure- connect-database_name.zip 'и Heroku не поддерживает загрузку файлов учетных данных.
Я могу настроить имя пользователя и пароль как переменную среды, но файл почтового индекса учетных данных не может быть настроен как переменная среды.
heroku config:set CASSANDRA_USERNAME=cassandra
heroku config:set CASSANDRA_PASSWORD=cassandra
heroku config:set CASSANDRA_KEYSPACE=mykeyspace
Есть ли способ, которым я могу использовать zip-файл в качестве переменной среды, я подумал об извлечении всех файлов и настройке каждого файла в качестве переменной среды в Heroku.
но я не уверен, что указать вместо кластера (cloud =cloud_config, auth_provider=auth_provider), если я начал использовать извлеченные файлы из переменной среды?
Я знаю, что могу проверить почтовый индекс учетных данных внутри моего частного репозитория git таким образом, чтобы он работал, но проверка учетных данных не кажется безопасной.
Еще одна идея, которая пришла мне в голову, заключалась в том, чтобы сохранить его в S3, получить файл во время развертывания и извлечь его во временный каталог для использования.
Любые указатели или помощь действительно приветствуются.
1 ответ
Если вы можете зарегистрировать безопасный пакет в репо, это должно быть легко - вам просто нужно указать на него из карты конфигурации облака и взять имя пользователя / пароль из настроенных секретов через переменные среды:
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, поэтому файл не будет доступен в репозитории, плюс при необходимости будет проще обменять безопасные пакеты.