批处理位于 Google Cloud Storage Bucket 上的对象的最佳方法

Posted

技术标签:

【中文标题】批处理位于 Google Cloud Storage Bucket 上的对象的最佳方法【英文标题】:Best approach for batch processing objects located on a Google Cloud Storage Bucket 【发布时间】:2021-04-06 20:05:25 【问题描述】:

我在 GCP 存储桶上有一堆视频,我需要使用 ffmpeg 连接这些视频,然后将结果保存到另一个桶中。

我对 GCP 很陌生,所以我通常会启动一个虚拟机并让它(通过脚本)使用 gsutil 下载视频,处理它们,然后再次使用 gsutil 上传结果,但正如我了解这在网络流量、处理成本和可扩展性方面效率非常低。

那么,以一种非常笼统的方式,这将是运行此类脚本的最佳 GCP 内置功能:App Engine、Cloud Functions 或 Cloud Run,它需要什么?

【问题讨论】:

【参考方案1】:

您可以通过创建应用程序并使用 Google 库将结果上传到存储桶中来自动化该过程。 下面是一个用python上传的例子:

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string const& file_name,
   std::string const& bucket_name, std::string const& object_name) 
  // Note that the client library automatically computes a hash on the
  // client-side to verify data integrity during transmission.
  StatusOr<gcs::ObjectMetadata> metadata = client.UploadFile(
      file_name, bucket_name, object_name, gcs::IfGenerationMatch(0));
  if (!metadata) throw std::runtime_error(metadata.status().message());

  std::cout << "Uploaded " << file_name << " to object " << metadata->name()
            << " in bucket " << metadata->bucket()
            << "\nFull metadata: " << *metadata << "\n";

我可以看到ffmpeg also works with python,所以我相信将所有这些都包含在一个程序中会更容易。 在存储分区中上传/下载对象的其他可能性是 Cloud Console 和 REST API。

有关更多信息,您还可以查看Google documentation,您可以在其中找到可能对您有帮助的示例代码。

【讨论】:

我认为您误解了我的问题:我知道您可以使用 python 自动化和批处理文件并从内部调用 ffmpeg。我想知道在哪里运行这样的脚本来避免不必要的网络流量,节省成本并保持可扩展性。也许它来自云运行、应用程序引擎或云功能。这就是我设置这些标签的原因(在 OP 中作为 GCP 的内置功能)。我将在 OP 中澄清这一点。无论如何,谢谢你的例子。它可能对我正在做的其他事情有所帮助。【参考方案2】:

我想说您的问题没有错误的答案,因为 App Engine、Cloud Functions 和 Cloud Run 都适用于您想要实现的目标,并且与此相关的成本也差不多。

在您做出决定时,您应该考虑:

您最熟悉的工具是什么; 在为我的应用选择无服务器产品时,Google Cloud 有什么建议,您可以在他们的 documentation 上找到一篇很好的文章; 您希望如何扩展。

就您所描述的问题,我个人会使用 App Engine。

注意:我知道这个答案很笼统,但这实际上取决于您的用例的具体情况以及您希望解决方案的外观。

【讨论】:

以上是关于批处理位于 Google Cloud Storage Bucket 上的对象的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

想从 Google Cloud Profiler 获取构建信息

Google Cloud KMS 错误 - 您所在地区无法访问此 API。 (HTTP 状态 - 403)

使用 Cloud Functions for Firebase 和 @google-cloud/storage 删除图像时出现问题

Google Cloud Datastore备份 - 已弃用?

Google Cloud Bigtable 协处理器支持

无法从 GCP 调度程序调用 Google Cloud Function