首页 > 解决方案 > 将 Lambda 与 VPC 中的资源连接起来

问题描述

Redshift 集群位于 VPC 中,它没有直接暴露于 Internet,但可以通过 ssh 隧道访问。

我有一个需要连接到互联网和这个 Redshift 集群的 lambda 函数。

更自然的方法是什么?

我应该尝试从我的 lambda 中通过 ssh 隧道连接 Redshift 公共 IP 吗?我将如何实现这一目标?

我是否应该将我的 lambda 放入另一个“互联网开放”VPC 并允许 VPC 对等互连?这是否意味着安全问题?

非常感谢。

标签: amazon-web-servicesaws-lambdaamazon-redshiftamazon-vpc

解决方案


你基本上有两个选择:

  • 将 Lambda 函数放在与 Amazon Redshift 集群相同的 VPC 中,或者
  • 将 Lambda 函数放在VPC之外

如果 Lambda 函数在同一个 VPC 中以便它可以与 Redshift 集群通信,并且它还需要 Internet 访问,那么配置将是:

  • 将 Lambda 函数附加到私有子网
  • 在公有子网中创建NAT 网关NAT 实例并更新
  • 更新私有子网的路由表以将 Internet 绑定流量发送到 NAT 网关/NAT 实例

如果 Lambda 函数位于 VPC之外,则需要一些访问 Redshift 集群的方法。这会相当混乱,并且可能对安全性不利(例如,将端口暴露给 Internet)。我建议不要这样做。

我通常不会建议第三种方法,但可能适合您。它涉及:

  • 将 Lambda 函数与公有子网关联
  • 将弹性 IP 地址附加到由 Lambda 函数创建的弹性网络 Internet (ENI)

当 Lambda 函数附加到子网时,它会创建一个 ENI。这是 Lambda 函数和 VPC 之间的连接。(实际上,它是运行 Lambda 函数的容器和 VPC 之间的连接。)

我注意到我可以将弹性 IP 地址附加到 ENI,从而授予对 Lambda 函数的 Internet 访问权限。但是,ENI 可能由 Lambda 服务创建/销毁,因此这不一定会继续工作。也就是说,ENI 可能不会持续存在,因此弹性 IP 地址可能不会始终附加。因此,我建议谨慎使用此方法。

“正确”的方法是使用 NAT 网关或 NAT 实例。


推荐阅读