我正在编写一个使用Postgres方言与Cloud Spanner进行通信的程序。我的应用程序是一个gin服务器,如this doc中所述,我正在使用pgadapter进行连接。
我的应用程序在本地运行正常。但是当我将其部署到云运行时,会出现以下日志。
错误基本上来自StartPGAdapterWithCredentials
函数。
func StartPGAdapter(ctx context.Context, project, instance string) (port int, cleanup func(), err error) {
credentials, err := google.FindDefaultCredentials(ctx)
fmt.Println("credentials " + (credentials.ProjectID) + "json " + utils.ToString(credentials.JSON) + "ts " + utils.ToString(credentials.TokenSource))
if err != nil {
return 0, func() {}, err
}
return StartPGAdapterWithCredentials(ctx, project, instance, credentials)
}
func StartPGAdapterWithCredentials(ctx context.Context, project, instance string, credentials *google.Credentials) (port int, cleanup func(), err error) {
if credentials == nil {
return 0, func() {}, fmt.Errorf("credentials cannot be nil")
}
if credentials.JSON == nil || len(credentials.JSON) == 0 {
return 0, func() {}, fmt.Errorf("only JSON based credentials are supported")
}
credentialsFile, err := os.CreateTemp(os.TempDir(), "pgadapter-credentials")
if err != nil {
return 0, func() {}, err
}
在我的本地系统上,
GOOGLE_APPLICATION_CREDENTIALS
已经设置,因此它能够获取凭据。然而,在云运行中这并不起作用。我该如何让它在云运行中运行?
附加信息:遵循此处的示例here。
GOOGLE_APPLICATION_CREDENTIALS
指向包含服务帐号凭据的有效 JSON 文件。另请参阅 https://github.com/GoogleCloudPlatform/golang-samples/blob/b4e5aa87903747985c8c096f29598d0de5b6cbbc/monitoring/README.md#using-a-service-account - Matteo