Lambda - 存储/传递 Redshift 连接

Posted

技术标签:

【中文标题】Lambda - 存储/传递 Redshift 连接【英文标题】:Lambda - Store/Pass Redshift Connection 【发布时间】:2020-07-10 12:13:53 【问题描述】:

我将并行部署近 300-400 个 Lambda 以实现我的期望之一。 这些是需要执行的非常小的计算,需要从 Redshift 读取计算数据。 我无法解决的唯一挑战是如何将 Redshift 连接传递给每个 Lambda,因为我不会通过 Redshift 为每个 Lambda 创建单独的连接,因为这会在连接方面降低我的集群。 我将使用 pycopg2 库来连接我的 Redshift 集群。

问题是:

是否可以跨所有 Lambda 函数传递 Redshift 连接? 是否可以将连接详细信息存储在我的 Lambda 函数可以读取的中心位置,然后向 Redshift 进行查询?

【问题讨论】:

【参考方案1】:

连接是来自特定客户端的会话,您的每个 Lambda 函数都是一个单独的客户端,因此您不能使用相同的连接。如果您并行运行 300-400 个 Lambda,您可能需要重新考虑这样做。

至于存储连接详细信息,您有 SSM 参数存储,您可以在其中存储整个连接字符串或单个部分。

【讨论】:

【参考方案2】:

我们使用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'],
        )

【讨论】:

我想存储整个连接对象,连接细节不是问题。

以上是关于Lambda - 存储/传递 Redshift 连接的主要内容,如果未能解决你的问题,请参考以下文章

Lambda 函数无法连接到 Redshift:名称解析暂时失败

将 AWS Lambda 连接到 Redshift - 60 秒后超时

从没有 VPC 的 Lambda 连接到公共 Redshift 数据库

如何将 Cloud9 (python) 连接到 VPC 中的 Redshift?

无法从 AWS lambda 连接 AWS redshift

Redshift 存储过程被中止