amazon-redshift - 将 Lambda 连接到不同可用区的 Redshift

标签 amazon-redshift aws-lambda amazon-vpc

我们的 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/

相关文章:

python-3.x - 为什么我得到 : Unable to import module 'handler' : No module named 'paramiko' ?

python - 在 AWS Lambda 中使用存储在 S3 上的 pickled 文件

amazon-web-services - 为什么我们需要在 VPC 中使用私有(private)子网?

postgresql - 将 RDS 连接到 Quicksight 抛出 `GENERIC_SQL_EXCEPTION`

amazon-web-services - 在嵌套堆栈中引用父堆栈的输出 - Cloudformation

amazon-redshift - 临时表上的 distkey 和 sortkey - Redshift

r - 从 R 连接到 amazon redshift 时出错 - windows 10

amazon-web-services - 雅典娜 vs Redshift 光谱

amazon-redshift - 如何更改 Amazon Redshift 中的列顺序

Node.JS 从 Http 请求 POST 获取数据