自定义镜像迁移方案-阿里云

云计算百科 xtyly 2个月前 (03-28) 17次浏览 已收录 0个评论

1. 概述

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

阿里云最新优惠1折抢购,2核4G云服务器仅799元/3年,新老用户同享,立即抢购>>>

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

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

2. 导出自定义镜像

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

2.1 环境要求

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

  • 先在管控台生成一个自定义镜像。
  • 导出镜像的地域必须跟存放镜像文件的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 返回参数

<[db:SY_tag]able>

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

2.4 导出示例

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

2.4.1 环境准备

1.阿里云J[db:SY_tag]va 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.生成Def[db:SY_tag]ultProfile的对象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


阿里云百科网 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:自定义镜像迁移方案-阿里云
喜欢 (0)
[[email protected]]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址