全部產品
Search
文件中心

Data Online Migration:任務

更新時間:Dec 27, 2025

本文介紹如何使用SDK調用任務相關的方法。

建立任務

說明
  • 該方法主要用於建立遷移任務。

  • 建立任務完成後,可以調用更新任務來啟動任務。

以下範例程式碼用於建立任務。

import os

from alibabacloud_hcs_mgw20240626.client import Client
from alibabacloud_hcs_mgw20240626.models import ImportQos, FileTypeFilters, FilterRule, LastModifiedFilters, \
    LastModifyFilterItem, TimeFilter, KeyFilters, KeyFilterItem, ScheduleRule, CreateJobRequest, CreateJobInfo
from alibabacloud_tea_openapi.models import Config

if __name__ == "__main__":
    try:
        # 填寫主帳號ID。
        userid = "11470***876***55"
        # 這裡以北京地區為例。
        endpoint = "cn-beijing.mgw.aliyuncs.com"
        # 支援 HTTPS、HTTP, 未指定時預設採用 HTTPs。
        config = Config(
            endpoint=endpoint,
            access_key_id=os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_ID"),
            access_key_secret=os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
            protocol="http"
        )
        client = Client(config)
        # 填寫任務名稱。
        job_name = "examplejob"
        # 填寫源端資料位址名稱。
        src_address = "examplesrcaddress"
        # 填寫目的端資料位址名稱。
        dest_address = "exampledestaddress"

        """
            overwriteMode和transferMode需要組合使用,具體組合含義如下
            always, all
            全覆蓋
            always, lastmodified
            根據檔案最後修改時間覆蓋
            never, ""
            不覆蓋
        """
        """
            檔案覆蓋方式, 可能的值
            1.never
            2.always
        """
        overwrite_mode = "always"
        """
            檔案傳輸的方式, 可能的值為
            1.changed
            2.all
            3.lastmodified
        """
        transfer_mode = "lastmodified"

        # maxBandWidth,maxImportTaskQps根據實際需求值填寫。
        max_import_task_qps = 1000
        max_band_width = 2147483648
        # 如果maxImportTaskQps值為0或者不設定,會被設定為預設值;MaxBandWidth值為0或者不設定, 會被設定為預設值,maxBandWidth值單位為bits。
        import_qos = ImportQos(max_import_task_qps=max_import_task_qps, max_band_width=max_band_width)

        # 配置過濾規則,包含檔案類型過濾器、檔案過濾器、時間過濾器,具體參數含義請參看API文檔。
        # 檔案類型過濾器,適用於localfs。
        exclude_symlink = False
        exclude_dir = False
        file_type_filters = FileTypeFilters(exclude_dir=exclude_dir, exclude_symlink=exclude_symlink)
        # 檔案過濾器,根據實際需求值填寫。
        include_regex = [".*.jpg", ".*.gif"]
        exclude_regex = ["txtFile", ".*.js"]
        exclude_regex_item = KeyFilterItem(regex=exclude_regex)
        include_regex_item = KeyFilterItem(regex=include_regex)
        Key_filters = KeyFilters(excludes=exclude_regex_item, includes=include_regex_item)
        # 時間過濾器, 時間格式遵循UTC時間格式,根據實際需求值填寫。
        include_start_time = "2006-01-01T00:00:00Z"
        include_end_time = "2007-01-01T00:00:00Z"
        exclude_start_time = "2009-01-01T00:00:00Z"
        exclude_end_time = "2010-01-01T00:00:00Z"
        include_time_filters = [TimeFilter(start_time=include_start_time, end_time=include_end_time)]
        exculde_time_filters = [TimeFilter(start_time=exclude_start_time, end_time=exclude_end_time)]
        include_lastModify_filter_item = LastModifyFilterItem(time_filter=include_time_filters)
        exclude_lastModify_filter_tiem = LastModifyFilterItem(time_filter=exculde_time_filters)
        last_modified_filters = LastModifiedFilters(excludes=exclude_lastModify_filter_tiem,
                                                    includes=include_lastModify_filter_item)

        filterRule = FilterRule(file_type_filters=file_type_filters,
                                key_filters=Key_filters,
                                last_modified_filters=last_modified_filters)

        # 配置調度規則,具體參數含義請參看API文檔。
        max_schedule_count = 5
        start_cron_expression = "0 0 10 * * ?"
        suspend_cron_expression = "0 0 14 * * ?"
        schedule_rule = ScheduleRule(max_schedule_count=max_schedule_count,
                                     suspend_cron_expression=suspend_cron_expression,
                                     start_cron_expression=start_cron_expression)
        client.create_job(userid, CreateJobRequest(CreateJobInfo(
            name=job_name,
            transfer_mode=transfer_mode,
            overwrite_mode=overwrite_mode,
            src_address=src_address,
            dest_address=dest_address,
            import_qos=import_qos,
            filter_rule=filterRule,
            schedule_rule=schedule_rule,
        )))
    except Exception as e:
        print(e)

