Beanstalk A - 托管 UI Beanstalk B - 托管 API RDS - 托管 SQL 数据库,不是公共的
1(我在配置中没有将B附加到RDS,但是我通过设置env变量并将RDS的安全组设置为允许来自B的入站MYSQL通过B访问RDS 2(我可以ssh到B并通过B访问RDS 3( 我在负载均衡器后面和 https 后面都有 A 和 B 4( A 和 B 都运行在 javascript/node js 上 5( B 具有入站规则以允许来自 A 的所有 TCP
问题:
当我转到 A 的 url 并进行最终命中 B 的搜索时,我收到"连接 ETIMEDOUT"错误。
我意识到这与允许访问有关,但我有允许 B 的 RDS 安全组和允许 A 的 B 安全组。那我做错了什么呢?
API 调用是如何发生的?A 是从服务器端代码还是在前端 JavaScript 代码中对 B 进行 API 调用?
如果 A 从服务器端代码对 B 进行 API 调用:
首先确保满足以下条件: 负载均衡器 B 接受来自分配给 EC2 服务器 A 的安全组的流量。EC2 服务器 B 接受来自分配给负载均衡器 B 的安全组的流量。
您可能需要将 B 的负载均衡器设为私有,以便 A 和 B 之间的流量将保留在 VPC 内。如果流量从服务 A 流出 VPC 并返回 VPC 以命中服务 B,则与安全组的关联将丢失,因此负载均衡器 B 的安全组规则将不起作用。
如果 A 从前端 JavaScript 代码进行 API 调用:
分配给负载均衡器 B 的安全组需要具有与负载均衡器 A 相同的规则,我假设这些规则允许来自任何来源的所有 HTTP/HTTPS 流量。这是因为 API 调用实际上是通过 Internet 进行的,源自用户本地计算机上的 Web 浏览器,而不是来自服务器 A。