全部產品
Search
文件中心

Data Online Migration:準備工作

更新時間:Aug 16, 2024

本文介紹資料移轉之前的準備工作。

步驟一:上傳列表檔案

HTTP/HTTPS列表檔案包括2類檔案,1個manifest.json檔案和1個或多個example.csv.gz檔案,example.csv.gz為CSV壓縮後的列表檔案,單個example.csv.gz檔案大小不超過25 MB,manifest.json為對CSV檔案進行項配置的檔案,支援上傳至OSS或者AWS S3。

  1. 建立CSV列表檔案

    在本地建立CSV格式的列表檔案。列表檔案最多支援8項,項與項之間用英文逗號(,)分隔;每行一個檔案,檔案之間用\n換行。各項的含義如下表所示。

    重要

    KeyUrl為必填項,其餘項可以不填寫。

    • 必填項

      名稱

      是否必填

      描述

      說明

      Url

      線上遷移服務使用該連結的Get請求下載檔案內容,Head請求擷取檔案中繼資料。

      說明

      Url需確保可以直接使用[curl --HEAD "$Url"]、[curl --GET "$Url"]等命令正常訪問。線上遷移服務不支援重新導向的$Url。

      UrlKey項必須要做編碼處理,不做編碼處理、包含特殊字元可能會導致檔案遷移失敗。

      • Url項的編碼原則:在curl等命令列工具(非重新導向)可正常訪問的基礎上,再進行一次Url編碼。

      • Key項的編碼原則:在您期望該檔案在OSS上的ObjectName基礎之上,再進行一次Url編碼。

      重要

      UrlKey項做編碼處理後,請務必進行以下內容確認,否則可能會導致檔案遷移失敗,或遷移到目的端的檔案路徑與您的預期不符。

      • 原字串中的加號(+)已被編碼成%2B。

      • 原字串中的百分比符號(%)已被編碼成%25。

      • 原字串中的半形逗號(,)已被編碼成%2C。

      例如,原字串為a+b%c,d.file,編碼後的字串應該是a%2Bb%25c%2Cd.file

      Key

      遷移後的Object Name為prefix+檔案名稱。

      假設您已產生未進行url編碼的CSV檔案,名稱為plain_example.csv,該檔案僅有兩列,第一列為Url,這些Url可直接使用curl命令進行訪問;第二列為Key,這些Key即為您期望該檔案在OSS上的ObjectName。如下:

      https://help-static-aliyun-doc.aliyuncs.com/assets/img/zh-CN/1354977961/p486238.jpg,assets/img/zh-CN/1354977961/p486238.jpg
      https://www.example-fake1.com/%E7%BC%96%E7%A0%81%E5%90%8E%E6%89%8D%E8%83%BD%E8%AE%BF%E9%97%AE%E7%9A%84url/123.png,編碼後才能訪問的url/123.png
      https://www.example-fake2.com/無需編碼即可訪問的url/123.png,無需編碼即可訪問的url/123.png
      https://www.example-fake3.com/漢語/日本語にほんご/한국어/123.png,漢語/日本語にほんご/한국어/123.png
      重要

      請勿在Windows系統下使用內建的記事本軟體編輯manifest.json或plain_example.csv,因為該軟體可能會在檔案內容起始3個位元組添加特殊標記(0xefbbbf),從而可能引發線上遷移服務的解析異常。您可以在Linux或macOS下執行od -c plain_example.csv | less確認檔案內容的起始3位元組是否包含特殊標記。Windows系統下建議您使用Notepad++、Visual Studio Code等軟體建立或編輯檔案。

      如下Python編碼範例程式碼將會按行讀取plain_example.csv,並將編碼後的結果輸出到example.csv。代碼僅供您參考,請根據實際需要進行適當修改。

      # -*- coding: utf-8 -*-
      import sys
      
      if sys.version_info.major == 3:
          from urllib.parse import quote_plus
      else:
          from urllib import quote_plus
          reload(sys)
          sys.setdefaultencoding("utf-8")
      
      # Source CSV file path.
      src_path = "plain_example.csv"
      # URL-encoded file path.
      out_path = "example.csv"
      
      # The sample CSV contains only two columns: url and key.
      with open(src_path) as fin, open(out_path, "w") as fout:
          for line in fin:
              items = line.strip().split(",")
              url, key = items[0], items[1]
              enc_url = quote_plus(url.encode("utf-8"))
              enc_key = quote_plus(key.encode("utf-8"))
              # The enc_url and enc_key vars are encoded format.
              fout.write(enc_url + "," + enc_key + "\n")
      

      運行上述代碼,輸出後的example.csv內容為:

      https%3A%2F%2Fhelp-static-aliyun-doc.aliyuncs.com%2Fassets%2Fimg%2Fzh-CN%2F1354977961%2Fp486238.jpg,assets%2Fimg%2Fzh-CN%2F1354977961%2Fp486238.jpg
      https%3A%2F%2Fwww.example-fake1.com%2F%25E7%25BC%2596%25E7%25A0%2581%25E5%2590%258E%25E6%2589%258D%25E8%2583%25BD%25E8%25AE%25BF%25E9%2597%25AE%25E7%259A%2584url%2F123.png,%E7%BC%96%E7%A0%81%E5%90%8E%E6%89%8D%E8%83%BD%E8%AE%BF%E9%97%AE%E7%9A%84url%2F123.png
      https%3A%2F%2Fwww.example-fake2.com%2F%E6%97%A0%E9%9C%80%E7%BC%96%E7%A0%81%E5%8D%B3%E5%8F%AF%E8%AE%BF%E9%97%AE%E7%9A%84url%2F123.png,%E6%97%A0%E9%9C%80%E7%BC%96%E7%A0%81%E5%8D%B3%E5%8F%AF%E8%AE%BF%E9%97%AE%E7%9A%84url%2F123.png
      https%3A%2F%2Fwww.example-fake3.com%2F%E6%B1%89%E8%AF%AD%2F%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81%AB%E3%81%BB%E3%82%93%E3%81%94%2F%ED%95%9C%EA%B5%AD%EC%96%B4%2F123.png,%E6%B1%89%E8%AF%AD%2F%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81%AB%E3%81%BB%E3%82%93%E3%81%94%2F%ED%95%9C%EA%B5%AD%EC%96%B4%2F123.png

    • 全部項

      名稱

      是否必填

      說明

      Key

      遷移後的Object Name為prefix+檔案名稱。

      Url

      線上遷移服務使用該連結的Get請求下載檔案內容,Head請求擷取檔案中繼資料。

      Size

      遷移檔案的大小,單位為位元組(Byte)。

      StorageClass

      源Bucket的儲存類型。

      LastModifiedDate

      待遷移檔案的最後修改時間。

      ETag

      待遷移檔案的ETag。

      HashAlg

      待遷移檔案的Hash演算法。

      HashValue

      待遷移檔案的Hash值。

      說明

      以上樣本中各項的順序並非固定順序,只需與manifest.json檔案中fileSchema項順序保持一致即可。

  2. 壓縮CSV檔案

    需要將CSV檔案壓縮為csv.gz檔案,壓縮方法如下:

    • 壓縮單個檔案

      例如dir目錄下有一個檔案example.csv,需執行如下壓縮命令:

      gzip -c example.csv > example.csv.gz
      說明

      執行以上gzip命令壓縮檔,不會保留源檔案,如需保留源檔案壓縮,請執行命令gzip -c 源檔案 > 源檔案.gz

      壓縮後得到.csv.gz檔案。

    • 壓縮多個檔案

      例如dir目錄下有三個檔案example1.csv、example2.csv和 example3.csv,需執行如下壓縮命令:

      gzip -r dir
      說明

      gzip命令不會打包目錄,而是將指定目錄下所有子檔案分別進行壓縮,且不會保留對應的源檔案。

      壓縮後在dir目錄下得到三個檔案example1.csv.gz、example2.csv.gz和example3.csv.gz。

  3. 建立manifest.json檔案

    支援配置多個CSV檔案,具體內容如下。

    • fileFormat:指定列表檔案格式為CSV

    • fileSchema:對應CSV中檔案項,請注意順序。

    • files:

      • key:CSV檔案在Bucket中的位置。

      • MD5checksum:16進位的MD5字串,不區分大小寫。例如:91A76757B25C8BE78BC321DEEBA6A5AD,如果不填寫該值,則不會做校正。

      • size:列表檔案大小。

    如下樣本僅供您參考。

    {
        "fileFormat":"CSV",
        "fileSchema":"Url, Key",
        "files":[{
            "key":"dir/example1.csv.gz",
            "MD5checksum":"",
            "size":0
        },{
            "key":"dir/example2.csv.gz",
            "MD5checksum":"",
            "size":0
        }]
    }
  4. 您可以選擇將建立的2類列表檔案上傳到OSS或AWS S3。

    • 將建立的2類列表檔案上傳到OSS的具體操作,請參見簡單上傳

      說明
      • 列表檔案上傳到OSS後,線上遷移服務會下載列表檔案,並根據指定的地址遷移檔案。

      • 建立任務時,請填寫檔案清單所在Bucket資訊,列表路徑的格式為列表所在目錄/manifest.json,例如dir/manifest.json。

    • 將建立的2類列表檔案上傳到AWS S3。

      說明
      • 列表檔案上傳到AWS S3後,線上遷移服務會下載列表檔案,並根據指定的地址遷移檔案。

      • 建立任務時,請填寫檔案清單所在Bucket資訊,列表路徑的格式為列表所在目錄/manifest.json,例如dir/manifest.json。