更新任務

說明

建立任務後,您可以通過該方法來啟動任務、暫停任務以及關閉任務,也可以通過該方法來調整任務限流資訊。

以下範例程式碼用於更新任務狀態。

import os

from alibabacloud_hcs_mgw20240626.client import Client
from alibabacloud_hcs_mgw20240626.models import UpdateJobRequest, UpdateJobInfo, ImportQos
from alibabacloud_tea_openapi.models import Config

if __name__ == "__main__":
    try:
        # 填寫主帳號ID。
        userid = "11470***876***55"
        # 這裡以北京地區為例。
        endpoint = "cn-beijing.mgw.aliyuncs.com"
        # 支援 HTTPS、HTTP, 未指定時預設採用 HTTPs。
        config = Config(
            endpoint=endpoint,
            access_key_id=os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_ID"),
            access_key_secret=os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
            protocol="http"
        )
        client = Client(config)
        # 填寫任務名稱。
        job_name = "examplejob"
              
        # 允許的狀態值有IMPORT_JOB_LAUNCHING(啟動任務), IMPORT_JOB_SUSPEND(暫停任務),IMPORT_JOB_CLOSING(關閉任務)。
        status = "IMPORT_JOB_LAUNCHING"
        client.update_job(userid, job_name, UpdateJobRequest(UpdateJobInfo(
            status=status
        )))
    except Exception as e:
        print(e)
               

以下範例程式碼用於更新任務限流。

import os

from alibabacloud_hcs_mgw20240626.client import Client
from alibabacloud_hcs_mgw20240626.models import UpdateJobRequest, UpdateJobInfo, ImportQos
from alibabacloud_tea_openapi.models import Config

if __name__ == "__main__":
    try:
        # 填寫主帳號ID。
        userid = "11470***876***55"
        # 這裡以北京地區為例。
        endpoint = "cn-beijing.mgw.aliyuncs.com"
        # 支援 HTTPS、HTTP, 未指定時預設採用 HTTPs。
        config = Config(
            endpoint=endpoint,
            access_key_id=os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_ID"),
            access_key_secret=os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
            protocol="http"
        )
        client = Client(config)
        # 填寫任務名稱。
        job_name = "examplejob"
        # maxBandWidth、maxImportTaskQps請根據需求填寫。
        max_band_width = 1610612736
        max_import_task_qps = 1500
        client.update_job(userid, job_name, UpdateJobRequest(UpdateJobInfo(
            import_qos=ImportQos(
                max_band_width=max_band_width,
                max_import_task_qps=max_import_task_qps,
            )
        )))
    except Exception as e:
        print(e)

擷取任務詳情

說明

該方法主要用於擷取遷移任務詳情。

以下範例程式碼用於擷取特定任務的詳細資料(通過任務名稱)。

import os

from alibabacloud_hcs_mgw20240626.client import Client
from alibabacloud_hcs_mgw20240626.models import GetJobRequest
from alibabacloud_tea_openapi.models import Config

