首页 > 解决方案 > 从 App Engine Flexible 连接到 Cloud SQL 时出现问题

问题描述

我的 ASP NET CORE 服务作为 App Engine Flexible 在 Google Cloud 上运行。PostgreSQL 数据库也在 SQL Cloud 上运行。服务连接到数据库并获取数据。

如果我在 localhost 上运行服务并从浏览器或 Fidler 测试 api,它就可以正常工作。当服务在云中运行但 api 响应是模拟的时,它也可以正常工作。但是如果服务需要连接做数据库,它会得到 HTTP ERROR 500。没有更多关于错误的附加信息。

也许有人知道为什么它会像描述中那样工作?

连接字符串如下所示:

"ConnectionString": "Server=11.11.11.11;Port=1111;Database=namedb;;User Id=user;Password=pass;Keepalive=1;",

标签: postgresqlhttpasp.net-coregoogle-cloud-platformcloud

解决方案


为避免将 IP 列入白名单,这是一项繁重的工作,有两种方法可以从 App Engine Flex 进行连接,您无需这样做。

一种方法:使用beta 设置并连接到本地地址。如果您只连接到一个数据库,这种方式很好,您需要将以下行添加到 app.yaml

beta_settings:
  cloud_sql_instances: <INSTANCE_CONNECTION_NAME>=tcp:<PORT>

其中 INSTANCE_CONNECTION_NAME 是 ::

例如:

beta_settings:
  cloud_sql_instances: my-project:my-region:my-instance=tcp:5432

另一种方式:是通过私有 IP 连接。为此,您需要在同一区域拥有 App Engine 和 CloudSQL。并将以下几行添加到您的 app.yaml

   network:
       name: projects/<HOST_PROJECT_ID>/global/networks/<NETWORK_NAME>

例如

network:
  name: projects/my-project/global/networks/default

推荐阅读