自定义镜像迁移方案

简介: 近日,有同学问到如果控制台不支持自定义镜像导出的情况下,该怎么进行自定义镜像的迁移。所以就开始着手写了这个文档,希望能够帮到有类似需求的同学。

1. 概述

近日,有同学问到如果控制台不支持自定义镜像导出的情况下,该怎么进行自定义镜像的迁移。所以就开始着手写了这个文档,希望能够帮到有类似需求的同学。
自定义镜像是不能跨地域使用的,如果需要跨云平台、跨地域、跨账号使用自定义镜像,则需要进行自定义镜像的一次迁移。整个迁移过程主要动作包括:

  1. 使用API将源地域的自定义镜像导出镜像到oss中。
  2. 从目标地域下载源地域镜像文件并导入到目标地域的oss中。
  3. 在目标地域创建自定义镜像,将OSS中的镜像文件导入。

从而实现跨地域跨账号使用自定义镜像,第二、第三环节主要通过控制台操作,步骤简单,下文主要对自定义镜像导出环节进行详细阐述。

2. 导出自定义镜像

导出自定义镜像是将用户ECS 环境中生成的自定义镜像导出到OSS的bucket中,生成一个object。

2.1 环境要求

导出自定义镜像所需的前置条件如下:

  • 先在管控台生成一个自定义镜像。
  • 导出镜像的地域必须跟存放镜像文件的OSS在同一个账号下的同一个地域。
  • 操作账号需要在后台加入API的白名单中(联系后台产品同学操作)
  • 需要通过 RAM 给阿里云 ECS 官方服务账号授权写入 OSS 的权限。
    i.创建角色:AliyunECSImageImportDefaultRole。必须是这个名称,否则导入镜像会失败。角色的策略:
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": [
"ecs.aliyuncs.com"
]
}
}
],
"Version": "1"
}

ii.在该角色下直接加入默认的系统权限策略:AliyunECSImageImportRolePolicy。这个策略是 ECS 提供导入镜像的默认策略,您也可以创建自定义策略,权限需要包含:

{
"Version": "1",
"Statement": [
{
"Action": [
"oss:PutObject",
"oss:PutBucketLocation"
],
"Resource": "*",
"Effect": "Allow"
}
]
}

2.2 请求参数

名称 类型 是否必须 描述
RegionId String 镜像所在的 Region ID。RegionId 的列表详见地域列表
ImageId String 源自定义镜像的 ID
OSSBucket String 镜像文件存放用户的 OSS Bucket
OSSPrefix String 设置OSS Object的前缀
ImageFormat String 镜像格式,暂时只支持:RAW 和 VHD。默认值:RAW

2.3 返回参数

名称 类型 描述
RegionId String 地域ID
ImageId String 镜像的 ID
exportTaskId String 导出镜像任务ID

2.4 导出示例

下面以使用ECS Java SDK 导出进项的方法ExportImage为例,介绍使用SDK导出自定义镜像的完整流程。

2.4.1 环境准备

1.阿里云Java SDK适用JDK 6及以上版本。
2.要使用阿里云Java SDK,您需要一个云账号以及一对Access Key ID和Access Key Secret。请在阿里云控制台中的AccessKey管理页面上创建和查看您的Access Key,或者联系您的系统管理员。

2.4.2 获取和安装SDK

阿里云Java SDK发布在 https://develop.aliyun.com/tools/sdk#/java 这个地址,请前往这些产品的详情页获取相应的SDK。
要成功地调用一个产品的SDK,您至少需要首先安装SDK核心库。 即您需要获取和安装2个SDK,分别是SDK核心库和ECS的SDK。
您可以通过在集成开发环境(Eclipse/IDE)中导入Jar包来安装SDK,具体步骤如下:
1.将下载的 aliyun-java-sdk-XXX.jar 文件复制到您的项目文件夹中。
2.在Eclipse中,依次选择菜单:工程,Properties,Java Build Path, Add JARs。
3.选中您下载的这些JAR文件。

2.4.3 配置参数

1.生成DefaultProfile的对象profile,该对象存放 Access Key ID 和 Access Key Secret 和默认的地域信息:

DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>","<accessSecret>");

2.生成 IAcsClient 的对象client:

IAcsClient client = new DefaultAcsClient(profile);

3.创建一个对应方法的 Request,类的命名规则一般为API 的方法名加上 “Request”,如获得镜像列表的 API 方法名为ExportImage,对应的请求类名为ExportImageRequest,直接使用构造函数生成一个默认的类exportImage:

ExportImageRequest exportImage = new ExportImageRequest();

4.请求类生成好之后需要通过Request 类的 setXxx 方法设置必要的信息,即 API 参数中必须要提供的信息,同样的也可以通过setXxx方法设置其他可选的参数:
在此步骤中您需要配置的参数有:

