无法通过 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的主要内容,如果未能解决你的问题,请参考以下文章

GCP MemoryStore 上的 Redis 主/从

Finder Sync 扩展:无法通过 UNIX 域套接字进行通信

将 Python xmlrpclib 与 unix 域套接字一起使用?

通过 file.createWriteStream() 流式传输到 GCP 时,获取 ESOCKETTIMEOUT、ECONNRESET 或套接字挂起大文件

GCP Cloud 运行容器服务:[pool www] 无法写入套接字 '/run/php-fpm/www.sock' 的 ACL

Nginx 无法使用 Unicorn 找到 unix 套接字文件