Я написал тестовый код для перечисления ведер из Google Cloud Storage через API Cloud Storage, однако я получаю ошибку ниже, когда я запускаю код:Использование Google Cloud Storage API с Go AppEngine
googleapi: Error 403: Forbidden, forbiddenFinished
Я проверил разрешения, и учетная запись службы appengine имеет доступ к ведрам, и приложение appengine app и облачное хранилище находятся в одном проекте.
Это мой пример кода:
package src
import (
"fmt"
"net/http"
"golang.org/x/oauth2/google"
storage "google.golang.org/api/storage/v1"
appengine "google.golang.org/appengine"
)
func init() {
http.HandleFunc("/", index)
}
func ListBuckets(r *http.Request, projectID string) ([]*storage.Bucket, error) {
ctx := appengine.NewContext(r)
client, err := google.DefaultClient(ctx, storage.DevstorageReadOnlyScope)
if err != nil {
return nil, err
}
service, err := storage.New(client)
if err != nil {
return nil, err
}
buckets, err := service.Buckets.List(projectID).Do()
if err != nil {
return nil, err
}
return buckets.Items, nil
}
func index(w http.ResponseWriter, r *http.Request) {
r.Header.Set("x-goog-project-id", "theIdProvidedByTheAPI")
bucket, err := ListBuckets(r,"myProject")
if err != nil {
fmt.Fprint(w,err.Error())
}
for i:=range bucket {
fmt.Fprint(w,bucket[i].Name)
}
fmt.Fprint(w,"\n","Finished.")
}
И это файл YAML:
application: myProject
version: alpha-001
runtime: go
api_version: go1
handlers:
- url:/
script: _go_app
сообщение Ошибка и не полезно, поскольку это не дает много полезной информации. Я просто не могу понять, что мне не хватает.
У меня была похожая ситуация. Этот вопрос, который я поставил перед собой, может помочь. http://stackoverflow.com/questions/34447124/using-google-cloud-storage-with-golang-on-appengine –
Я видел это сообщение раньше, однако код с рабочим примером больше не доступен в github. –