AWS lambda 使用私有 Hostzone DNS 连接到内部 ELB

fly*_*ade 5 amazon-web-services amazon-route53 amazon-vpc aws-lambda elastic-load-balancer

我想设置一个在私有 VPC 上运行的 EC2 实例。它可以从私有 VPC 连接到 Internet,但不能从外部访问。并且有一个 lambda 函数来触发 EC2 启动与外部资源(S3、Dynamo、Internet)的一些交互。

我已经设置了一个 VPC,如下所示:

  1. 在私有 VPC 子网中运行 docker 的 EC2 实例
  2. 配置为内部和私有子网(与 EC2 子网相同)的 ALB(应用程序负载平衡器)
  3. 正在工作的 NAT 网关
  4. 一个 lambda 函数,它将对 Internet 和 ALB 执行 HTTPs GET 和 POST
  5. Route53 私有 Hostzone 有一个记录集,将“abcd.internal/api”路由到 ALB。

这是问题所在。lambda 函数可以通过 HTTPs 连接到 Internet,但是当它通过私有 Hostzone 记录(“abcd.internal”)HTTPs GET 到 ALB 失败时。

我的理解是我的 ALB、EC2、lambda、NAT 网关和 Route53 配置在同一个 VPC 中,它们应该能够使用私有 DNS 名称相互通信。我不知道为什么它失败了。

注意:在设置内部 ALB 之前,我确实尝试在公共子网中设置面向 Internet 的 ALB,然后为此 ALB 配置一个公共 Hostzone 记录集“abcd.public”。它可以与 EC2 实例通信,并且 EC2 实例可以通过 NAT 网关与 Internet 交互。所以“EC2 to Internet”部分正在发挥作用。

更新:我终于在 lambda 日志中挖掘了一些错误消息,如下所示:

错误:主机名/IP 与证书的替代名称不匹配:“主机:abcd.internal。不在证书的替代名称中:DNS:.public”] 原因:'主机:abcd.internal。不在证书的替代名称中:DNS: .public',主机:'abcd.internal.',

这太有趣了。我确实有一个公共主机区与私有主机区共存,但公共主机区用于其他目的。我不知道为什么 lambda 函数使用公共 DNS 而不是私有 DNS,因为它是在私有子网中配置的。

fly*_*ade 4

感谢所有发表评论和提出建议的人。

为了解决这个问题,我几乎在网上找到了所有可能的解决方案。我把一切都放在了正确的位置。Lambda 函数、ELB 和 EC2 位于同一 VPC 私有子网中。Route53、NAT 和 IGW 已正确设置。我尝试过设置 DHCP 选项,但没有成功。也许我不完全理解这个DHCP,也找不到例子。

事实证明 HTTPS 协议不起作用。在迁移到私有 VPC 之前,我在公共 VPC 中进行了相同的设置,并且资源使用 HTTPS 进行通信。例如,lambda 函数将 GET/POST 到 EC2 实例或 ELB。当我将内容移至私有 VPC 后,HTTPS 命令无法使用内部 DNS 名称。

但是,如果我使用HTTP协议,资源最终可以通过内部DNS名称找到彼此。

我仍然不知道为什么 HTTPS 不能在私有 VPC 中使用,但我可以接受这个解决方案。