イメージの転送
対象リージョン:東日本第3/西日本第3
移行元仮想環境から採取したイメージは、オブジェクトストレージサービスを経由してIaaSイメージとして登録します。
始める前に
-
転送対象のイメージは、仮想マシンのイメージファイルです。
VMwareの場合はvmdkファイルです。
-
イメージファイル名は、以下のように、拡張子を必ず指定してください。
<任意の文字列>.vmdk
このタスクについて
オブジェクトストレージへのアップロードには、curlコマンドを使用します。例として、移行元仮想環境がRocky Linux 8.9の場合のアップロード手順を以下に示します。
手順
タスクの結果
仮想サーバイメージインポート機能を参照し、アップロードしたイメージファイルを仮想サーバのイメージとして登録します。
ヒント:
-
イメージファイルが破損していないかチェックする場合、イメージ登録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