如何从 Cloud 运行 安全地连接到 Cloud SQL?
How to securely connect to Cloud SQL from Cloud Run?
如何连接到云上的数据库 SQL 而无需在容器中添加我的凭据文件?
更新: 从云 运行 连接到云 SQL 请参阅 official documentation
Cloud SQL 现在由 Cloud 运行 的完全托管版本支持(GKE 用户上的 Cloud 运行 已经能够使用私有的 Cloud SQL知识产权)
开始:
- 如果您还没有,create a Cloud SQL instance。
- 确保 Cloud SQL admin API 已启用
- 使用 gcloud alpha 和以下标志部署 Cloud 运行 服务的新版本:
$ gcloud run services update --add-cloudsql-instances [INSTANCE_CONNECTION_NAME]
INSTANCE_CONNECTION_NAME
的类型在哪里 project:region:instancename
.
执行此操作时,Cloud 运行 将为您激活和配置 Cloud SQL proxy。然后,您应该通过 /cloudsql/[INSTANCE_CONNECTION_NAME]
Unix 套接字连接到它。
从云连接 运行(完全托管)到云 SQL 使用 UNIX 域套接字(Java)
At this time Cloud Run (fully managed) does not support connecting to
the Cloud SQL instance using TCP. Your code should not try to access the instance
using an IP address such as 127.0.0.1 or 172.17.0.1.
link
1.Install and initialize the Cloud SDK
2.Update 成分:
gcloud components update
3.Create一个新项目
gcloud projects create run-to-sql
gcloud config set project run-to-sql
gcloud projects describe run-to-sql
4.Enable 计费
gcloud alpha billing projects link run-to-sql --billing-account XXXXXX-XXXXXX-XXXX
5.Set 计算项目信息元数据:
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.Enable 云 SQL 管理员 API:
gcloud services enable sqladmin.googleapis.com
7.Create 具有 public Ip
的云 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 (fully managed) uses a service account to authorize your
connections to Cloud SQL. This service account must have the correct
IAM permissions to successfully connect. Unless otherwise configured,
the default service account is in the format
PROJECT_NUMBER-compute@developer.gserviceaccount.com.
8.Ensure 您服务的服务帐户具有以下 IAM roles: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.Clone 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.Inspect 处理云连接的文件 SQL
cat src/main/java/com/example/cloudsql/ConnectionPoolContextListener.java
11.Containerizing 应用程序并将其上传到 Container Registry
gcloud builds submit --tag gcr.io/run-to-sql/run-mysql
12.Deploy 云服务 运行
gcloud run deploy run-mysql --image gcr.io/run-to-sql/run-mysql
13.Configure 与云一起使用的服务 运行
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.Test它
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" https://run-mysql-xxxxxxxx-xx.x.run.app
成功!
我在通过私有 ip 从 dockerized FastApi 应用程序连接到 CloudSQL 时遇到了问题。我采取了以下 3 个步骤来解决我的问题:
确保您的应用程序使用正确的 database-connection-string
。
- 健全性检查,总是先做这个。您不想在没有首先排除错误的连接字符串的情况下花费数小时研究解决方案。
- 测试时(且仅在测试时):考虑在应用程序初始化时记录数据库连接字符串,以便您可以明确确认您的连接字符串正确。
为我的 cloudrun 默认服务帐户提供 Cloud SQL Client
角色。
- 包含以下权限:
cloudsql.instances.connect
cloudsql.instances.get
在数据库(documentation)的网络内创建一个VPC connector
。并将 VPC 连接器分配给 Cloud 运行 服务。
如何连接到云上的数据库 SQL 而无需在容器中添加我的凭据文件?
更新: 从云 运行 连接到云 SQL 请参阅 official documentation
Cloud SQL 现在由 Cloud 运行 的完全托管版本支持(GKE 用户上的 Cloud 运行 已经能够使用私有的 Cloud SQL知识产权)
开始:
- 如果您还没有,create a Cloud SQL instance。
- 确保 Cloud SQL admin API 已启用
- 使用 gcloud alpha 和以下标志部署 Cloud 运行 服务的新版本:
$ gcloud run services update --add-cloudsql-instances [INSTANCE_CONNECTION_NAME]
INSTANCE_CONNECTION_NAME
的类型在哪里project:region:instancename
.
执行此操作时,Cloud 运行 将为您激活和配置 Cloud SQL proxy。然后,您应该通过 /cloudsql/[INSTANCE_CONNECTION_NAME]
Unix 套接字连接到它。
从云连接 运行(完全托管)到云 SQL 使用 UNIX 域套接字(Java)
At this time Cloud Run (fully managed) does not support connecting to the Cloud SQL instance using TCP. Your code should not try to access the instance using an IP address such as 127.0.0.1 or 172.17.0.1. link
1.Install and initialize the Cloud SDK
2.Update 成分:
gcloud components update
3.Create一个新项目
gcloud projects create run-to-sql
gcloud config set project run-to-sql
gcloud projects describe run-to-sql
4.Enable 计费
gcloud alpha billing projects link run-to-sql --billing-account XXXXXX-XXXXXX-XXXX
5.Set 计算项目信息元数据:
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.Enable 云 SQL 管理员 API:
gcloud services enable sqladmin.googleapis.com
7.Create 具有 public Ip
的云 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 (fully managed) uses a service account to authorize your connections to Cloud SQL. This service account must have the correct IAM permissions to successfully connect. Unless otherwise configured, the default service account is in the format PROJECT_NUMBER-compute@developer.gserviceaccount.com.
8.Ensure 您服务的服务帐户具有以下 IAM roles: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.Clone 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.Inspect 处理云连接的文件 SQL
cat src/main/java/com/example/cloudsql/ConnectionPoolContextListener.java
11.Containerizing 应用程序并将其上传到 Container Registry
gcloud builds submit --tag gcr.io/run-to-sql/run-mysql
12.Deploy 云服务 运行
gcloud run deploy run-mysql --image gcr.io/run-to-sql/run-mysql
13.Configure 与云一起使用的服务 运行
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.Test它
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" https://run-mysql-xxxxxxxx-xx.x.run.app
成功!
我在通过私有 ip 从 dockerized FastApi 应用程序连接到 CloudSQL 时遇到了问题。我采取了以下 3 个步骤来解决我的问题:
确保您的应用程序使用正确的
database-connection-string
。- 健全性检查,总是先做这个。您不想在没有首先排除错误的连接字符串的情况下花费数小时研究解决方案。
- 测试时(且仅在测试时):考虑在应用程序初始化时记录数据库连接字符串,以便您可以明确确认您的连接字符串正确。
为我的 cloudrun 默认服务帐户提供
Cloud SQL Client
角色。- 包含以下权限:
cloudsql.instances.connect
cloudsql.instances.get
- 包含以下权限:
在数据库(documentation)的网络内创建一个
VPC connector
。并将 VPC 连接器分配给 Cloud 运行 服务。