- ImageId
- OSSBucket
- OSSPrefix(可选)
- ImageFormat(可选)
exportImage.setImageId("m-bp1an6so65agtbgihguf");

5.参数设置完毕后就可以通过 IAcsClient 对象来获得对应 Request 的响应了:

ExportImageResponse response = client.getAcsResponse(exportImage);

6.接着可以调用 response 中对应的 getXxx 方法获得返回的参数值了

 System.out.println(response.getTaskId());

完整代码如下:

import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.ecs.model.v20140526.*;
import com.aliyuncs.exceptions.ClientException;

class exportTest {
  public static void main(String[] args) {
  
try {
            DefaultProfile.addEndpoint("cn-beijing-xx", "cn-beijing-xx", "Ecs", "ecs.aliyuncs.com");
        } catch (ClientException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    // 初始化
    DefaultProfile profile = DefaultProfile.getProfile("cn-beijing-xx", " <accessKeyId>"," <accessSecret>");
    IAcsClient client = new DefaultAcsClient(profile);
  
    //设置参数
    ExportImageRequest exportImage = new ExportImageRequest();
    exportImage.setRegionId("cn-beijing-xx");
    exportImage.setImageId("m-bpxxxxxxx");
    exportImage.setOSSBucket("bucketname");
  
    // 发起请求
    try {
      ExportImageResponse response = client.getAcsResponse(exportImage);
      System.out.println(response.getRegionId());
      System.out.println(response.getRequestId());
      System.out.println(response.getTaskId());
    }catch (Exception e) {
      e.printStackTrace();
    }
  }
}

3. 导入自定义镜像

导入自定义镜像是将用户线下的一个镜像文件导入到 ECS 环境中生成一个自定义镜像。可以使用这个镜像来创建 ECS 实例和更换系统盘,具体操作可参考官方文档导入自定义镜像部分https://help.aliyun.com/document_detail/25464.html

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
NoSQL Redis
Redis集群(六):集群常用命令及说明
Redis集群(六):集群常用命令及说明
627 0
|
Linux 测试技术 数据库
达梦(DM)数据库安装
简述windows环境下达梦(DM)数据库安装操作
|
存储 Java 中间件
【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南
【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南
1351 94
【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南
|
11月前
|
机器学习/深度学习 边缘计算 运维
机器学习在网络安全中的防护:智能化的安全屏障
机器学习在网络安全中的防护:智能化的安全屏障
504 15
|
存储 资源调度 Cloud Native
阿里云上云迁移工具案例实践:华为云迁移到阿里云
阿里云上云迁移工具案例实践:华为云迁移到阿里云
阿里云上云迁移工具案例实践:华为云迁移到阿里云
|
11月前
|
虚拟化 Docker 容器
DockerHub被禁掉的应对之法
在DockerHub被禁用或访问受限的情况下,可以选择使用其他公共镜像仓库、本地私有镜像仓库或镜像加速器。这些替代方案不仅能够保证容器化应用的正常运行,还可以根据具体需求提供不同的功能和服务。确保按照文档和指南进行配置,以实现最佳效果和性能。
2583 21
|
机器学习/深度学习 人工智能 运维
智能化运维:AI与大数据在IT运维中的应用探索####
本文旨在探讨人工智能(AI)与大数据分析技术如何革新传统IT运维模式,提升运维效率与服务质量。通过具体案例分析,揭示AI算法在故障预测、异常检测及自动化修复等方面的实际应用成效,同时阐述大数据如何助力实现精准运维管理,降低运营成本,提升用户体验。文章还将简要讨论实施智能化运维面临的挑战与未来发展趋势,为IT管理者提供决策参考。 ####
|
JavaScript 数据可视化 前端开发
漏刻有时数据可视化Echarts组件开发(21):基于echarts开发的自动旋转map3D下钻和柱图地图
漏刻有时数据可视化Echarts组件开发(21):基于echarts开发的自动旋转map3D下钻和柱图地图
470 1
|
运维 监控 Ubuntu
怎样配置Linux分析工具:atop篇
在管理Linux系统时,了解系统级监控工具是至关重要的。其中,atop是一种功能强大的工具,它允许运维人员以实时的方式监控系统运行状态,包括进程活动、内存使用、磁盘I/O以及网络负载等。atop提供了一种简洁而全面的方式来追踪系统表现和资源消耗情况,使得性能分析变得简单而直观。
怎样配置Linux分析工具:atop篇
|
数据可视化
漏刻有时数据可视化Echarts组件开发(16):map3D实现360连续旋转的解决方案
漏刻有时数据可视化Echarts组件开发(16):map3D实现360连续旋转的解决方案
249 0

热门文章

最新文章