第二代Google Cloud Function跨项目连接MySQL失败求助
第二代Google Cloud Function跨项目连接Cloud SQL失败问题
- 第一代Cloud Function(移除
--gen2参数部署)可正常跨项目连接Cloud SQL,数据库所在项目已为部署命令指定的服务账号配置Cloud Sql Client角色。 - 部署第二代Cloud Function时,无法连接其他项目的数据库。第二代函数基于Cloud Run运行,已确认Cloud Run使用的服务账号(无论是命令指定的还是默认服务账号)都在数据库项目的IAM中配置了
Cloud Sql Client角色,但仍抛出错误:
SQLSTATE[HY000] [2002] No such file or directory
部署命令
gcloud functions deploy $CLOUD_FUNCTION_NAME-staging-gen2 --gen2 --source=./src --runtime=$CLOUD_FUNCTION_PHP_VERSION --trigger-http --entry-point=$CLOUD_FUNCTION_ENTRY_POINT --allow-unauthenticated --region=$GCP_ZONE --project=$PROJECT_ID --env-vars-file .env.yml --min-instances=$MINIMUM_NUMBER_OF_INSTANCES --service-account=*******@appspot.gserviceaccount.com ${VPC_CONNECTOR:+--vpc-connector projects/$PROJECT_ID/locations/$GCP_ZONE/connectors/$VPC_CONNECTOR}
已尝试的操作
- 取消指定
--service-account参数,使用默认服务账号,并在数据库项目的IAM中为该默认账号添加Cloud Sql Client角色,问题未解决。
数据库连接字符串
使用Unix Socket连接,PHP PDO连接字符串如下:
"mysql:dbname=${dbname};port=${port};unix_socket=/cloudsql/${instanceConnectionName}"
其中instanceConnectionName格式为项目ID:区域:数据库实例名(示例:project_name:europe-west4:database_name)
内容的提问来源于stack exchange,提问作者Orest Divintari
相关产品推荐
相关产品推荐

