天天看點

自定義鏡像遷移方案

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 源自定義鏡像的 ID
OSSBucket 鏡像檔案存放使用者的 OSS Bucket
OSSPrefix 設定OSS Object的字首
ImageFormat 鏡像格式,暫時隻支援:RAW 和 VHD。預設值:RAW

2.3 傳回參數

地域ID
鏡像的 ID
exportTaskId 導出鏡像任務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

繼續閱讀