Cloud Functions Gen2连接Google Cloud SQL的便捷配置方法咨询
Cloud Functions Gen2 连接Cloud SQL 无需手动配置的部署方案
非Terraform方案(gcloud命令行)
Cloud Functions Gen2基于Cloud Run构建,因此可以直接在gcloud functions deploy命令中使用与Cloud Run兼容的参数,无需手动在控制台配置Cloud SQL连接。
部署命令示例
gcloud functions deploy YOUR_FUNCTION_NAME \ --gen2 \ --runtime php82 \ --region YOUR_REGION \ --add-cloudsql-instances YOUR_PROJECT_ID:YOUR_REGION:YOUR_CLOUD_SQL_INSTANCE \ --set-env-vars DB_SOCKET="/cloudsql/YOUR_PROJECT_ID:YOUR_REGION:YOUR_CLOUD_SQL_INSTANCE" \ --service-account YOUR_SERVICE_ACCOUNT_EMAIL
关键参数说明
--add-cloudsql-instances:指定要关联的Cloud SQL实例,格式为项目ID:区域:实例名称,多个实例用逗号分隔。--set-env-vars:设置PHP代码中需要的Unix Socket路径,后续连接数据库时直接使用该路径即可(例如PDO连接字符串mysql:unix_socket=/cloudsql/xxx;dbname=xxx)。--service-account:确保指定的服务账号拥有roles/cloudsql.client角色,否则函数无法访问Cloud SQL实例。
Terraform方案
如果需要基础设施即代码管理,可以通过Terraform资源直接配置Cloud SQL连接,无需手动操作控制台。
Terraform配置示例
resource "google_cloudfunctions2_function" "sql_connected_function" { name = "your-gen2-function" location = "us-central1" description = "Gen2 function connected to Cloud SQL" build_config { runtime = "php82" entry_point = "your_php_entry_function" source { storage_source { bucket = "your-source-code-bucket" object = "function-source.zip" } } } service_config { max_instances = 5 available_memory = "256Mi" # 关联Cloud SQL实例 cloud_sql_instances = ["your-project-id:us-central1:your-sql-instance"] # 设置Socket路径环境变量 environment_variables = { DB_SOCKET = "/cloudsql/your-project-id:us-central1:your-sql-instance" } # 配置拥有Cloud SQL权限的服务账号 service_account_email = "function-sa@your-project-id.iam.gserviceaccount.com" } } # 为服务账号绑定Cloud SQL Client角色 resource "google_project_iam_member" "sql_client_role" { project = "your-project-id" role = "roles/cloudsql.client" member = "serviceAccount:function-sa@your-project-id.iam.gserviceaccount.com" }
说明
cloud_sql_instances字段直接指定要连接的Cloud SQL实例,格式与gcloud命令一致。- 必须确保服务账号拥有
roles/cloudsql.client权限,否则函数无法建立连接。
内容的提问来源于stack exchange,提问作者Martin Šír
相关产品推荐
相关产品推荐

