更新:为了从Cloud Run连接到Cloud SQL,请查看官方文档
现在,完全托管的Cloud Run版本支持使用Cloud SQL(Cloud Run on GKE 用户已经可以使用私有IP使用Cloud SQL)。
开始使用:
$ gcloud run services update --add-cloudsql-instances [INSTANCE_CONNECTION_NAME]
,其中INSTANCE_CONNECTION_NAME
是project:region:instancename
类型的连接名称。这样做时,Cloud Run将为您激活和配置Cloud SQL代理。然后,您应通过Unix套接字/cloudsql/[INSTANCE_CONNECTION_NAME]
连接到它。
gcloud alpha run services update wordpress2 --set-cloudsql-instances cloudrun-sql
,解决了崩溃问题。 - John Hanley/cloudsql
挂载 (none on /cloudsql type 9p (rw)
),但里面没有任何东西。如果我安装 cloud_sql_proxy
并手动运行 cloud_sql_proxy -instances="[CONNECTION-NAME]" -dir=/tmp
,那么套接字就在 /tmp
中。 - Leonid Makarov目前,Cloud Run(完全托管)不支持使用TCP连接到Cloud SQL实例。您的代码不应尝试使用IP地址(如127.0.0.1或172.17.0.1)访问实例。 链接
2.更新组件:
gcloud components update
3. 创建一个新项目
gcloud projects create run-to-sql
gcloud config set project run-to-sql
gcloud projects describe run-to-sql
4.启用计费
gcloud alpha billing projects link run-to-sql --billing-account XXXXXX-XXXXXX-XXXX
5.设置计算项目信息元数据:
gcloud compute project-info describe --project run-to-sql
gcloud compute project-info add-metadata --metadata google-compute-default-region=europe-west2,google-compute-default-zone=europe-west2-b
6. 启用 Cloud SQL Admin API:
gcloud services enable sqladmin.googleapis.com
7. 创建一个带有公共IP的Cloud SQL实例
#Create the sql instance in the same region as App Engine Application
gcloud --project=run-to-sql beta sql instances create database-external --region=europe-west2
#Set the password for the "root@%" MySQL user:
gcloud sql users set-password root --host=% --instance database-external --password root
#Create a user
gcloud sql users create user_name --host=% --instance=database-external --password=user_password
#Create a database
gcloud sql databases create user_database --instance=database-external
gcloud sql databases list --instance=database-external
gcloud sql instances list
Cloud Run(完全托管)使用服务帐户来授权您连接到Cloud SQL。此服务帐户必须具有正确的IAM权限才能成功连接。除非另有配置,默认服务帐户的格式为PROJECT_NUMBER-compute@developer.gserviceaccount.com。
8.确保您的服务的服务帐户具有以下IAM角色之一:Cloud SQL客户端(首选)。
gcloud iam service-accounts list
gcloud projects add-iam-policy-binding run-to-sql --member serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com. --role roles/cloudsql.client
9. 克隆 java-docs-repository
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
cd java-docs-samples/cloud-sql/mysql/servlet/
ls
#Dockerfile pom.xml README.md src
10. 检查处理与Cloud SQL连接的文件
cat src/main/java/com/example/cloudsql/ConnectionPoolContextListener.java
gcloud builds submit --tag gcr.io/run-to-sql/run-mysql
12. 将服务部署到 Cloud Run
gcloud run deploy run-mysql --image gcr.io/run-to-sql/run-mysql
13. 配置服务以在Cloud Run中使用
gcloud run services update run-mysql --add-cloudsql-instances run-to-sql:europe-west2:database-external --set-env-vars CLOUD_SQL_CONNECTION_NAME=run-to-sql:europe-west2:database-external DB_USER=user_name,DB_PASS=user_password,DB_NAME=user_database
14.测试它
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" https://run-mysql-xxxxxxxx-xx.x.run.app
成功!
我在使用docker化的FastApi应用程序通过私有IP连接CloudSQL时遇到了问题。我采取了以下3个步骤来解决我的问题:
确保您的应用程序正在使用正确的database-connection-string
。
向我的cloudrun默认服务帐户提供Cloud SQL Client
角色。
cloudsql.instances.connect
cloudsql.instances.get
在数据库网络中创建一个VPC连接器
(documentation)。并将VPC连接器分配给Cloud Run服务。