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

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

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

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

【问题讨论】:

    标签: google-app-engine google-cloud-platform google-cloud-functions google-cloud-pubsub google-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。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-15
      • 2015-01-25
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      • 2019-12-30
      • 1970-01-01
      • 2017-11-08
      相关资源
      最近更新 更多