我正试图通过我正在本地开发的云运行应用程序(Node.js(访问我的云SQL数据库(PostgreSQL((使用云代码作为VS代码扩展的一部分(。
我可以通过我的终端中的Cloud SQL Auth Proxy(使用psql "host=127.0.0.1 port=5432 sslmode=disable dbname=*** user=***"
(访问数据库,但从未能够从我的本地Cloud Run成功连接。
Cloud SQL数据库在我的Cloud Run项目中设置为连接。
我尝试过(但失败了(两种连接方式:
- 使用实例连接名称:当我执行以下操作时:
const pg = require('knex')({
client: 'pg',
connection: {
user: '...',
password: '...',
database: '...',
host: '/cloudsql/...',
},
debug: true,
});
我得到以下错误:
connect ENOENT /cloudsql/.../.s.PGSQL.5432"
- 使用本地主机和端口:当我执行这样的操作时:
const pg = require('knex')({
client: 'pg',
connection: {
user: '...',
password: '...',
database: '...',
host: '127.0.0.1',
port: 5432,
},
debug: true,
});
我得到以下错误:
Error: connect ECONNREFUSED 127.0.0.1:5432
Cloud Code本地Cloud Run实现目前不支持Cloud SQL。添加在Cloud Run应用程序旁边运行的Cloud SQL Proxy的一种方法是将其作为侧车添加到Cloud Code在Cloud Run本地开发会话期间部署的容器中。尝试以下操作:
- 启动云代码
Cloud Run: Run Locally
会话 - 等待应用程序生成和启动,以及端点可用
- 此时,您的应用程序作为一个容器在minikube中运行(在一个名为
cloud-run-dev-internal
的单独命名空间中(,部署名称与您的Cloud Run服务名称相匹配 - 创建一个YAML补丁文件,该文件将在应用程序旁边启动Cloud SQL Proxy,以便在本地(通过localhost(可用:
spec:
template:
spec:
containers:
- name: cloud-sql-proxy
image: gcr.io/cloudsql-docker/gce-proxy
command:
- "/cloud_sql_proxy"
# By default, the proxy will write all logs to stderr. In some
# environments, anything printed to stderr is consider an error. To
# disable this behavior and write all logs to stdout (except errors
# which will still go to stderr), use:
- "-log_debug_stdout"
# Replace DB_PORT with the port the proxy should listen on
# Defaults: MySQL: 3306, Postgres: 5432, SQLServer: 1433
- "-instances=my-project:my-region:my-instance=tcp:3306"
- 将其另存为
cloudsql-proxy-patch.yaml
。以以下方式应用此修补程序文件:kubectl patch deployment {your_cloud_run_service_name} --patch-file cloudsql-proxy-patch.yaml --context cloud-run-dev-internal
- 一段时间后,云SQL代理应该会运行。要进行诊断,您可以使用Kubernetes Explorer并查看
cloud-run-dev-internal
命名空间内部,看看您的pod是否同时具有应用程序和Cloud SQL Proxy端的car容器
其余部分取决于如何在本地配置云SQL代理。请参阅https://cloud.google.com/sql/docs/mysql/connect-kubernetes-engine#run_the_as_a_sidecar有关如何将代理设置为sidecar的更多详细信息。