Lambda - сохранить / передать соединение Redshift - PullRequest
1 голос
/ 10 июля 2020

Я буду развертывать около 300-400 Lambda параллельно, чтобы достичь одного из моих желаемых ожиданий. Это очень небольшие вычисления, которые необходимо выполнить, для которых необходимо, чтобы данные вычислений были прочитаны из Redshift. Единственная проблема, которую я не могу решить, - это то, как я передам соединение Redshift каждой из лямбд, потому что я не буду создавать отдельное соединение для каждой лямбды через Redshift, поскольку это снизит мой кластер с точки зрения подключения. Я буду использовать библиотеку pycopg2 для подключения к моему кластеру Redshift.

Вопрос:

  • Можно ли передать соединение Redshift через все лямбда-функции?
  • Можно ли хранить детали соединения в центральном месте, откуда моя лямбда-функция может их прочитать, а затем сделать запрос в Redshift?

Ответы [ 2 ]

0 голосов
/ 16 июля 2020

Мы используем secretsmanager для хранения информации о нашем подключении.

Вот пример python кода, который мы используем, просто замените с вашим секретом.

        # Get connection info
        scm = boto3.client("secretsmanager")
        r = scm.get_secret_value(
            SecretId=<secret_name>,
        )

        cred = r['SecretString']
        cred = json.loads(cred)

        # Connecting to DB
        conn = psycopg2.connect(
            host=cred['host'],
            port=cred['port'],
            dbname=cred['dbname'],
            user=cred['username'],
            password=cred['password'],
        )
0 голосов
/ 11 июля 2020

Connection - это сеанс от определенного c клиента, и каждая из ваших функций Lambda является отдельным клиентом, поэтому вы не можете использовать одно и то же соединение. Если вы запускаете 300-400 лямбда-выражений параллельно, вам, возможно, захочется пересмотреть это.

Что касается хранения деталей соединения, у вас есть хранилище параметров SSM, где вы можете хранить либо всю строку соединения, либо отдельные части.

...