本页面介绍如何创建和启动转移作业。
如需查看 Storage Transfer Service 是否支持您的来源和目标位置(也称为接收器),请参阅支持的来源和接收器。
代理和代理池
根据您的来源和目标位置,您可能需要在有权访问您的来源或目标位置的机器上创建和配置代理池并安装代理。
如果您从 Amazon S3、Microsoft Azure、网址列表或 Cloud Storage 转移到 Cloud Storage,则不需要代理和代理池。
如果您的转移作业的来源和/或目标位置是文件系统,或者来源是兼容 S3 的存储空间,则需要具有代理和代理池。如需查看相关说明,请参阅管理代理池。
准备工作
在配置转移作业之前,请确保您已配置好以下访问权限:
- 对于用户和服务账号:
- 对源数据和目标位置的访问权限。
如果您使用 gcloud
命令,请安装 gcloud CLI。
创建转移作业
请勿在转移作业名称中包含敏感信息,例如个人身份信息 (PII) 或安全数据。资源名称可能会传播到其他 Google Cloud 资源的名称,并且可能会向您项目之外的 Google 内部系统公开。
Google Cloud 控制台
转到 Google Cloud 控制台中的 Storage Transfer Service 页面。
点击创建转移作业。 系统随即会显示创建转移作业页面。
选择一个数据源:
Cloud Storage
您的用户账号必须具有 storage.buckets.get 权限才能选择来源和目标存储桶。或者,您可以直接输入存储桶的名称。如需了解详情,请参阅排查访问权限问题。
在来源类型下,选择 Cloud Storage。
选择目标类型。
如果您的目标是 Cloud Storage,请选择时间安排模式。批量转移是一次性或按计划执行的。事件驱动型转移会持续监控来源,并在添加或修改数据时转移数据。
如需配置事件驱动型转移,请按照事件驱动型转移中的说明操作。
点击下一步。
执行以下任一操作,选择一个存储桶,您也可以在该存储桶中选择一个文件夹:
在存储桶或文件夹字段中输入一个现有 Cloud Storage 存储桶的名称和路径,不加前缀
gs://
。例如my-test-bucket/path/to/files
。如需从另一个项目指定 Cloud Storage 存储桶,请在存储桶名称字段中准确输入名称。通过点击浏览,在您的项目中选择现有存储桶的列表,然后选择一个存储桶。
点击浏览时,您可以通过点击项目 ID 并选择新项目 ID 和存储桶来选择其他项目中的存储桶。
如需创建新存储桶,请点击 创建新存储桶。
如果是事件驱动型转移,请输入 Pub/Sub 订阅名称,格式如下:
projects/PROJECT_NAME/subscriptions/SUBSCRIPTION_ID
- (可选)选择按前缀过滤对象或按上次修改日期过滤对象。如果您将文件夹指定为源位置,则前缀过滤条件相对于该文件夹。例如,如果您的来源是
my-test-bucket/path/
,则file
的 include 过滤器会包含以my-test-bucket/path/file
开头的所有文件。 点击下一步。
Amazon S3
兼容 S3 的存储空间
Microsoft Azure Blob Storage
在来源类型下,选择 Azure Blob Storage 或 Data Lake Storage Gen2。
点击下一步。
指定下列内容:
存储账号名称 - 源 Microsoft Azure Storage 账号名称。
存储账号名称显示在 Microsoft Azure Storage 门户中,位于所有服务 > 存储 > 存储账号下。
容器名称 - Microsoft Azure Storage 容器名称。
容器名称显示在 Microsoft Azure Storage 门户中,位于 Storage Explorer > Blob 容器下。
共享访问签名 (SAS) - 从存储的访问权限政策创建的 Microsoft Azure Storage SAS 令牌。如需了解详情,请参阅使用共享访问签名 (SAS) 授予对 Azure Storage 资源的受限访问权限。
SAS 令牌的默认到期时间为 8 小时。在创建 SAS 令牌时,请确保设置合理的到期时间,以便成功完成转移。
- (可选)选择按前缀过滤对象或按上次修改日期过滤对象。如果您将文件夹指定为来源位置,则前缀过滤条件相对于该文件夹。例如,如果您的来源是
my-test-bucket/path/
,则file
的 include 过滤器会包含以my-test-bucket/path/file
开头的所有文件。 点击下一步。
文件系统
在来源类型下,选择 POSIX 文件系统。
选择目标类型,然后点击下一步。
您可以选择一个现有代理池,也可以选择创建代理池,然后按照说明创建一个新池。
指定文件系统目录的完全限定路径。
点击下一步。
HDFS
网址列表
选择目标:
Cloud Storage
在存储桶或文件夹字段中,输入目标存储桶以及(可选)文件夹名称,或点击浏览从当前项目的现有存储桶列表中选择一个存储桶。如需创建新存储桶,请点击 创建新存储桶。
点击下一步。
选择转移作业的设置。某些选项仅适用于特定来源/接收器组合。
在说明字段中,输入转移作业的说明。最佳做法是输入有意义且唯一的说明,以便区分作业。
在元数据选项下,您可以选择使用默认选项,也可以点击查看和选择选项为所有受支持的元数据指定值。如需了解详情,请参阅元数据保留。
在何时覆盖下,选择以下选项之一:
如果不同:如果同名的源文件具有不同的 ETag 或校验和值,则覆盖目标文件。
始终:当源文件同名时,即使源文件相同,也始终覆盖目标文件。
在何时删除下,选择以下选项之一:
永不:永不从源或目标中删除文件。
在转移文件后从数据源删除文件:将文件转移到目标位置后,从数据源中删除文件。
如果文件不在数据源中则从目标位置删除文件:如果目标 Cloud Storage 存储桶中的文件也不在数据源中,则从 Cloud Storage 存储桶中删除文件。
此选项可确保目标 Cloud Storage 存储桶与您的数据源完全匹配。
在通知选项下,选择 Pub/Sub 主题以及要通知的事件。如需了解详情,请参阅 Pub/Sub 通知。
点击下一步。
文件系统
您可以选择一个现有代理池,也可以选择创建代理池,然后按照说明创建一个新池。
指定目标目录的完全限定路径。
点击下一步。
选择时间安排选项:
从运行一次下拉列表中,选择以下选项之一:
运行一次:从您选择的时间开始运行一次转移作业。
每天运行:每天从您选择的时间开始,每天运行转移作业。
您可以输入可选的结束日期,或者将结束日期留空以持续运行转移作业。
每周运行:从您选择的时间开始,每周运行一次转移作业。
按自定义频率运行:按您选择的频率运行转移作业。您可以选择按照小时、天或周的固定间隔来重复运行转移作业。
您可以输入可选的结束日期,或者将结束日期留空以持续运行转移作业。
从立即开始下拉列表中,选择以下选项之一:
立即开始:点击创建后开始转移作业。
开始日期:在您选择的日期和时间开始转移作业。点击日历,以显示一个日历来选择开始日期。
要创建转移作业,请点击创建。
gcloud CLI
如需创建新的转移作业,请使用 gcloud transfer jobs create
命令。除非指定了时间表或 --do-not-run
,否则创建新作业时会启动指定的转移作业。
gcloud transfer jobs create \
SOURCE DESTINATION
其中:
SOURCE 是此转移作业的数据源。每个来源的格式可以为:
- Cloud Storage:
gs://BUCKET_NAME
。如需从特定文件夹进行转移,请指定gs://BUCKET_NAME/FOLDER_PATH/
,包括尾部斜杠。 - Amazon S3:
s3://BUCKET_NAME/FOLDER_PATH
- 兼容 S3 的存储空间:
s3://BUCKET_NAME
。存储桶名称是相对于端点分配的。例如,如果您的数据位于https://us-east-1.example.com/folder1/bucket_a
,请输入s3://folder1/bucket_a
。 - Microsoft Azure Storage:
https://myaccount.blob.core.windows.net/CONTAINER_NAME
- 网址列表:
https://PATH_TO_URL_LIST
或http://PATH_TO_URL_LIST
- POSIX 文件系统:
posix:///PATH
。必须是以代理宿主机根目录开头的绝对路径。 - HDFS:
hdfs:///PATH
- Cloud Storage:
DESTINATION 可为以下项之一:
- Cloud Storage:
gs://BUCKET_NAME
。如需转移到特定目录,请指定gs://BUCKET_NAME/FOLDER_PATH/
,包括尾部斜杠。 - POSIX 文件系统:
posix:///PATH
。必须是以代理宿主机根目录开头的绝对路径。
- Cloud Storage:
如果您的转移作业需要使用转移代理,则您可以使用以下选项:
--source-agent-pool
指定要用于此转移作业的来源代理池。如果您从文件系统进行转移,则必须指定该选项。--destination-agent-pool
指定要用于此转移作业的目标代理池。如果您要转移到文件系统,则必须指定该选项。--intermediate-storage-path
是 Cloud Storage 存储桶的路径,格式为gs://my-intermediary-bucket
。如果您要在两个文件系统之间进行转移,则必须指定该选项。如需详细了解如何创建中间存储桶,请参阅创建 Cloud Storage 存储桶作为中间存储桶。
其他选项包括:
--source-creds-file
指定机器上本地文件的相对路径,该文件包含转移作业来源的 AWS 或 Azure 凭据。如需了解凭据文件格式,请参阅 TransferSpec 参考文档。--do-not-run
可阻止 Storage Transfer Service 在提交命令后运行作业。如需运行作业,请更新作业以添加时间表,或使用jobs run
来手动启动作业。--manifest-file
指定 Cloud Storage 中 CSV 文件的路径,该文件包含要从来源转移的文件的列表。如需了解清单文件的格式,请参阅使用清单转移特定文件或对象。作业信息:您可以指定
--name
、--description
和--source-creds-file
。时间表:您可以指定
--schedule-starts
、--schedule-repeats-every
和--schedule-repeats-until
或--do-not-run
。对象条件:您可以使用条件确定要转移的对象。这些条件包括
--include-prefixes
和--exclude-prefixes
以及--include-modified-[before | after]-[absolute | relative]
中基于时间的条件。 如果您为源代码指定了文件夹,则前缀过滤器相对于该文件夹。如需了解详情,请参阅按前缀过滤源对象。涉及文件系统的转移不支持对象条件。
转移选项:指定是否覆盖目标文件(
--overwrite-when=different
或always
),以及是否要在转移过程中或之后删除某些文件(--delete-from=destination-if-unique
或source-after-transfer
);指定要保留的元数据值 (--preserve-metadata
);(可选)为转移的对象设置存储类别 (--custom-storage-class
)。通知:使用
--notification-pubsub-topic
、--notification-event-types
和--notification-payload-format
为转移作业配置 Pub/Sub 通知。Cloud Logging:使用
--log-actions
和--log-action-states
为无代理转移作业或来自兼容 S3 的来源的转移作业启用 Cloud Logging。如需了解详情,请参阅适用于 Storage Transfer Service 的 Cloud Logging。
从兼容 S3 的来源转移时,您还可以使用以下选项:
--source-endpoint
(必需)指定存储系统的端点。例如s3.example.com
。请向您的提供商确认正确的格式。请勿指定协议(http://
或https://
)。--source-signing-region
指定签名请求的区域。如果您的存储提供商不需要签名区域,请省略此标志。--source-auth-method
指定要使用的身份验证方法。有效值为AWS_SIGNATURE_V2
或AWS_SIGNATURE_V4
。如需了解详情,请参阅 Amazon 的 SigV4 和 SigV2 文档。--source-request-model
指定要使用的寻址样式。有效值为PATH_STYLE
或VIRTUAL_HOSTED_STYLE
。 路径样式使用格式https://s3.example.com/BUCKET_NAME/KEY_NAME
。虚拟托管样式使用格式 https://BUCKET_NAME.s3.example.com/KEY_NAME。--source-network-protocol
指定代理应该为此作业使用的网络协议。有效值为HTTP
或HTTPS
。--source-list-api
指定用于从存储桶返回对象的 S3 Listing API 的版本。有效值为LIST_OBJECTS
或LIST_OBJECTS_V2
。如需了解详情,请参阅 Amazon 的 ListObjectsV2 和 ListObjects 文档。
如需查看所有选项,请运行 gcloud transfer jobs create --help
或参阅 gcloud
参考文档。
示例
Amazon S3 到 Cloud Storage
请参阅将数据从 Amazon S3 传输到 Cloud Storage。
兼容 S3 的存储空间到 Cloud Storage
请参阅从兼容 S3 的存储空间转移到 Cloud Storage。
文件系统到 Cloud Storage
Cloud Storage 到文件系统
如需从 Cloud Storage 存储桶转移到文件系统,请指定以下项。
gcloud transfer jobs create \
gs://my-storage-bucket posix:///tmp/destination \
--destination-agent-pool=my-destination-agent-pool
文件系统到文件系统
如需在两个文件系统之间进行转移,您必须指定来源代理池、目标代理池以及一个数据通过其进行传递的中间 Cloud Storage 存储桶。
如需详细了解中间存储桶,请参阅创建 Cloud Storage 存储桶作为中间存储桶。
然后,在调用 transfer jobs create
时指定这 3 个资源:
gcloud transfer jobs create \
posix:///tmp/source/on/systemA posix:///tmp/destination/on/systemB \
--source-agent-pool=source_agent_pool \
--destination-agent-pool=destination_agent_pool \
--intermediate-storage-path=gs://my-intermediary-bucket
REST
以下示例展示了如何通过 REST API 使用 Storage Transfer Service。
使用 Storage Transfer Service API 配置或编辑转移作业时,必须采用世界协调时间 (UTC)。如需详细了解如何指定转移作业的时间表,请参阅时间表。
在 Cloud Storage 存储桶之间传输数据
本示例演示了如何将文件从一个 Cloud Storage 存储分区传输到另一个 Cloud Storage 存储分区。例如,您可以将数据移动到位于另一个位置的存储桶。
使用 transferJobs create 发出请求:
POST https://storagetransfer.googleapis.com/v1/transferJobs { "description": "YOUR DESCRIPTION", "status": "ENABLED", "projectId": "PROJECT_ID", "schedule": { "scheduleStartDate": { "day": 1, "month": 1, "year": 2015 }, "startTimeOfDay": { "hours": 1, "minutes": 1 } }, "transferSpec": { "gcsDataSource": { "bucketName": "GCS_SOURCE_NAME" }, "gcsDataSink": { "bucketName": "GCS_SINK_NAME" }, "transferOptions": { "deleteObjectsFromSourceAfterTransfer": true } } }
200 OK { "transferJob": [ { "creationTime": "2015-01-01T01:01:00.000000000Z", "description": "YOUR DESCRIPTION", "name": "transferJobs/JOB_ID", "status": "ENABLED", "lastModificationTime": "2015-01-01T01:01:00.000000000Z", "projectId": "PROJECT_ID", "schedule": { "scheduleStartDate": { "day": 1, "month": 1, "year": 2015 }, "startTimeOfDay": { "hours": 1, "minutes": 1 } }, "transferSpec": { "gcsDataSource": { "bucketName": "GCS_SOURCE_NAME", }, "gcsDataSink": { "bucketName": "GCS_NEARLINE_SINK_NAME" }, "objectConditions": { "minTimeElapsedSinceLastModification": "2592000.000s" }, "transferOptions": { "deleteObjectsFromSourceAfterTransfer": true } } } ] }
将数据从 Amazon S3 传输到 Cloud Storage
请参阅将数据从 Amazon S3 传输到 Cloud Storage。
在 Microsoft Azure Blob Storage 和 Cloud Storage 之间转移
本示例演示了如何使用 Microsoft Azure Storage 共享访问签名 (SAS) 令牌将文件从 Microsoft Azure Storage 移至 Cloud Storage 存储桶。
如需详细了解 Microsoft Azure Storage SAS,请参阅使用共享访问签名 (SAS) 授予对 Azure Storage 资源的有限访问权限。
在开始之前,请查看配置对 Microsoft Azure Storage 的访问权限和价格部分,以了解将数据从 Microsoft Azure Storage 转移到 Cloud Storage 会对您产生哪些影响。
使用 transferJobs create 发出请求:
POST https://storagetransfer.googleapis.com/v1/transferJobs { "description": "YOUR DESCRIPTION", "status": "ENABLED", "projectId": "PROJECT_ID", "schedule": { "scheduleStartDate": { "day": 14, "month": 2, "year": 2020 }, "scheduleEndDate": { "day": 14 "month": 2, "year": 2020 }, "startTimeOfDay": { "hours": 1, "minutes": 1 } }, "transferSpec": { "azureBlobStorageDataSource": { "storageAccount": "AZURE_SOURCE_NAME", "azureCredentials": { "sasToken": "AZURE_SAS_TOKEN", }, "container": "AZURE_CONTAINER", }, "gcsDataSink": { "bucketName": "GCS_SINK_NAME" } } }
200 OK { "transferJob": [ { "creationTime": "2020-02-14T01:01:00.000000000Z", "description": "YOUR DESCRIPTION", "name": "transferJobs/JOB_ID", "status": "ENABLED", "lastModificationTime": "2020-02-14T01:01:00.000000000Z", "projectId": "PROJECT_ID", "schedule": { "scheduleStartDate": { "day": 14 "month": 2, "year": 2020 }, "scheduleEndDate": { "day": 14, "month": 2, "year": 2020 }, "startTimeOfDay": { "hours": 1, "minutes": 1 } }, "transferSpec": { "azureBlobStorageDataSource": { "storageAccount": "AZURE_SOURCE_NAME", "azureCredentials": { "sasToken": "AZURE_SAS_TOKEN", }, "container": "AZURE_CONTAINER", }, "objectConditions": {}, "transferOptions": {} } } ] }
从文件系统转移
指定来源路径和目标路径
来源路径和目标路径可让您在将数据转移到 Cloud Storage 存储桶时指定来源目录和目标目录。例如,假设您有文件 file1.txt
和 file2.txt
,以及一个名为 B
的 Cloud Storage 存储桶。如果您设置了名为 my-stuff
的目标路径,则在转移完成后,您的文件将位于 gs://B/my-stuff/file1.txt
和 gs://B/my-stuff/file2.txt
。
指定来源路径
如需在创建转移作业时指定来源路径,请在 TransferSpec
规范的 gcsDataSource
字段中添加 path
字段:
{ gcsDataSource: { bucketName: "SOURCE_BUCKET", path: "SOURCE_PATH/", }, }
在此示例中:
- SOURCE_BUCKET:来源 Cloud Storage 存储桶。
- SOURCE_PATH:来源 Cloud Storage 路径。
指定目标路径
要在创建转移作业时指定目标文件夹,请在 TransferSpec
规范的 gcsDataSink
字段中添加 path
字段:
{ gcsDataSink: { bucketName: "DESTINATION_BUCKET", path: "DESTINATION_PATH/", }, }
在此示例中:
- DESTINATION_BUCKET:目标 Cloud Storage 存储桶。
- DESTINATION_PATH:目标 Cloud Storage 路径。
完整的示例请求
以下是完整请求的示例:
POST https://storagetransfer.googleapis.com/v1/transferJobs { "description": "YOUR DESCRIPTION", "status": "ENABLED", "projectId": "PROJECT_ID", "schedule": { "scheduleStartDate": { "day": 1, "month": 1, "year": 2015 }, "startTimeOfDay": { "hours": 1, "minutes": 1 } }, "transferSpec": { "gcsDataSource": { "bucketName": "GCS_SOURCE_NAME", "path": "GCS_SOURCE_PATH", }, "gcsDataSink": { "bucketName": "GCS_SINK_NAME", "path": "GCS_SINK_PATH", }, "objectConditions": { "minTimeElapsedSinceLastModification": "2592000s" }, "transferOptions": { "deleteObjectsFromSourceAfterTransfer": true } } }
客户端库
以下示例展示了如何通过 Go、Java、Node.js 和 Python 以编程方式使用 Storage Transfer Service。
以编程方式配置或修改转移作业时,必须采用世界协调时间 (UTC)。如需详细了解如何指定转移作业的时间表,请参阅时间表。
如需详细了解 Storage Transfer Service 客户端库,请参阅 Storage Transfer Service 客户端库使用入门。
在 Cloud Storage 存储分区之间传输数据
本示例演示了如何将文件从一个 Cloud Storage 存储分区传输到另一个 Cloud Storage 存储分区。例如,您可以将数据移动到位于另一个位置的存储桶。
Go
Java
想要寻找较早的示例?请参阅 Storage Transfer Service 迁移指南。
Node.js
Python
想要寻找较早的示例?请参阅 Storage Transfer Service 迁移指南。
将数据从 Amazon S3 传输到 Cloud Storage
请参阅将数据从 Amazon S3 传输到 Cloud Storage。
在 Microsoft Azure Blob Storage 和 Cloud Storage 之间转移
本示例演示了如何使用 Microsoft Azure Storage 共享访问签名 (SAS) 令牌将文件从 Microsoft Azure Storage 移至 Cloud Storage 存储桶。
如需详细了解 Microsoft Azure Storage SAS,请参阅使用共享访问签名 (SAS) 授予对 Azure Storage 资源的有限访问权限。
在开始之前,请查看配置对 Microsoft Azure Storage 的访问权限和价格部分,以了解将数据从 Microsoft Azure Storage 转移到 Cloud Storage 会对您产生哪些影响。
Go
如需了解如何安装和使用 Storage Transfer Service 客户端库,请参阅 Storage Transfer Service 客户端库。 如需了解详情,请参阅 Storage Transfer Service Go API 参考文档。
如需向 Storage Transfer Service 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用 Storage Transfer Service 客户端库,请参阅 Storage Transfer Service 客户端库。 如需了解详情,请参阅 Storage Transfer Service Java API 参考文档。
如需向 Storage Transfer Service 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解如何安装和使用 Storage Transfer Service 客户端库,请参阅 Storage Transfer Service 客户端库。 如需了解详情,请参阅 Storage Transfer Service Node.js API 参考文档。
如需向 Storage Transfer Service 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装和使用 Storage Transfer Service 客户端库,请参阅 Storage Transfer Service 客户端库。 如需了解详情,请参阅 Storage Transfer Service Python API 参考文档。
如需向 Storage Transfer Service 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。