自定义镜像迁移方案

本文涉及的产品
云服务器 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
相关文章
|
30天前
|
人工智能 关系型数据库 Serverless
Serverless 应用引擎常见问题之生成的函数镜像改为自定义的镜像如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
27 5
|
2天前
|
敏捷开发 运维 Kubernetes
云效产品使用常见问题之流水线的AppStack部署自动创建发布单让更新了编排配置后也自动创建失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
2天前
|
敏捷开发 存储 小程序
云效产品使用常见问题之私有构建机打完后自动把镜像删除如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
2天前
|
敏捷开发 Java 测试技术
云效产品使用常见问题之自定义环境构建从云下私有镜像库拉取镜像如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
1天前
|
缓存 运维 安全
云效产品使用报错问题之流水线中支持镜像镜像的安全检测,只能去ACR中去执行如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
1天前
|
运维 Devops 网络安全
云效产品使用报错问题之云上镜像库默认接口443修改失败如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
2天前
|
存储 API 持续交付
云效产品使用报错问题之使用自定义镜像构建,看不到构建日志要如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
2天前
|
Java 持续交付 Maven
云效产品使用常见问题之流水线的容器读取本地的挂载文件失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
2天前
|
敏捷开发 缓存 API
云效产品使用常见问题之自定义镜像无法拉取使用如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
21天前
|
数据安全/隐私保护 Docker 容器
离线方式部署harbor
离线方式部署harbor
37 1