if __name__ == "__main__":
    try:
        # 填寫主帳號ID。
        userid = "11470***876***55"
        # 這裡以北京地區為例。
        endpoint = "cn-beijing.mgw.aliyuncs.com"
        # 支援 HTTPS、HTTP, 未指定時預設採用 HTTPs。
        config = Config(
            endpoint=endpoint,
            access_key_id=os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_ID"),
            access_key_secret=os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
            protocol="http"
        )
        client = Client(config)
        # 填寫任務名稱。
        job_name = "examplejob"
        response = client.get_job(userid, job_name, GetJobRequest())
        print(response.body.import_job)
    except Exception as e:
        print(e)
        

以下範例程式碼用於擷取指定任務的詳情(通過任務ID)。

import os

from alibabacloud_hcs_mgw20240626.client import Client
from alibabacloud_hcs_mgw20240626.models import GetJobRequest
from alibabacloud_tea_openapi.models import Config

if __name__ == "__main__":
    try:
        # 填寫主帳號ID。
        userid = "11470***876***55"
        # 這裡以北京地區為例。
        endpoint = "cn-beijing.mgw.aliyuncs.com"
        # 支援 HTTPS、HTTP, 未指定時預設採用 HTTPs。
        config = Config(
            endpoint=endpoint,
            access_key_id=os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_ID"),
            access_key_secret=os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
            protocol="http"
        )
        client = Client(config)
        # 填寫任務ID。
        version = "b4155550-****-4371-****-9c7337348021"
        response = client.get_job(userid, version, GetJobRequest(by_version=""))
        print(response.body.import_job)
    except Exception as e:
        print(e)
        

正常返回樣本

{
  "ImportJob": {
    "Name": "test_name",
    "SrcAddress": "test_src_address",
    "DestAddress": "test_dest_address",
    "Status": "IMPORT_JOB_DOING",
    "EnableMultiVersioning": false,
    "CreateTime": "2024-05-01T12:00:00.000Z",
    "ModifyTime": "2024-05-01T12:00:00.000Z",
    "Version": "test_id",
    "Audit": {
      "LogMode": "off"
    },
    "OverwriteMode": "always",
    "TransferMode": "all",
    "Tags": "K1:V1,K2:V2",
    "ParentName": "test_parent_name",
    "ParentVersion": "7db93837-a5ee-4e3a-b3c8-800e7947dabc",
    "ConvertSymlinkTarget": false,
    "CreateReport": false,
    "Owner": "test_owner",
    "FilterRule": {
      "KeyFilters": {
        "Includes": {
          "Regex": [
            ".*\\.jpg$"
          ]
        },
        "Excludes": {
          "Regex": [
            ".*\\.jpg$"
          ]
        }
      },
      "LastModifiedFilters": {
        "Includes": {
          "TimeFilter": [
            {
              "StartTime": "2006-01-01T00:00:00Z",
              "EndTime": "2006-12-31T59:59:59Z"
            }
          ]
        },
        "Excludes": {
          "TimeFilter": [
            {
              "StartTime": "2006-01-01T00:00:00Z",
              "EndTime": "2006-12-31T59:59:59Z"
            }
          ]
        }
      },
      "FileTypeFilters": {
        "ExcludeSymlink": true,
        "ExcludeDir": true
      }
    },
    "ImportQos": {
      "MaxBandWidth": 1073741824,
      "MaxImportTaskQps": 1000
    },
    "ScheduleRule": {
      "StartCronExpression": "0 0 * * * ?",
      "SuspendCronExpression": "0 0 * * * ?",
      "MaxScheduleCount": 1
    }
  }
}

列舉任務

說明

該方法主要用於列舉使用者在該地區下的遷移任務。

以下範例程式碼用於列舉帳號下所有任務。

import os

