批处理位于 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 删除图像时出现问题