在Appengine上使用Golang和Google Cloud存储

3

我一直在努力理解如何正确地在使用 Go 的 App Engine 上使用 GCS。我已经阅读了几篇关于 Go App Engine 开发服务器不能模拟 GCS 的帖子。 这种情况仍然存在吗? 当我使用以下代码构建客户端时,我已能将对象存储到我的实际默认 GCS 中:

ctx := appengine.NewContext(r)
    jsonKey, err := ioutil.ReadFile("path/to/json.json")
    if err != nil {
        log.Fatal(err)
    }
    conf, err := google.JWTConfigFromJSON(
        jsonKey,
        storage.ScopeFullControl,
    )
    if err != nil {
        log.Fatal(err)
    }
    client, err := storage.NewClient(ctx, cloud.WithTokenSource(conf.TokenSource(ctx)))

这是否是在App Engine上使用云存储的首选方式?
我之所以问这个问题,是因为我不明白为什么一些示例应用程序引擎代码不能正常工作。例如,我试图遵循此示例中的代码(https://github.com/GoogleCloudPlatform/gcloud-golang/blob/master/examples/storage/appengine/app.go#L73)。您将注意到,构建存储客户端只是使用:
client, err := storage.NewClient(ctx)

使用此示例代码时,我遇到了一个googleapi:Error 401:Invalid Credentials,authError错误。这是一个错误还是我做错了什么?在Go应用程序引擎应用程序中,我应该使用哪种方式访问云存储?
1个回答

2

我曾经也遇到过在app engine上使用GCS时的问题。使用PEM和JSON密钥的文档之间存在冲突。我整理了这个演示文稿来讨论这个问题并教大家如何在app engine上使用GCS。

我成功地将GCS与app engine配合使用。这里是可工作的GCS app engine代码

我还做了一个详细的演讲 - 这个播放列表中有两到三个视频,详细介绍了GCS和app engine。


谢谢Todd!我一直在阅读你的材料,我看到云/存储库已经更新了。在你的例子中,你使用的是storage.NewWriter(),但现在已经不存在了。你能够将对象存储在本地吗?我记得在Python运行时,对象被存储在blobstore中以模拟上传到GCS。Go运行时是否有这个功能?理想情况下,我不想将测试数据存储到真正的存储桶中。 - John F.
将测试数据存储到真正的存储桶中是我找到的唯一方法。我很失望听说NewWriter已经被弃用了! - Todd McLeod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接