步驟二:建立目標儲存空間

建立目標儲存空間,用於存放遷移的資料。具體操作,請參見建立儲存空間

步驟三:登入控制台RAM使用者並添加許可權

重要
  • 如果沒有建立RAM使用者,可以建立RAM使用者並授權

  • 該RAM使用者用於遷移使用。在建立角色和進行遷移實施操作時,需要在該使用者下進行操作。請盡量在源Bucket或者目的Bucket所在的主帳號下建立該RAM使用者。

在使用者頁面,單擊目標RAM使用者操作列的添加許可權

  1. 系統策略:管理OSS線上遷移服務的許可權(AliyunOSSImportFullAccess)。

  2. 自訂權限原則:該策略必須包含ram:CreateRoleram:CreatePolicyram:AttachPolicyToRole許可權。用於線上遷移控制台建立OSS資料地址 > 授權角色 > 建立角色使用。

    可參考建立自訂權限原則進行許可權管理,以下是相關的權限原則指令碼代碼:

      {
        "Version":"1",
        "Statement":[
            {
                "Effect":"Allow",
                "Action":[
                    "ram:CreateRole",
                    "ram:CreatePolicy",
                    "ram:AttachPolicyToRole"
                ],
                "Resource":"*"
            }
        ]
    }

步驟四:建立用於遷移資料的RAM角色

