我们的 Redshift 集群位于 A 区。
当我们的 Lambda 函数使用 A 区子网时,它可以连接到 Redshift。
当我们的 Lambda 函数使用 A 区以外的子网时,它会超时。
我们不需要解决此问题,即我们允许从 0.0.0.0/0 在端口 5439 上连接 Redshift。
- 我们的 Lambda 函数和 Redshift 集群位于同一 VPC 中。
- Lambda 函数有 4 个专用子网(每个区域一个)
- Redshift 每个区域还有 4 个专用子网
- Lambda 函数有自己的安全组 (SG)
- Redshift 集群也有自己的 SG。
- Redshift SG 允许来自 Lambda SG 和 Admin SG 的端口 5439
增强型 VPC 路由
已启用集群子网组
包括所有 4 个 Redshift 子网(每个区域一个)- 在 Redshift SG 上允许来自 0.0.0.0/0 的端口 5439 时没有问题
- 当我们禁用 0.0.0.0/0 规则时,REJECT 的流日志从区域 A 到区域 A 可以正常工作,但不能从其他区域到区域 A。
- 所有 Lambda 子网都使用区域 A 中存在的 NAT
- 所有 Redshift 子网都使用存在于的 IGW
- 所有网络 ACL 目前均允许(默认)
最佳答案
我也遇到过类似的情况。将 NAT 网关的弹性 IP 添加到端口 5439 的 Redshift 安全组的入站规则中为我解决了这个问题。
步骤:
- 使用 NAT 网关 (subnet-abc) 检查 lambda 的私有(private)子网
- 转至 VPC 控制台 > 子网 > 子网 abc > 路由表
- 在路由表路由中,您可以找到使用的 NAT 网关 (nat-abcdefg)
- 转至 VPC 控制台 > NAT 网关 > nat-abcdefg。获取该NAT网关使用的elastic-ip。 (xx.yy.zz.pqr)
- 在 Redshift 安全组中添加此 elastic-ip 的入站规则(端口 = 5439 CIDR xx.yy.zz.pqr/32)
沃拉! Lambda 连接到 Redshift 。
不过,在执行此操作之前,应在与 redshift 相同的 VPC 中配置 lambda,并按照 OP 的建议使用适当的私有(private)子网(配置为使用 NAT 网关)。
关于amazon-redshift - 将 Lambda 连接到不同可用区的 Redshift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40351422/