首页 > 解决方案 > 无法从应用引擎连接到 postgres cloudsql

问题描述

我正在使用Go. 我在云控制台内的同一个项目中有一个云 sql 实例和应用程序引擎。

我的app.yaml文件中有以下内容:

service: myservice
runtime: go
api_version: go1

env_variables:
  #for deploying
  #POSTGRES_CONNECTION: "user=postgres password=<redacted> dbname=my_database host=/cloudsql/myproject:us-west1:myserver"

  #for testing locally via cloud proxy
  POSTGRES_CONNECTION: "user=postgres password=<redacted> dbname=mydatabase sslmode=disable"


beta_settings:
  cloud_sql_instances: myproject:us-west1:myserver

handlers:

# All URLs are handled by the Go application script
- url: /.*
  script: _go_app

在代码中,我像这样打开连接:

datastoreName := os.Getenv("POSTGRES_CONNECTION")
db, err := sql.Open("postgres", datastoreName)

在我的本地机器上,我有这样的设置cloud_sql_proxy

./cloud_sql_proxy -instances=passio-nutrition-develop-bcb6:us-west1:nutrition-sqlite-source=tcp:5432

并且POSTGRES_CONNECTION设置为本地测试,一切都运行良好。

但是,当我设置POSTGRES_CONNECTION部署和运行gcloud app deploy时,当我尝试命中端点时会收到一条错误消息:

{"Op":"dial","Net":"unix","Source":null,"Addr":{"Name":"/cloudsql/myproject:us-west1:myserver/.s.PGSQL.5432","Net":"unix"},"Err":{"Syscall":"socket","Err":1}}

我尝试了各种不同版本的POSTGRES_CONNECTION,包括添加=tcp:5432到 and 的末尾hostcloud_sql_instances但我无法使连接正常工作。

如果有人能给我一些建议,那就太好了

标签: google-app-enginegoogle-cloud-sql

解决方案


确保您已启用 Cloud SQL Admin API,并且您的默认 App Engine 服务帐号具有正确的 IAM 权限(它需要具有Cloud SQL Connect角色或更高权限)。


推荐阅读