【问题标题】:Using Google Cloud Storage with Golang on Appengine在 Appengine 上将 Google Cloud Storage 与 Golang 结合使用
【发布时间】:2016-03-30 13:32:20
【问题描述】:

我一直在努力理解如何使用 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 应用引擎应用程序访问云存储?

【问题讨论】:

    标签: google-app-engine go google-cloud-storage


    【解决方案1】:

    我也很难让 GCS 与应用引擎一起工作。我在使用 PEM 和 JSON 密钥之间遇到了冲突的文档。我把this presentation放在一起讨论这个问题,教大家如何使用应用引擎的GCS。

    我能够让 GCS 与应用引擎一起工作。这里是working GCS app engine code

    我还进行了详细介绍所有这些的演讲 - this playlist 中有两三个视频详细介绍了 GCS 和应用引擎。

    【讨论】:

    • 谢谢托德!我一直在浏览您的资料,我看到云/存储库已更新。在您的示例中,您使用的是 storage.NewWriter() 现在不存在。您是否能够在本地存储对象?我记得在 Python 运行时,对象存储在 blobstore 中以模拟上传到 GCS。 Go 运行时有这个吗?理想情况下,我不想将测试数据存储到真正的存储桶中。
    • 将测试数据存储到真实存储桶是我发现的唯一方法。我很失望在这里 NewWriter 已被弃用!
    猜你喜欢
    • 1970-01-01
    • 2014-11-05
    • 2021-02-21
    • 2018-12-09
    • 2014-08-26
    • 2013-11-29
    • 2016-10-06
    • 2014-01-05
    • 1970-01-01
    相关资源
    最近更新 更多