在 NodeJs 中将存储桶数据从一个项目复制到另一个项目的实用程序

Utility for copying bucket data from one project to another in NodeJs

我需要将数据从 gCloud 项目 A 中的一个存储桶复制到项目 B 中的另一个存储桶。如果 NodeJs 中存在任何实用程序可以执行此操作?

您可以使用Cloud Storage Client Libraries。要复制您的一个 Cloud Storage 存储桶中的对象,请参阅此示例代码:

const srcBucketName = 'your-source-bucket';
const srcFilename = 'your-file-name';
const destBucketName = 'target-file-bucket';
const destFileName = 'target-file-name';

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

async function copyFile() {
  // Copies the file to the other bucket
  await storage
    .bucket(srcBucketName)
    .file(srcFilename)
    .copy(storage.bucket(destBucketName).file(destFileName));

  console.log(
    `gs://${srcBucketName}/${srcFilename} copied to gs://${destBucketName}/${destFileName}`
  );
}

copyFile().catch(console.error);

此外,您需要确保您已 assigned a role 获得其他项目的必要权限。

您可能想要获取存储桶中的 blob 列表,下载它们,然后将它们上传到另一个存储桶(这就是 gsuilt cp -m gs://origin_bucket/** gs://destination_bucket/ 所做的)。

这种方法的问题是你会消耗 CPU(在你这边),并且需要一些时间。

如果要将 所有 数据从一个存储桶移动到另一个存储桶,最好的方法是使用 Storage Transfer Service.

使用存储传输服务,您只需告诉源存储桶和目标存储桶,以及可选的时间表...google 将比您自己执行操作快得多。

另请记住,源和目标存储桶也可以是 GCS 存储桶、S3 或 Azure 存储存储桶。

看看google-provided Node Sample Code for Storage Transfer Service.

如果您只想传输一些文件,存储传输服务有一项功能(2022 年 2 月处于测试阶段),允许您指定清单文件(存储在 gcs 存储桶中的 CSV 文件)。参见:Transfer specific files or objects using a Manifest