イメージの転送

対象リージョン:東日本第3/西日本第3

移行元仮想環境から採取したイメージは、オブジェクトストレージサービスを経由してIaaSイメージとして登録します。

始める前に

  • 転送対象イメージは、仮想マシンのイメージファイルです。

    VMwareの場合はvmdkファイルす。

  • イメージファイル名は、以下のように、拡張子を必ず指定してください。

    <任意の文字列>.vmdk

このタスクについて

オブジェクトストレージへのアップロードには、curlコマンドを使用します。例として、移行元仮想環境がRocky Linux 8.9の場合のアップロード手順を以下に示します。

手順

  1. トークンの取得
    トークンを取得するためには、利用者管理サービスのAPI(POST /v3/auth/tokens)を実行します。詳細はAPIリファレンスを参照してください。
  2. 変数を定義

    移行元仮想環境に以下の変数を定義します。

    # OBJECTSTORAGE=<オブジェクトストレージのAPIエンドポイント>
    # TOKEN=<取得したトークン>
    # PROJECT_ID=<アップロード先のプロジェクトID>
    # CONTAINER=<アップロード先のコンテナ名>
    # OBJECT=<アップロード先でのイメージファイル名>
    # FILE_PATH=<移行元仮想環境のイメージファイルの絶対パスまたは相対パス>
    
  3. イメージファイルのアップロード

    以下のコマンドを実行します。

    # curl -i -H "X-Auth-Token: ${TOKEN}" ${OBJECTSTORAGE}/v2/AUTH_${PROJECT_ID}/${CONTAINER}/${OBJECT} -X PUT -T ${FILE_PATH}

タスクの結果

仮想サーバイメージインポート機能を参照し、アップロードしたイメージファイルを仮想サーバのイメージとして登録します。

ヒント:
  • イメージファイルが破損していないかチェックする場合、イメージ登録APIのchecksumパラメーターを利用してください。

  • 上記手順(トークンの取得、イメージファイルのアップロード)および、イメージファイルの登録までを実行するシェルスクリプトの実行サンプルを以下に示します。

    上記手順(トークンの取得、イメージファイルのアップロード)および、イメージファイルの登録までを実行するシェルスクリプトの実行サンプルを以下に示します。

    アカウント情報などはお客様環境に合わせて変更してください。

    実行サンプル

    #!/bin/bash
    
    ##### お客様のご利用環境に応じて以下の情報を変更してください。
    PROJECT_ID=00000000000000000000000000000000 # プロジェクトID
    DOMAIN=testdomain1                          # ドメイン名
    USER=testuser1                              # ユーザ名
    PASSWORD=********                           # パスワード
    
    NAME=Rocky8.9                              # VMイメージ名
    OS_TYPE=rocky                              # 移行元VMイメージのOS種別
    OBJECT=Rocky8.9_en_2024xxxx-disk1.vmdk     # 移行元VMイメージファイル名
    FILE_PATH=/home/vmimport/image/${OBJECT}    # 移行元VMイメージファイルパス
    CONTAINER=upload_dir                        # 移行元VMイメージファイルアップロードディレクトリ名
    #####
    
    IDENTITY_EP=https://identity.jp-west-3.cloud.global.fujitsu.com
    OBJECTSTORAGE_EP=https://objectstorage.jp-west-3.cloud.global.fujitsu.com
    IMAGE_IMPORT_EP=https://import-export.jp-west-3.cloud.global.fujitsu.com
    
    # トークン取得
    TOKEN=`curl -ikSs -X POST -H "Content-Type: application/json" -H "Accept: application/json" ${IDENTITY_EP}/v3/auth/tokens -d '{"auth":{"identity":{"methods":["password"],"password":{"user":{"domain":{"name":"'${DOMAIN}'"},"name":"'${USER}'","password":"'${PASSWORD}'"}}}, "scope":{"project":{"id":"'${PROJECT_ID}'"}}}}' | awk '/X-Subject-Token/{print $2}' | tr -d "\r"`
    
    # イメージアップロード
    echo "=== upload image start ==="
    curl -Ss -X PUT -H "Content-Type: application/octet-stream" -H "X-Auth-Token: ${TOKEN}" ${OBJECTSTORAGE_EP}/v2/AUTH_${PROJECT_ID}/${CONTAINER}/${OBJECT} -T ${FILE_PATH}
    echo "=== upload image end ==="
    
    # イメージ登録
    echo "=== import image start ==="
    CONVERSION=true
    LOCATION=/v2/AUTH_${PROJECT_ID}/${CONTAINER}/${OBJECT}
    RESPONSE=`curl -Ss -X POST -H "Content-Type: application/json" -H "X-Auth-Token: ${TOKEN}" ${IMAGE_IMPORT_EP}/v1/imageimport -d '{"name": "'${NAME}'", "location": "'${LOCATION}'", "conversion": '${CONVERSION}', "os_type": "'${OS_TYPE}'"}'`
    echo ${RESPONSE}
    IMPORT_ID=`echo ${RESPONSE} | jq -r .import_id`
    
    STATUS=queued
    while :
    do
      TOKEN=`curl -ikSs -X POST -H "Content-Type: application/json" -H "Accept: application/json" ${IDENTITY_EP}/v3/auth/tokens -d '{"auth":{"identity":{"methods":["password"],"password":{"user":{"domain":{"name":"'${DOMAIN}'"},"name":"'${USER}'","password":"'${PASSWORD}'"}}}, "scope":{"project":{"id":"'${PROJECT_ID}'"}}}}' | awk '/X-Subject-Token/{print $2}' | tr -d "\r"`
    
      RESPONSE=`curl -Ss -X GET -H "Content-Type: application/json" -H "X-Auth-Token: ${TOKEN}" ${IMAGE_IMPORT_EP}/v1/imageimport/${IMPORT_ID}/status`
      STATUS=`echo ${RESPONSE} | jq -r .import_status`
      if [ -n "${STATUS}" ]; then
        if [ "${STATUS}" = "processing" -o "${STATUS}" = "queued" ]; then
          printf "%s" "#"
          sleep 600s
        else
          echo
          break;
        fi
      else
        break;
      fi
    done
    echo "=== import image end ==="
    if [ -z "${STATUS}" -o ${STATUS} = "failed" ]; then
      echo ${RESPONSE}
      echo ${RESPONSE} | jq -r .message
      exit 1
    fi
    exit 0