如何解决批处理位于 Google Cloud Storage Bucket 上的对象的最佳方法
我需要使用 ffmpeg 连接 GCP Storage 存储桶上的大量视频,然后将结果保存到另一个存储桶。
我对 GCP 很陌生,所以我通常会启动一个虚拟机并让它(通过脚本)使用 gsutil 下载视频,处理它们,然后再次使用 gsutil 上传结果,但正如我理解这会在网络流量、处理成本和可扩展性方面非常低效。
那么,笼统地说,运行此类脚本的最佳 GCP 内置功能是:App Engine、Cloud Functions 还是 Cloud Run,它会带来什么?
解决方法
我想说您的问题没有错误答案,因为 App Engine、Cloud Functions 和 Cloud Run 都可以满足您想要实现的目标,并且与此相关的成本是相似的。
当您做出决定时,您应该考虑:
- 您最熟悉什么工具;
- Google Cloud 在为我的应用选择无服务器产品时有什么建议,您可以在他们的 documentation 上找到一篇关于此的好文章;
- 您希望它如何扩展。
就您所描述的问题而言,我个人会选择 App Engine。
注意:我知道这个答案很笼统,但这实际上取决于您的用例的具体情况以及您希望解决方案的样子。
,您可以通过创建应用程序并使用 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,您可以在其中找到可能对您有帮助的示例代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。