【问题标题】:Can a Cloud Function read from Cloud Storage?云函数可以从云存储中读取吗?
【发布时间】:2018-08-18 10:52:44
【问题描述】:

我能找到的关于使用 GCF+GCS 的唯一文档是 https://cloud.google.com/functions/docs/tutorials/storage。 AFAICT 这只是展示如何使用 GCS 事件来触发 GCF。

GCF dependencies 的文档中,它只提到了节点模块。 GCF 代码是否可以从 GCS 存储桶中读取?是否只是需要一个知道如何与 GCS 通信的节点模块的情况,如果是,有没有这样的例子?

【问题讨论】:

    标签: google-cloud-platform google-cloud-storage google-cloud-functions


    【解决方案1】:

    是的,但请注意,它会将结果存储在 ramdisk 中,因此您需要足够的 RAM 用于您的函数来下载文件。

    var storage = require('@google-cloud/storage');
      const gcs = storage({projectId: "<your_project>"});
      const bucket = gcs.bucket("<your_bucket>");
      const file = bucket.file("<path/to/your_file>")
        
      exports.gcstest = (event, callback) => {
        file.download({destination:"/tmp/test"}, function(err, file) {
          if (err) {console.log(err)}
            else{callback();}
        })
      };
    

    【讨论】:

    • fs 是故意不用的吗?
    • 我真的不知道为什么我认为需要导入fs。这是一个旧的 GCF 测试,我正是为了回答你问的同样的问题而做的,我想我在达到当前的方法之前尝试了几种方法。我将编辑导入。
    • 另外,不要相信它会起作用。据我所记得,它最终工作了,但它是一个旧的。最好自己试试。此外,在这种情况下是 pubsub 触发的。根据需要进行更改。
    • 谢谢。我的用例也将被 pubsub 触发。
    • 好的,只需重新部署该功能,它仍然可以工作(即使没有fs!)。我的个人版本还检查下载所需的时间,因为我对吞吐量感到好奇。如果您也有兴趣,请告诉我,我可以用我更完整的示例更新示例。
    【解决方案2】:

    是的,您可以读写存储桶

    const storage = require('@google-cloud/storage')();
    const myBucket = storage.bucket('my-bucket');
    const file = myBucket.file('my-file');
    
    file.createReadStream().on('data', () => {
        // do something!
    });
    

    有关更多信息,请查看Google Cloud 上的文档。

    【讨论】:

      【解决方案3】:

      Google 云函数只会执行您上传的代码。 如果您的代码包含连接到谷歌云存储的库,那么您将能够连接到谷歌云存储,因为您将连接到任何其他 api / 服务。

      有几种方法可以连接到谷歌云存储,如 API、oauth 或签名的 url...所有这些方法都可以在谷歌云功能上使用,所以我建议你查看谷歌云存储文档以找到最适合您的情况。

      【讨论】:

        猜你喜欢
        • 2019-04-20
        • 2020-10-14
        • 1970-01-01
        • 1970-01-01
        • 2021-06-07
        • 2017-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多