我有以下命令来部署谷歌云功能。
我使用相同的命令来部署gen1的谷歌云功能(除了标志--gen2
(,一切都很好。在拥有数据库的项目中,我使用命令中设置的服务帐户设置了Cloud Sql Client
的角色。
但是当我部署gen2的谷歌云功能时,我无法连接到其他项目的数据库。假设gen2
云函数使用Cloud Run
,我还检查了Cloud Run
使用的service-account
,并且它与具有数据库的项目中具有Cloud Sql Client
的service account
相匹配。
我收到这个错误
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
连接到数据库,因为数据库托管在另一个项目中。
"mysql:dbname=${dbname};port=${port};unix_socket=/cloudsql/${instanceConnectionName}"
其中instanceConnectionName
为项目名称:欧洲西部4:数据库名称
根据https://cloud.google.com/sql/docs/mysql/connect-functions,您必须将连接添加到使用第2代云功能自动部署的云运行服务。其他数据库类型也是如此。滚动到";如果您使用的是云功能(第二代(而不是云功能(第一代(";