自定義鏡像遷移方案

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章