云函数可以从云存储中读取吗?

Posted

技术标签:

【中文标题】云函数可以从云存储中读取吗?【英文标题】: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 通信的节点模块的情况,如果是,有没有这样的例子?

【问题讨论】:

【参考方案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)
        elsecallback();
    )
  ;

【讨论】:

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...所有这些方法都可以在谷歌云功能上使用,所以我建议你查看谷歌云存储文档以找到最适合您的情况。

【讨论】:

以上是关于云函数可以从云存储中读取吗?的主要内容,如果未能解决你的问题,请参考以下文章

从云功能中删除云存储中的文件

从云函数触发数据流管道时,无法从主类执行超过 1 个函数

从云计算到函数计算

BigQuery 错误从云存储传输 csv

如何从云函数中的请求中获取参数?火力基地

将 csv 文件从云存储批量加载到 bigquery