文件最后提交记录最后更新时间
2 年前
2 年前
2 年前
README

1. 示例简介

主机迁移服务(Server Migration Service,SMS)是一种P2V/V2V迁移服务,可以帮您把X86物理服务器或者私有云、公有云平台上的虚拟机迁移到华为云弹性云服务器云主机上,从而帮助您轻松地把服务器上的应用和数据迁移到华为云。

主机迁移服务的典型应用场景有:

1、OS迁移:通过主机迁移服务把服务器中的OS和系统配置(如安全加固、用户权限管理等配置)迁移到华为云弹性云服务器(ECS)上,包括华为云的一个账户中的ECS迁移另外一个账号的ECS里,进行资源整合。
2、应用迁移:主机迁移服务可以把您源端服务器上所有数据迁移到华为云弹性云服务器(ECS)上,包括OS、应用及配置、文件,您无须在华为云重新部署和配置应用。
3、数据库迁移:在中断业务的情况下,主机迁移服务可以把您源端单节点数据库服务器整机都迁移到华为云弹性云服务器(ECS)上,无须额外安装和配置数据库及迁移数据。

本示例会指导用户新建迁移项目、更新默认迁移项目、修改迁移项目、删除迁移项目

2. 开发前准备

  • 注册 华为云,并完成 实名认证
  • 具备开发环境 ,支持python3.3及以上版本。可执行 python --version 检查当前 python 的版本信息。
  • 要使用华为云 Java SDK,您需要拥有华为云账号以及该账号对应的 Access Key(AK)和 Secret Access Key(SK),AK/SK参考

2.1 认证鉴权

华为云JAVA SDK支持两种认证方式:token认证和AK/SK认证,可以选择其中一种进行认证鉴权。

  • Token认证:通过Token认证通用请求。参考
  • AK/SK认证:通过AK(Access Key ID)/SK(Secret Access Key)加密调用请求。推荐使用AK/SK认证,其安全性比Token认证要高。参考

3. 安装SDK

主机迁移 SMS SDK支持python3.3及其以上版本。

使用 pip 安装 SDK 依赖包。

安装sms服务包

pip install huaweicloudsdksms

安装sdk核心包

pip install huaweicloudsdkcore

4. 代码示例:新建迁移项目、修改默认迁移项目、修改迁移项目、删除迁移项目

class Migproject:
    def __init__(self):
        pass

    @staticmethod
    def main(args):
        # 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
        # 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。
        ak = os.environ["HUAWEICLOUD_SDK_AK"]
        sk = os.environ["HUAWEICLOUD_SDK_SK"]

        credentials = BasicCredentials(ak, sk) \

        config = HttpConfig.get_default_config()
        config.ignore_ssl_verification = True

        # REGION ID:中国站填写ap-southeast-1,国际站填写ap-southeast-3
        client = SmsClient.new_builder() \
            .with_credentials(credentials) \
            .with_http_config(config) \
            .with_region(SmsRegion.value_of("<REGION ID>")) \
            .build()
        # 以下部分请替换成用户实际参数
        try:
            migprojcet_id = Migproject.create_migproject(client)
            Migproject.update_default_migproject(client, migprojcet_id)
            Migproject.update_migproject(client, migprojcet_id)
            Migproject.delete_migproject(client, migprojcet_id)
        except exceptions.ClientRequestException as e:
            print(e.status_code)
            print(e.request_id)
            print(e.error_code)
            print(e.error_msg)

if __name__ == "__main__":
    Migproject().main(any)

Migproject类方法

    # 获取项目列表
    @staticmethod
    def list_migprojects(client):
        request = ListMigprojectsRequest()
        response = client.list_migprojects(request)
        print(response.__class__)
        print(response)
        return response.migprojects
    # 新建迁移项目
    @staticmethod
    def create_migproject(client):
        request = CreateMigprojectRequest()
        request.body = PostMigProjectBody(
            syncing=False,
            type="MIGRATE_FILE",
            exist_server=True,
            use_public_ip=True,
            region="ap-southeast-1",
            description="",
            name="MIGPROJECT_NAME"
        )
        response = client.create_migproject(request)
        print(response.__class__)
        print(response)
        return response.id
    # 更新默认迁移项目
    @staticmethod
    def update_default_migproject(client, id):
        migproject_list = Migproject.list_migprojects(client)
        for single_migproject in migproject_list:
            if single_migproject.isdefault:
                default_migproject_id = single_migproject.id
                break

        request = UpdateDefaultMigprojectRequest()
        request.mig_project_id = id
        response = client.update_default_migproject(request)
        print(response)

        request.mig_project_id = default_migproject_id
        response = client.update_default_migproject(request)
        print(response.__class__)
        print(response)
    # 更新迁移项目信息
    @staticmethod
    def update_migproject(client, id):
        request = UpdateMigprojectRequest()
        # 以下部分请替换成用户实际参数
        # 设置企业项目ID
        request.mig_project_id = id
        request.body = MigProject(
            # 设置是否同步
            syncing=True,
            # 设置迁移类型
            type="MIGRATE_FILE",
            # 设置是否创建目的端
            exist_server=True,
            # 设置是否使用公网迁移
            use_public_ip=True,
            # 设置目的端region
            region="ap-southeast-1",
            # 设置迁移项目名称
            name="<YOUR MIGPROJCET NAME>"
        )
        response = client.update_migproject(request)
        print(response.__class__)
        print(response)
    # 删除企业项目
    @staticmethod
    def delete_migproject(client, id):
        request = DeleteMigprojectRequest()
        request.mig_project_id = id
        response = client.delete_migproject(request)
        print(response.__class__)
        print(response)

5. 参考

更多信息请参考 主机迁移SMS文档

6. 修订记录

发布日期 文档版本 修订说明
2023-11-09 1.0 文档首次发布