如何在不将我的凭据文件添加到容器内的情况下连接到Cloud SQL上的数据库?
答案 0 :(得分:7)
更新:要从Cloud Run连接到Cloud SQL,请参见official documentation
Cloud Run的完全托管版本现在支持Cloud SQL(GKE用户上的Cloud Run已经能够使用私有IP使用Cloud SQL)
该功能目前处于Alpha状态,因此您需要使用gcloud alpha
(它将在10天内在gcloud beta
中使用)
开始使用:
$ gcloud alpha run services update --add-cloudsql-instances [INSTANCE_CONNECTION_NAME]
INSTANCE_CONNECTION_NAME
的类型为project:region:instancename
。执行此操作后,Cloud Run将为您激活并配置Cloud SQL proxy。然后,您应该通过/cloudsql/[INSTANCE_CONNECTION_NAME]
Unix套接字连接到它。
答案 1 :(得分:1)
目前,Cloud Run(完全托管)不支持连接到 使用TCP的Cloud SQL实例。您的代码不应尝试访问实例 使用IP地址(例如127.0.0.1或172.17.0.1。) link
1。Install and initialize the Cloud SDK
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 Client(首选)
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
11。封装应用程序并将其上传到Container Registry
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
成功!
答案 2 :(得分:0)
我在通过私有 IP 从 dockerized FastApi 应用程序连接到 CloudSQL 时遇到了问题。我采取了以下 3 个步骤来解决我的问题:
确保您的应用程序使用正确的 database-connection-string
。
为我的 cloudrun 默认服务帐户提供 Cloud SQL Client
角色。
cloudsql.instances.connect
cloudsql.instances.get
在数据库网络 (documentation) 内创建一个 VPC connector
。并将 VPC 连接器分配给 Cloud Run 服务。