postgresql - 从 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;",
解决方案
为避免将 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
推荐阅读
- batch-file - 创建一个在 Windows CMD 文件运行之间持续存在的计数器?
- entity-framework - 如何实例化实体框架
- mule - 读取json并将其转换为mule 3中的csv
- r - 了解来自 dbGetQuery 的间歇性 SSL 错误
- ruby-on-rails - Rails 中服务对象的正确用法是什么
- javascript - 为什么函数以分号结尾?
- python - 异常后重试而不使用相同的列表
- python - 对具有多个特征的时间序列进行聚类
- linux - 如何以编程方式获取 syscall.Mount() 的文件系统类型
- regex - 使用 Powershell 和 RegEx 删除文件名,最终得到相似的文件名