自定义镜像迁移方案

本文涉及的产品
云服务器 ECS,每月免费额度280元 3个月
对象存储 OSS,20GB 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 近日,有同学问到如果控制台不支持自定义镜像导出的情况下,该怎么进行自定义镜像的迁移。所以就开始着手写了这个文档,希望能够帮到有类似需求的同学。

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

相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
27天前
|
人工智能 关系型数据库 Serverless
Serverless 应用引擎常见问题之生成的函数镜像改为自定义的镜像如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
27 5
|
27天前
|
人工智能 关系型数据库 Serverless
Serverless 应用引擎常见问题之API生成的函数镜像改为自定义的镜像如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
37 3
|
容器 Docker 数据安全/隐私保护
阿里云开源 image-syncer 工具,容器镜像迁移同步的终极利器
为什么要做这个工具? 由于阿里云上的容器服务 ACK 在使用成本、运维成本、方便性、长期稳定性上大大超过公司自建自维护 Kubernets 集群,有不少公司纷纷想把之前自己维护 Kubernetes 负载迁移到阿里云 ACK 服务上。
|
26天前
|
Java Serverless 测试技术
Serverless 应用引擎常见问题之上传自定义jar包自动vpc启动报错如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
32 4
|
3月前
|
Java Serverless 开发者
Serverless 应用引擎问题之应用启动更改如何解决
在进行Serverless应用开发和部署时,开发者可能会遇到不同类型的报错信息;本合集着重收录了Serverless环境中常见的报错问题及其解决策略,以助于开发者迅速诊断和解决问题,保证服务的连续性和可用性。
456 1
|
3月前
|
Serverless 容器
在使用Serverless应用引擎(SAE)部署应用时,如果您想要每次都自动选择最新的镜像
【1月更文挑战第12天】【1月更文挑战第58篇】在使用Serverless应用引擎(SAE)部署应用时,如果您想要每次都自动选择最新的镜像
240 1
|
4月前
|
关系型数据库 数据库连接 分布式数据库
我想迁移下数据,用新镜像启动下PolarDB,这个有什么好的办法吗?
我想迁移下数据,用新镜像启动下PolarDB,这个有什么好的办法吗?
38 0
|
10月前
|
人工智能 运维 Kubernetes
阿里云 Serverless 容器服务全面升级:新增组件全托管、AI 镜像秒级拉取能力
阿里云 Serverless 容器服务全面升级:新增组件全托管、AI 镜像秒级拉取能力
|
调度 数据中心 网络架构
阿里云注册集群—混合集群—安装和配置容器网络插件
混合集群中的容器网络插件包括本地数据中心中运行的容器网络插件和云上计算节点上运行的容器网络插件两部分。本文将介绍混合集群中的容器网络插件配置。
428 0
阿里云注册集群—混合集群—安装和配置容器网络插件
|
数据采集 监控 Serverless
Serverless 应用引擎基础监控注意事项及步骤!
应用托管到SAE后,SAE对应用所运行的设备进行CPU、内存、负载和网络进行数据采集、分析,并以动态图方式向您展示,方便您实时、直观的了解应用所运行设备的状态。所有监控均以应用为单位进行数据统计和处理。
382 0
Serverless 应用引擎基础监控注意事项及步骤!