from alibabacloud_hcs_mgw20240626.client import Client
from alibabacloud_hcs_mgw20240626.models import ListJobRequest
from alibabacloud_tea_openapi.models import Config

if __name__ == "__main__":
    try:
        # 填寫主帳號ID。
        userid = "11470***876***55"
        # 這裡以北京地區為例。
        endpoint = "cn-beijing.mgw.aliyuncs.com"
        # 支援 HTTPS、HTTP, 未指定時預設採用 HTTPs。
        config = Config(
            endpoint=endpoint,
            access_key_id=os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_ID"),
            access_key_secret=os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
            protocol="http"
        )
        client = Client(config)
        # 根據實際填寫marker,count。
        count = 2
        marker = ""
        response = client.list_job(userid, ListJobRequest(
            marker=marker,
            count=2,
        ))
        for import_job in response.body.import_job_list.import_job:
            print(import_job)
    except Exception as e:
        print(e)
        

擷取任務重試資訊

說明
  • 任務運行完成後,可能存在失敗檔案,線上遷移服務會對這些失敗檔案構造一份清單。通過以下範例程式碼擷取指定輪次失敗檔案的清單資訊,如返回結果為Ready,可用該清單重試失敗檔案。

  • 該方法的結果主要用於重試任務的參數配置中。

  • 該方法主要用於當遷移任務有失敗檔案時,擷取失敗檔案是否能重試的資訊。

以下範例程式碼用於擷取指定輪次的任務重試資訊。

import os

from alibabacloud_hcs_mgw20240626.client import Client
from alibabacloud_hcs_mgw20240626.models import GetJobResultRequest
from alibabacloud_tea_openapi.models import Config

if __name__ == "__main__":
    try:
        # 填寫主帳號ID。
        userid = "11470***876***55"
        # 這裡以北京地區為例。
        endpoint = "cn-beijing.mgw.aliyuncs.com"
        # 支援 HTTPS、HTTP, 未指定時預設採用 HTTPs。
        config = Config(
            endpoint=endpoint,
            access_key_id=os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_ID"),
            access_key_secret=os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
            protocol="http"
        )
        client = Client(config)

        # 填寫任務名稱。
        job_name = "examplejob"
        # 填寫任務輪次。
        runtime_id = 1
        response = client.get_job_result(userid, job_name, GetJobResultRequest(
            runtime_id=runtime_id
        ))
        print(response.body.import_job_result)
    except Exception as e:
        print(e)
        

正常返回樣本

{
  "ImportJobResult": {
    "ReadyRetry": "Ready",
    "InvPath": "mainfest.json",
    "InvBucket": "test_sys_bucket",
    "InvDomain": "test_domain",
    "InvLocation": "oss",
    "InvAccessId": "test_access_id",
    "InvAccessSecret": "test_secret_key",
    "InvRegionId": "test_region_id",
    "AddressType": "ossinv",
    "TotalObjectCount": 1000,
    "CopiedObjectCount": 800,
    "FailedObjectCount": 200,
    "SkippedObjectCount": 800,
    "TotalObjectSize": 1000,
    "CopiedObjectSize": 800,
    "SkippedObjectSize": 800,
    "Version": "test_job_id"
  }
}

列舉任務記錄

說明

該方法主要用於查詢指定任務記錄。

以下範例程式碼用於列舉指定任務的記錄。

import os

from alibabacloud_hcs_mgw20240626.client import Client
from alibabacloud_hcs_mgw20240626.models import ListJobHistoryRequest
from alibabacloud_tea_openapi.models import Config

if __name__ == "__main__":
    try:
        # 填寫主帳號ID。
        userid = "11470***876***55"
        # 這裡以北京地區為例。
        endpoint = "cn-beijing.mgw.aliyuncs.com"
        # 支援 HTTPS、HTTP, 未指定時預設採用 HTTPs。
        config = Config(
            endpoint=endpoint,
            access_key_id=os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_ID"),
            access_key_secret=os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
            protocol="http"
        )
        client = Client(config)

        # 填寫任務名稱。
        job_name = "examplejob"
        # 下列參數值請根據實際需求填寫。
        marker = ""
        count = 2
        response = client.list_job_history(userid, job_name, ListJobHistoryRequest(marker=marker, count=count))
        for job_history in response.body.job_history_list.job_history:
            print(job_history)
    except Exception as e:
        print(e)
             

