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?