【问题标题】:What is the best practice for having several AWS Lambdas consuming an external(EC2) Postgres让多个 AWS Lambda 使用外部(EC2)Postgres 的最佳实践是什么
【发布时间】:2018-09-28 02:29:33
【问题描述】:

我在 AWS API 上有 +100 个端点,每个端点都调用一个特定的 Lambda 脚本,连接到外部 Postgres 数据库,获取数据并返回。

我的问题是,如果我这样做,100 个 Lambdas 脚本是否需要在每个脚本中都包含连接详细信息作为环境变量?

这可能不是这样做的方法...在一个地方管理它的最佳方法是什么,例如可以访问所有 lambdas 的全局环境变量?

另外,每个 Lambda 打开一个连接也很糟糕,有没有办法管理一个连接池,可以在其他 lambda 之间共享?

有没有办法把它们分组?

谢谢!

【问题讨论】:

    标签: amazon-web-services amazon-ec2 aws-lambda


    【解决方案1】:

    存储秘密配置以供 Lambda 函数等 AWS 服务访问的推荐方法是 Secrets Manager。您将连接详细信息存储为密钥,并在每个 Lambda 函数代码中根据需要从 Secrets Manager 服务加载值。

    Lambda 函数是故意隔离的,因此无法在不同函数之间共享连接或其他资源。您有时可以在同一函数的连续调用之间共享资源,但您不能依赖它,对于数据库连接之类的东西,它甚至不是一个好的用例。相反,您应该尝试尽可能紧凑地打开和关闭连接,以便其他函数调用可以访问数据库的连接池。

    【讨论】:

    • 谢谢!您认为从 Lambda 连接到外部数据库不是一个好的用例吗?你能建议什么是一个好的用例吗?再次感谢!
    • 从 Lambda 函数连接到数据库以对数据执行操作绝对是 对于 Lambda 的一个很好的用例。我只是说在 Lambda 执行环境中缓存连接资源(可能在 Lambda 的单独调用之间共享)并不谨慎,因为连接将在未知时间内保持打开状态。
    • 您可以将 dbconnection 对象移到 lambda 处理程序之外,这将在后续执行期间缓存它,因为调用同一个容器 (aws.amazon.com/blogs/compute/container-reuse-in-lambda),您可以避免对秘密管理器 (如果 dbconn 对象不为空)以防执行率很高。
    • 嗨 Rajesh,这(无论是否在运行时上下文之外的执行上下文中缓存内容)正是我们正在谈论的内容。我同意缓存从 Secrets Manager 加载的连接字符串是有益的,因为这可以减少函数执行时间和成本。但是缓存打开的数据库连接并不是一个好主意,因为它会将连接锁定到一个容器中,然后该容器将被“冻结”一段未知的时间。
    猜你喜欢
    • 2011-11-02
    • 1970-01-01
    • 2021-10-10
    • 2021-09-17
    • 2015-10-14
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多