說明

如果需要跨帳號遷移資料,請在登入控制台帳號下建立相應清單儲存的阿里雲帳號和目的阿里雲帳號的RAM角色,並授予相關權限原則。

  1. 登入RAM控制台

  2. 在左側導覽列,選擇身份管理 > 角色

  3. 在角色頁面,單擊建立角色

  4. 建立角色頁面的選擇可信實體類型地區,選擇阿里雲服務,點擊下一步。

  5. 在已選擇可信實體類型地區,選擇普通服務角色,輸入角色名稱角色名稱務必全部小寫)和選擇受信服務線上遷移服務)。image

  6. 記錄下該角色名稱步驟五使用。

步驟五:為RAM角色授權策略

建立RAM角色成功後,在角色頁面,單擊目標RAM角色操作列的授權策略根據不同的遷移情境,授予RAM角色相應的權限原則。

同帳號遷移(與登入控制台使用者為同帳號)

同帳號遷移時,需要為RAM角色授予以下許可權。

  • 自訂策略:

    • 授予RAM角色對存放遷移後資料的Bucket下所有資源進行列舉、讀取、中止和寫操作的許可權。

      說明
      • 以下權限原則僅供您參考,其中<mybucket>為存放遷移後資料的Bucket名稱,請根據實際值替換。

      • 關於OSS權限原則的更多資訊,請參見RAM Policy常見樣本

      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "oss:List*",
              "oss:Get*",
              "oss:Put*",
              "oss:AbortMultipartUpload"
            ],
            "Resource": [
              "acs:oss:*:*:<mybucket>",
              "acs:oss:*:*:<mybucket>/*"
            ]
          }
        ]
      }
    • 授予RAM角色列舉並讀取清單資料所在Bucket下所有資源的許可權

      說明

      以下權限原則僅供您參考,其中<mybucket>為待遷移列表的Bucket名稱,請根據實際值替換。

      關於OSS權限原則的更多資訊,請參見RAM Policy常見樣本

      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "oss:List*",
              "oss:Get*"
            ],
            "Resource": [
              "acs:oss:*:*:<mybucket>",
              "acs:oss:*:*:<mybucket>/*"
            ]
          }
        ]
      }

跨帳號遷移(與登入控制台使用者為不同帳號)

跨帳號遷移時,需要分別為RAM角色授予以下許可權。