Storage 移轉服務支援從與 Amazon S3 API 相容的雲端或地端物件儲存系統進行轉移。
Storage 移轉服務會使用部署在資料來源附近 VM 上的移轉代理程式,存取 S3 相容儲存空間中的資料。這些代理程式會在 Docker 容器中執行,並屬於代理程式集區。代理程式集區是一組使用相同設定的代理程式,可共同平行移動資料。
這項功能可讓您從地端或雲端物件儲存空間遷移至 Cloud Storage、封存資料以釋出地端儲存空間容量、將資料複製到Google Cloud 以確保業務持續運作,或將資料轉移至Google Cloud 以進行分析和處理。如果客戶要從 AWS S3 遷移至 Cloud Storage,這項功能可讓他們控管前往 Google Cloud的網路路徑,大幅降低輸出資料傳輸費用。
事前準備
設定轉移作業前,請先完成下列步驟:
- 安裝 gcloud CLI。
- 符合檔案系統轉移作業的相關規定,包括在轉移代理程式機器上安裝 Docker。
取得來源憑證
如要從與 S3 相容的儲存空間轉移資料,必須提供存取金鑰 ID 和存取密鑰。
取得這些資訊的步驟取決於儲存空間供應商。
產生 ID 和金鑰的帳戶必須具備下列其中一項權限:
- 來源物件的唯讀權限 (如果您不想刪除來源物件)。
- 如果您選擇在轉移時刪除來源物件,則需要來源物件的完整存取權。
建立帳戶、新增權限,並下載存取金鑰 ID 和私密存取金鑰後,請將 ID 和金鑰存放在安全的地方。
設定 Google Cloud 權限
建立移轉作業前,您必須為下列實體設定權限:
用於建立轉移作業的使用者帳戶。這是登入 Google Cloud 控制台的帳戶,或是驗證 `gcloud` CLI 時指定的帳戶。使用者帳戶可以是一般使用者帳戶,也可以是使用者管理的服務帳戶。 | |
Storage 移轉服務使用的Google 代管服務帳戶,又稱為服務代理程式。這個帳戶通常會以電子郵件地址識別,格式為 project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com 。
|
|
![]() |
提供轉移代理程式權限的轉移代理程式帳戶。 Google Cloud 移轉代理程式帳戶會使用安裝代理程式的使用者憑證,或使用者管理的服務帳戶憑證進行驗證。 |
如需操作說明,請參閱「以代理程式為準的轉移權限」。
轉移作業選項
從與 S3 相容的儲存空間移轉至 Cloud Storage 時,可以使用下列 Storage 移轉服務功能:
- 使用資訊清單轉移特定檔案
- 您可以傳遞檔案清單,供 Storage 移轉服務處理。詳情請參閱「使用資訊清單轉移特定檔案或物件」。
- 指定儲存空間級別
- 您可以指定目的地 bucket 中資料要使用的
Cloud Storage 儲存空間類別。如要查看 REST 詳細資料,請參閱
StorageClass
選項,或搭配 Google Cloud CLI 使用--custom-storage-class
旗標。請注意,如果目的地 bucket 啟用 Autoclass,系統會忽略所有儲存空間級別設定。如果啟用自動調整級別功能,轉移至 bucket 的物件一開始會設為 Standard Storage。
- 保存中繼資料
-
從與 S3 相容的儲存空間移轉檔案時,Storage 移轉服務可以選擇保留特定屬性做為自訂中繼資料。
如要瞭解可保留的中繼資料,以及如何設定移轉作業,請參閱「中繼資料保留」一文的「 從 Amazon S3 或 S3 相容儲存空間移轉至 Cloud Storage」一節。
- 記錄和監控
- 您可以在 Cloud Logging 和 Cloud Monitoring 中查看從與 S3 相容的儲存空間轉出的資料。詳情請參閱「適用於 Storage 移轉服務的 Cloud Logging」和「監控移轉工作」。您也可以設定 Pub/Sub 通知。
建立代理程式集區
如要建立代理程式集區,請按照下列指示操作:
Google Cloud 控制台
REST API
使用 projects.agentPools.create:
POST https://storagetransfer.googleapis.com/v1/projects/PROJECT_ID/agentPools?agent_pool_id=AGENT_POOL_ID
其中:
PROJECT_ID
:您要在其中建立代理程式集區的專案 ID。AGENT_POOL_ID
:您要建立的代理程式集區 ID。
如果代理程式集區停滯在 Creating
狀態超過 30 分鐘,建議您刪除該集區並重新建立。
如果代理程式集區處於 Creating
狀態,從專案撤銷必要的 Storage 移轉服務權限,會導致服務行為異常。
gcloud CLI
如要使用 gcloud
指令列工具建立代理程式集區,請執行 [gcloud transfer agent-pools create
][agent-pools-create]。
gcloud transfer agent-pools create AGENT_POOL
可用的選項如下:
AGENT_POOL 是這個集區的專屬永久 ID。
--no-async
會封鎖終端機中的其他工作,直到集區建立完成為止。如果未納入,集區建立作業會以非同步方式執行。--bandwidth-limit
定義這個集區的代理程式可以使用多少頻寬 (以 MB/s 為單位)。頻寬限制會套用至集區中的所有代理程式,可防止集區的轉移工作負載導致共用頻寬的其他作業發生中斷。舉例來說,輸入「50」即可將頻寬上限設為 50 MB/s。如未指定這項旗標,這個集區的代理程式將使用所有可用頻寬。--display-name
是可修改的名稱,方便您識別這個集區。您可以加入可能不適合用於集區專屬完整資源名稱的詳細資料。
安裝轉移代理程式
移轉代理程式是軟體代理程式,可透過 Storage 移轉服務協調來源的移轉活動。必須安裝在可存取來源資料的系統上。
gcloud CLI
如要使用 gcloud
CLI 安裝代理程式,以便搭配 S3 相容來源使用,請使用 transfer agents install
指令。
您必須以環境變數的形式提供存取憑證,做為 AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
的值,或將憑證儲存在系統設定檔中做為預設憑證。
export AWS_ACCESS_KEY_ID=ID
export AWS_SECRET_ACCESS_KEY=SECRET
gcloud transfer agents install --pool=POOL_NAME
如要使用服務帳戶金鑰執行代理程式,請使用 --creds-file
選項:
gcloud transfer agents install --pool=POOL_NAME \
--creds-file=/relative/path/to/service-account-key.json
建立移轉工作
Google Cloud 控制台
請按照下列步驟,從與 S3 相容的來源建立轉移作業,將資料轉移至 Cloud Storage 值區。
前往 Google Cloud 控制台的「Storage Transfer Service」頁面。
按一下「建立移轉工作」。系統隨即會顯示「建立移轉工作」頁面。
選取「與 S3 相容的物件儲存系統」做為「來源類型」。目的地必須是 Google Cloud Storage。
點選「下一步」。
設定來源
指定這項轉移作業的必要資訊:
選取您為這項轉移作業設定的代理程式集區。
輸入端點的「Bucket name」(值區名稱)。舉例來說,如果您的資料位於:
https://example.com/bucket_a
輸入:
bucket_a
輸入「端點」。請勿加入通訊協定 (
http://
或https://
) 或 bucket 名稱。例如:example.com
指定這項轉移作業的任何選用屬性:
輸入用於簽署要求的簽署區域。
為這項要求選擇「簽署程序」。
選取「位址樣式」。這會決定是否以路徑樣式提供值區名稱 (例如
https://example.com/bucket-name/key-name
) 或虛擬託管型 (例如https://bucket-name.example.com/key-name
)。詳情請參閱 Amazon 說明文件中的「Virtual hosting of buckets」。選取「網路通訊協定」。
選取要使用的房源 API 版本。詳情請參閱 ListObjectsV2 和 ListObjects 說明文件。
點選「下一步」。
設定接收器
在「Bucket or folder」(值區或資料夾) 欄位中,輸入目的地值區和 (選用) 資料夾名稱,或按一下「Browse」(瀏覽),從目前專案的現有值區清單中選取值區。如要建立新值區,請按一下「建立新值區」
。
點選「下一步」。
選擇轉移設定
在「說明」欄位中輸入轉移作業的說明。最佳做法是輸入有意義且獨特的說明,方便您區分工作。
在「中繼資料選項」下方,選擇使用預設選項,或點選「查看及選取選項」,為所有支援的中繼資料指定值。詳情請參閱「保留中繼資料」。
在「何時要覆寫」下方,選取下列其中一個選項:
如果不同:如果來源檔案與目的地檔案名稱相同,但 ETag 或總和檢查碼值不同,則覆寫目的地檔案。
一律覆寫:來源檔案與目的地檔案的名稱相同時,一律覆寫目的地檔案 (即便檔案內容完全相同)。
在「何時刪除」下方,選取下列其中一個選項:
永不:永不刪除來源或目的地的檔案。
轉移檔案後,請從來源刪除檔案:將檔案轉移至目的地後,從來源刪除檔案。如果來源檔案未轉移 (例如目的地中已存在該檔案),來源檔案就不會遭到刪除。
如果檔案未同時存在於來源,則將檔案從目的地中刪除:如果目的地 Cloud Storage 值區中的檔案未同時存在於來源,則將檔案從 Cloud Storage 值區中刪除。
這個選項可確保目的地 Cloud Storage bucket 與來源完全相符。
在「Notification options」(通知選項) 下方,選取 Pub/Sub 主題和要接收通知的事件。詳情請參閱「Pub/Sub 通知」。
點選「下一步」。
排定轉移時間
您可以安排轉移作業只執行一次,也可以設定週期性轉移作業。
按一下「建立」即可建立轉移工作。
gcloud CLI
使用 gcloud
CLI 建立移轉作業前,請按照「設定 Cloud Storage 接收端的存取權」一文中的操作說明進行設定。
如要使用 gcloud
CLI 從與 S3 相容的來源建立轉移作業,並轉移至 Cloud Storage bucket,請使用下列指令。
gcloud transfer jobs create s3://SOURCE_BUCKET_NAME gs://SINK_BUCKET_NAME \
--source-agent-pool=POOL_NAME \
--source-endpoint=ENDPOINT \
--source-signing-region=REGION \
--source-auth-method=AWS_SIGNATURE_V2 | AWS_SIGNATURE_V4 \
--source-request-model=PATH_STYLE | VIRTUAL_HOSTED_STYLE \
--source-network-protocol=HTTP | HTTPS \
--source-list-api=LIST_OBJECTS | LIST_OBJECTS_V2
必須加上以下旗標:
--source-agent-pool
是要用於這項轉移作業的代理程式集區名稱。--source-endpoint
指定儲存系統的端點。例如:s3.us-east.example.com
。請向供應商確認正確格式。請勿加上通訊協定 (例如https://
) 或 bucket 名稱。
其餘旗標為選用:
--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.REGION.example.com/BUCKET_NAME/KEY_NAME
格式。虛擬託管型使用 `https://BUCKET_NAME.s3.REGION.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
參考說明文件。
REST API
使用 REST API 建立轉移作業前,請按照設定 Cloud Storage 接收端的存取權中的操作說明進行。
如要使用 REST API 從與 S3 相容的來源建立轉移作業,請建立類似下列範例的 JSON 物件。
POST https://storagetransfer.googleapis.com/v1/transferJobs
{
...
"transferSpec": {
"source_agent_pool_name":"POOL_NAME",
"awsS3CompatibleData": {
"region":"us-east-1",
"s3Metadata":{
"protocol": "NETWORK_PROTOCOL_HTTPS",
"requestModel": "REQUEST_MODEL_VIRTUAL_HOSTED_STYLE",
"authMethod": "AUTH_METHOD_AWS_SIGNATURE_V4"
},
"endpoint": "example.com",
"bucketName": "BUCKET_NAME",
"path": "PATH",
},
"gcsDataSink": {
"bucketName": "SINK_NAME",
"path": "SINK_PATH"
},
"transferOptions": {
"deleteObjectsFromSourceAfterTransfer": false
}
}
}
如需欄位說明,請參閱 AwsS3CompatibleData
API 參考資料。
用戶端程式庫
使用用戶端程式庫建立移轉作業之前,請先按照「設定 Cloud Storage 接收端的存取權」一文中的操作說明進行設定。
Go
如要瞭解如何安裝及使用 Storage 移轉服務的用戶端程式庫,請參閱這篇文章。 詳情請參閱 Storage 移轉服務 Go API 參考說明文件。
如要向 Storage 移轉服務進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Java
如要瞭解如何安裝及使用 Storage 移轉服務的用戶端程式庫,請參閱這篇文章。 詳情請參閱 Storage 移轉服務 Java API 參考說明文件。
如要向 Storage 移轉服務進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Node.js
如要瞭解如何安裝及使用 Storage 移轉服務的用戶端程式庫,請參閱這篇文章。 詳情請參閱 Storage 移轉服務 Node.js API 參考說明文件。
如要向 Storage 移轉服務進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Python
如要瞭解如何安裝及使用 Storage 移轉服務的用戶端程式庫,請參閱這篇文章。 詳情請參閱 Storage 移轉服務 Python API 參考說明文件。
如要向 Storage 移轉服務進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
常見問題
從與 S3 相容的儲存空間轉出資料需要付費嗎?
從與 S3 相容的儲存空間轉出資料時,不會產生「需要代理的 Storage 移轉服務轉移作業」費用。如需其他可能產生的費用,請參閱「價格」一文。您可能也須支付來源雲端服務供應商規定的資料轉出和作業費用。
與 S3 相容的儲存空間移轉作業是否支援 Cloud Logging?
可以,請按照「Cloud Logging for Storage Transfer Service」一文中的操作說明,為移轉作業啟用 Cloud Logging。
系統是否支援使用資訊清單轉移?
是,S3 相容的轉移作業支援資訊清單檔案。
如果作業開始後,我在來源 bucket 中新增物件,該物件會轉移嗎?
Storage 移轉服務會對來源 bucket 執行清單作業,以計算與目的地的差異。如果在新增物件時,清單作業已完成,系統會略過該物件,直到下次轉移作業。
Storage 移轉服務是否會對 S3 相容來源執行總和檢查碼比對?
Storage 移轉服務會依據來源傳回的檢查碼資料,對於與 S3 相容的儲存空間,Storage 移轉服務會將物件的 Etag 視為物件的 MD5 雜湊。
不過,使用 S3 多部分上傳功能轉移至與 S3 相容的儲存空間的物件,不會有 MD5 ETag。在這種情況下,Storage 移轉服務會使用檔案大小驗證移轉的物件。
從與 S3 相容的儲存空間轉出資料時,可以達到多少輸送量?
您可以新增更多移轉代理程式,擴充移轉總處理量。建議使用 3 個代理程式,以確保容錯能力,並填滿 <10Gbps 管道。如要擴大規模,請新增更多服務專員。轉移作業進行期間,可以新增及移除服務專員。
如要將資料從 Amazon S3 移轉至 Cloud Storage,應將移轉代理程式部署到何處?
您可以在與值區位於相同地區的 Amazon EC2 或 EKS 中安裝代理程式。您也可以在最接近的區域中,於 Google Cloud 上執行代理程式。