无法通过 unix 套接字从托管在不同 GCP 项目中的 App Engine 柔性环境连接到 Cloud SQL
Posted
技术标签:
【中文标题】无法通过 unix 套接字从托管在不同 GCP 项目中的 App Engine 柔性环境连接到 Cloud SQL【英文标题】:Can't connect to Cloud SQL via unix socket from an App Engine Flexible Environment hosted in a different GCP project 【发布时间】:2018-11-26 20:04:25 【问题描述】:我有一个在 Google App Engine 灵活环境中运行 Cloud SQL 和 Django 应用的 GCP 项目,它运行良好。但是,当我尝试从另一个项目连接到同一个 Cloud SQL 实例时,它不起作用,因为套接字没有按照 app.yaml 中 cloud_sql_instances 的指定创建:
runtime: custom
env: flex
automatic_scaling:
min_num_instances: 1
beta_settings:
cloud_sql_instances: myproject:myzone:mydbinstance
env_variables:
SQLALCHEMY_DATABASE_URI: >-
postgresql+psycopg2://myuser:mypass@/mydb?host=/cloudsql/myproject:myzone:mydbinstance
重现步骤:
-
创建 GCP 项目 A
在项目 A 中创建 Cloud SQL postgres 实例
在项目 A 中将应用部署到应用引擎柔性环境,按照以下步骤将应用连接到 Cloud SQL:https://cloud.google.com/appengine/docs/flexible/python/using-cloud-sql-postgres
SSH 进入项目 A 中的实例(通过 Web 控制台)
$ ls /cloudsql/
-> 应该显示套接字文件
创建 GCP 项目 B
将同一个应用部署到项目B的应用引擎柔性环境,按照此步骤连接并授权应用到项目A的Cloud SQL:https://cloud.google.com/appengine/docs/flexible/python/using-cloud-sql-postgres
SSH 到项目 B 中的实例(通过 Web 控制台)
$ ls /cloudsql/
-> 目录为空,socket 不存在。
如何让项目 B 显示套接字?
【问题讨论】:
同样的问题:***.com/questions/44619711/… 【参考方案1】:我通过为项目 B 启用 Cloud SQL 管理 API 解决了这个问题。之前,我只为项目 A 启用了它。
【讨论】:
以上是关于无法通过 unix 套接字从托管在不同 GCP 项目中的 App Engine 柔性环境连接到 Cloud SQL的主要内容,如果未能解决你的问题,请参考以下文章
Finder Sync 扩展:无法通过 UNIX 域套接字进行通信
将 Python xmlrpclib 与 unix 域套接字一起使用?
通过 file.createWriteStream() 流式传输到 GCP 时,获取 ESOCKETTIMEOUT、ECONNRESET 或套接字挂起大文件
GCP Cloud 运行容器服务:[pool www] 无法写入套接字 '/run/php-fpm/www.sock' 的 ACL