Storage Transfer Service 支持转移使用清单指定的特定文件或对象。清单是一个上传到 Cloud Storage 中的 CSV 文件,其中包含一个可供 Storage Transfer Service 操作的文件或对象列表。
清单可用于以下转移:
从 AWS S3、Azure Blobstore 或 Cloud Storage 到 Cloud Storage 存储桶。
从文件系统到 Cloud Storage 存储桶。
从 S3 兼容存储空间到 Cloud Storage 存储桶。
从 Cloud Storage 存储桶到文件系统。
在两个文件系统之间。
从可公开访问的 HTTP/HTTPS 来源到 Cloud Storage 存储桶。 请按照创建网址列表中的说明操作,因为清单格式是网址列表所特有的。
创建清单
清单必须采用 CSV 格式,可以包含任何 UTF-8 字符。第一列必须是指定为字符串的文件名称或对象名称。
清单文件不支持通配符。值必须是具体的文件或对象名称。不支持没有文件或对象名称的文件夹名称。
清单文件的大小上限为 1 GiB,相当于大约 100 万行。如果您需要转移大于 1 GiB 的清单文件,可以将其拆分为多个文件,然后运行多个转移作业。
如果文件或对象名称包含英文逗号,则必须根据 CSV 标准将名称括在双引号中。例如 "object1,a.txt"
。
我们建议您使用一小部分文件或对象来测试转移作业,以避免因配置错误而进行不必要的 API 调用。
您可以从“转移作业”页面监控文件传输的状态。转移日志中会列出转移失败的文件或对象。
文件系统转移
如需在文件系统上创建文件清单,请创建只有一个列的 CSV 文件,其中包含相对于转移作业创建时指定的根目录的文件路径。
例如,您可能想要转移以下文件系统文件:
文件路径 |
---|
rootdir/dir1/subdir1/file1.txt |
rootdir/file2.txt |
rootdir/dir2/subdir1/file3.txt |
您的清单应该如以下示例所示:
dir1/subdir1/file1.txt
file2.txt
dir2/subdir1/file3.txt
对象存储转移
如需创建对象的清单,请创建一个 CSV 文件,其中第一列包含相对于转移作业创建时指定的存储桶名称和路径的对象名称。所有对象都必须位于同一存储桶中。
您还可以指定包含要转移的特定版本的 Cloud Storage 世代编号的可选第二列。
例如,您可能想要转移以下对象:
对象路径 | Cloud Storage 世代编号 |
---|---|
SOURCE_PATH/object1.pdf |
1664826685911832 |
SOURCE_PATH/object2.pdf |
|
SOURCE_PATH/object3.pdf |
1664826610699837 |
您的清单应该如以下示例所示:
object1.pdf,1664826685911832
object2.pdf
object3.pdf,1664826610699837
使用任意文件名和 .csv
扩展名保存清单文件。
HTTP/HTTPS 转移
如需从 HTTP 或 HTTPS 来源转移特定文件,请参阅创建网址列表中的说明。
发布清单
创建清单后,您必须将其提供给 Storage Transfer Service。Storage Transfer Service 可以访问 Cloud Storage 存储桶中的文件或文件系统中的文件。
将清单上传到 Cloud Storage
您可以将清单文件存储在任何 Cloud Storage 存储桶中。
运行转移作业的服务代理必须具有包含清单的存储桶的 storage.objects.get
权限。如需了解如何查找服务代理 ID 以及向该服务代理授予存储桶的权限,请参阅授予所需权限。
如需了解如何将清单上传到存储桶,请参阅 Cloud Storage 文档中的上传对象。
例如,如需使用 gcloud
CLI 将文件上传到 Cloud Storage,请使用 gcloud storage cp
命令:
gcloud storage cp MANIFEST.CSV gs://DESTINATION_BUCKET_NAME/
其中:
MANIFEST.CSV
是清单文件的本地路径。例如Desktop/manifest01.csv
。DESTINATION_BUCKET_NAME
是对象要上传到的存储桶的名称。例如my-bucket
。
如果成功,则响应类似如下示例:
Completed files 1/1 | 164.3kiB/164.3kiB
您可以使用客户管理的 Cloud KMS 加密密钥对清单进行加密。在这种情况下,请确保为访问清单的任何服务账号分配适用的加密密钥。不支持客户提供的密钥。
将清单存储在文件系统中
您可以将清单文件存储在来源或目标文件系统上。
文件的位置必须可供转移代理访问。如果您限制代理的目录访问权限,请确保清单文件位于已挂载的目录中。
开始转移
在转移操作完成之前,请勿修改清单文件。我们建议您在进行转移时锁定清单文件。
Cloud 控制台
如需通过 Cloud 控制台启动具有清单的转移作业,请执行以下操作:
按照创建转移中的说明选择来源、目的地和选项。
在最后一步中,选择设置,然后选中名为通过清单文件提供要传输的文件列表的复选框。
输入清单文件的位置。
gcloud
如需转移清单中列出的文件或对象,请在 gcloud transfer jobs create
命令中添加 --manifest-file=MANIFEST_FILE
标志。
gcloud transfer jobs create SOURCE DESTINATION \
--manifest-file=MANIFEST_FILE
MANIFEST_FILE 可以是以下任何值:
Cloud Storage 存储桶中 CSV 文件的路径:
--manifest-file=gs://my_bucket/sample_manifest.csv
如果存储桶或文件不是公开的,请参阅将清单上传到 Cloud Storage 以详细了解所需的权限。
相对于文件系统 SOURCE 的相对路径,包括指定的任何路径:
--manifest-file=source://relative_path/sample_manifest.csv
文件系统 DESTINATION 中的相对路径,包括指定的任何路径:
--manifest-file=destination://relative_path/sample_manifest.csv
REST + 客户端库
REST
如需转移清单中列出的文件或对象,请进行 createTransferJob
API 调用,该调用指定添加了 transferManifest
字段的 transferSpec
。例如:
POST https://storagetransfer.googleapis.com/v1/transferJobs ... "transferSpec": { "posixDataSource": { "rootDirectory": "/home/", }, "gcsDataSink": { "bucketName": "GCS_NEARLINE_SINK_NAME", "path": "GCS_SINK_PATH", }, "transferManifest": { "location": "gs://my_bucket/sample_manifest.csv" } }
清单文件可以存储在 Cloud Storage 存储桶中,也可以存储在来源或目标文件系统上。Cloud Storage 存储桶必须使用 gs://
前缀并包含完整路径(包括存储桶名称)。文件系统位置必须使用 source://
或 destination://
前缀,并且相对于文件系统源或目标以及可选的根目录。
Go
Java
Node.js
Python
清单中的对象或文件不一定以列出的顺序转移。
如果清单包含目标位置中已存在的文件,除非指定了覆盖接收器中已存在的对象选项,否则系统会跳过这些文件。
如果清单包含目标位置的其他版本中存在的对象,则目标位置中的对象会被该对象的来源版本覆盖。如果目标位置是受版本控制的存储桶,则系统会创建该对象的新版本。
后续步骤
- 了解如何过滤转移作业中的对象。
- 了解如何安排转移作业。