【问题标题】:AWS lambda call dynamo db through private network or bypass internet trafficAWS lambda 通过私有网络调用 dynamo db 或绕过互联网流量
【发布时间】:2018-08-17 23:24:09
【问题描述】:

我有一个 lambda 函数,它每 15 分钟运行一次,并在 DynamoDB 中保存一些数据。

现在我想保护我的 lambda 发出的 DynamoDB 调用,这样请求就不会通过 Internet,而是通过 Amazon 内部网络。不过这里不涉及 EC2 实例。

我看到了一些使用 PrivateLink 的建议,它将 Dynamo 绑定到 VPC 终端节点,以便从 EC2 实例发出的调用始终通过内部网络绕过 Internet。

我想知道这样的配置对于调用 DynamoDB 的 lamda 是否可行,因为 lamda 本身不在任何 EC2 实例中运行并且相当无服务器?

【问题讨论】:

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


    【解决方案1】:

    我要说的第一件事是,您在 Lambda 和 DynamoDB 之间的所有流量都经过签名和加密,所以这通常就足够了。

    有些用例,最常见的合规原因,是不够的。在这种情况下,您可以将 Lambda 函数部署到您制作的 VPC 中,并使用私有 VPC endpoint for DynamoDB 配置 VPC。通常,VPC 将配置为没有 Internet 网关或 NAT,因此它没有到公共 Internet 的出口路由。请注意,您的 Lambda 函数启动延迟会比平时高,因为每个 Lambda 函数环境都需要附加一个 ENI 才能访问私有端点。

    Configuring a Lambda Function to Access Resources in an Amazon VPC

    【讨论】:

      【解决方案2】:

      如果您不需要访问 VPC 中的资源,AWS 建议不要在 VPC 中运行 AWS Lambda 函数。来自AWS Lambda Best Practices

      除非必须,否则不要将您的 Lambda 函数放入 VPC。 除了使用它来访问您无法公开公开的资源(例如私有 Amazon 关系数据库实例)之外,没有任何好处。 Amazon Elasticsearch Service 等服务可以通过 IAM 使用访问策略进行保护,因此公开终端节点是安全的,并且不需要您在 VPC 中运行您的函数来保护它。

      在 VPC 中运行 Lambda 函数会增加额外的复杂性,这会对可扩展性和性能产生负面影响。 VPC 中的每个 Lambda 函数都需要一个弹性网络接口 (ENI)。供应 ENI 的速度很慢,并且您可以拥有的 ENI 数量有限,因此当您扩大规模时,您可能会遇到 ENI 短缺的情况,从而阻止您的 Lambda 函数进一步扩大规模。

      【讨论】:

      • 如果有人现在遇到这个问题,这不再是一个问题(至少不是以前的规模)。 AWS 现在使用共享 ENI 并在函数创建而不是调用时附加它们。您仍应注意 ENI 限制(截至此评论发布时,每个 VPC 250 个),但只要安全组/子网组合相同,它们就会共享 ENI。 aws.amazon.com/blogs/compute/…
      • 这里提到的@KenLFG 很重要。 AWS 在过去几年中对 lambda 进行了很大改进。我们在 VPC 中遇到的 Lambda 反模式不再是反模式。
      【解决方案3】:

      这是一种方法。

      第 1 步)在 VPC 中部署您的 lambda。

      步骤 2) 为 DynamoDB 创建 VPC 端点。

      这应该会有所帮助:https://aws.amazon.com/blogs/aws/new-vpc-endpoints-for-dynamodb/

      【讨论】:

        猜你喜欢
        • 2020-08-28
        • 1970-01-01
        • 2015-03-03
        • 1970-01-01
        • 1970-01-01
        • 2016-09-05
        • 2010-10-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多