GAE 标准部署是沙盒的。因此,您无法连接到 GCE 实例的内部 IP。您可以将其想象为两个不同专用网络上的两台不同设备,它们无法使用其内部 IP 相互通信。但是,如果其中一台设备(本例中为 GCE 实例)具有公共 IP,并且其专用网络(防火墙)允许流量通过设备所需的端口,则它们始终可以进行通信。
另一方面,如果 GAE 部署在 Flex 环境中,您应该能够通过内部 IP 使用 API 连接到数据库。
我在这个灵活的环境中尝试过并取得了成功example对于内部和外部 IP 地址。和您一样,我使用 Cloud Launcher 部署 Mongodb,它创建了具有公共 IP 和网络标签 mongodb 和 mongodb-db 的 GCE 实例。然后我created通过 SSH 连接到主数据库实例来获取数据库、用户名和密码。
为了使用内部IP,我刚刚根据示例创建/修改了keys.json文件,如下所示:
{
"mongoHost": "internal IP address",
"mongoPort": "27017",
"mongoDatabase": "db",
"mongoUser": "username",
"mongoPass": "password"
}
所以我不必担心 URI,因为 server.js 中的代码通过传递以下字符串来处理它:
mongodb://${user}:${pass}@${host}:${port}
但对于您的演示应用程序,您可能需要检查 MongoDB 官方文档以获取标准连接字符串格式 URI。
至于使用公共 IP,我必须创建一个网络防火墙规则,允许 tcp 进入端口 27017,目标标签与网络标签相同,以便限制通过该端口仅访问 MongoDB 实例。接下来,我如上修改了keys.json 文件,将内部IP 替换为公共IP。