刪除任務

說明

該方法主要用於刪除遷移任務。

以下範例程式碼用於刪除指定任務。

import os

from alibabacloud_hcs_mgw20240626.client import Client
from alibabacloud_hcs_mgw20240626.models import DeleteJobRequest
from alibabacloud_tea_openapi.models import Config

if __name__ == "__main__":
    try:
        # 填寫主帳號ID。
        userid = "11470***876***55"
        # 這裡以北京地區為例。
        endpoint = "cn-beijing.mgw.aliyuncs.com"
        # 支援 HTTPS、HTTP, 未指定時預設採用 HTTPs。
        config = Config(
            endpoint=endpoint,
            access_key_id=os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_ID"),
            access_key_secret=os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
            protocol="http"
        )
        client = Client(config)

        # 填寫任務名稱。
        job_name = "examplejob"
        client.delete_job(userid, job_name, DeleteJobRequest())
    except Exception as e:
        print(e)
        

建立任務遷移報告

說明

該方法為非同步方法呼叫,調用該方法後後端開始準備產生遷移報告,是否產生完畢需要通過擷取任務遷移報告方法來完成。

以下範例程式碼用於建立指定任務遷移報告。

import os

from alibabacloud_hcs_mgw20240626.client import Client
from alibabacloud_hcs_mgw20240626.models import CreateReportRequest, CreateReportInfo
from alibabacloud_tea_openapi.models import Config

if __name__ == "__main__":
    try:
        # 填寫主帳號ID。
        userid = "11470***876***55"
        # 這裡以北京地區為例。
        endpoint = "cn-beijing.mgw.aliyuncs.com"
        # 支援 HTTPS、HTTP, 未指定時預設採用 HTTPs。
        config = Config(
            endpoint=endpoint,
            access_key_id=os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_ID"),
            access_key_secret=os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
            protocol="http"
        )
        client = Client(config)

        # 填寫任務名稱,必填。
        job_name = "examplejob"
        # 填寫任務ID,必填。
        version = "b4155550-****-4371-****-9c7337348021"
        # 填寫任務輪次,必填。
        runtime_id = 1
        client.create_report(userid, CreateReportRequest(
            CreateReportInfo(
                job_name=job_name,
                version=version,
                runtime_id=runtime_id
            )
        ))
    except Exception as e:
        print(e)
        

擷取任務遷移報告

說明

調用該方法可以查詢到指定任務的遷移報告,可根據該方法判斷遷移報告是否產生完畢以及擷取產生的遷移報告。

以下範例程式碼用於查詢指定任務遷移報告。

import os

from alibabacloud_hcs_mgw20240626.client import Client
from alibabacloud_hcs_mgw20240626.models import GetReportRequest
from alibabacloud_tea_openapi.models import Config

if __name__ == "__main__":
    try:
        # 填寫主帳號ID。
        userid = "11470***876***55"
        # 這裡以北京地區為例。
        endpoint = "cn-beijing.mgw.aliyuncs.com"
        # 支援 HTTPS、HTTP, 未指定時預設採用 HTTPs。
        config = Config(
            endpoint=endpoint,
            access_key_id=os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_ID"),
            access_key_secret=os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
            protocol="http"
        )
        client = Client(config)

        # 填寫任務ID,必填。
        version = "b4155550-****-4371-****-9c7337348021"
        # 填寫任務輪次,必填。
        runtime_id = 1
        response = client.get_report(userid, GetReportRequest(
            runtime_id=runtime_id,
            version=version
        ))
        print(response.body.get_report_response)
    except Exception as e:
        print(e)