###################################################################### # All Rights Reserved, Copyright FUJITSU LIMITED 2015-2018 # # API実行サンプル名: # 03-007_スナップショットからのリストア # # 内容: # 作成したスナップショットから仮想サーバを作成してリストア行う手順です。 # # 版数:v1.1 # 更新日:2018/1/26 ###################################################################### 手順: ─────────────────────────────────── 項番1.仮想サーバ確認 項番2.スナップショット作成 項番2-1.スナップショット作成 項番2-2.スナップショット確認 項番3.スナップショットからのリストア 項番3-1.仮想サーバ作成(スナップショット指定) 項番3-2.仮想サーバ確認 ─────────────────────────────────── 事前準備: あらかじめ以下を準備する必要があります。 ─────────────────────────────────── ・ネットワーク ・サブネット ・キーペア ・セキュリティグループ ・仮想サーバ1 ─────────────────────────────────── 注意事項: ・仮想サーバが稼働中または停止中のどちらの状態でもスナップショットの 作成は可能ですが、仮想サーバが稼働中に作成したスナップショットを 再利用した場合の動作は保障できません。確実な動作を期待する場合は、 事前に仮想サーバを停止してください。仮想サーバ停止の手順については API実行サンプル「仮想サーバの起動と停止」を参照して下さい。 項番1.仮想サーバ確認 スナップショットを作成する仮想サーバ1の状態を以下のパラメータで確認 します。 ・"status": "SHUTOFF" 環境定義コマンド例: ====================================================================== # SERVER_ID=7<スナップショットを作成する仮想サーバ1ID> SERVER_ID=701c9671-0cac-46ee-b216-251a543423f5 API実行コマンド例: ====================================================================== curl -Ss $COMPUTE/v2/$PROJECT_ID/servers/$SERVER_ID -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq . レスポンス例: ====================================================================== { "server": { "metadata": {}, "config_drive": "", "OS-EXT-STS:power_state": 4, "accessIPv6": "", "accessIPv4": "", "os-extended-volumes:volumes_attached": [ { "id": "20ebc60b-1de8-4417-9fe3-156f80ce26s8" } ], "OS-DCF:diskConfig": "MANUAL", "tenant_id": "<プロジェクトID>", "created": "2017-12-12T09:29:32Z", "name": "TEST_SERVER_01", "user_id": "<ユーザID>", "OS-EXT-AZ:availability_zone": "jp-west-2a", "OS-SRV-USG:terminated_at": null, "image": { "links": [ { "rel": "bookmark", "href": "http://10.27.0.201/<プロジェクトID>/images/c3867e5e-afd6-4858-918e-c445f9041c9d" } ], "id": "c3867e5e-afd6-4858-918e-c445f9041c9d" }, "key_name": "TEST_KEY_AZ1", "links": [ { "rel": "self", "href": "http://10.27.0.201/v2/<プロジェクトID>/servers/701c9671-0cac-46ee-b216-251a543419j6" }, { "rel": "bookmark", "href": "http://10.27.0.201/<プロジェクトID>/servers/701c9671-0cac-46ee-b216-251a543419j6" } ], "addresses": { "TEST_NETWORK_01": [ { "OS-EXT-IPS:type": "fixed", "addr": "192.168.50.6", "version": 4, "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:86:ea:99" } ] }, "OS-EXT-SRV-ATTR:host": "jp3a01-pgy042-00", "hostId": "b2aace3ae2ae45000ea30cfda0095803eaac68959eb5515736461318", "updated": "2017-12-25T05:43:03Z", "status": "SHUTOFF", "OS-EXT-STS:task_state": null, "OS-EXT-STS:vm_state": "stopped", "OS-EXT-SRV-ATTR:instance_name": "instance-0001d475", "OS-SRV-USG:launched_at": "2017-12-12T13:09:34.000000", "OS-EXT-SRV-ATTR:hypervisor_hostname": "jp3a01-pgy042-00", "flavor": { "links": [ { "rel": "bookmark", "href": "http://10.27.0.201/<プロジェクトID>/flavors/1101" } ], "id": "1101" }, "id": "701c9671-0cac-46ee-b216-251a543419j6", "security_groups": [ { "name": "TEST_SG_01" } ] } } ====================================================================== 項番2.スナップショット作成 スナップショットを作成し、作成されたことを確認します。 項番2-1.スナップショット作成 仮想サーバ1のスナップショットを作成します。 環境定義コマンド例: ====================================================================== # SNAPSHOT_NAME=<作成するスナップショット名> SNAPSHOT_NAME=TEST_SNAPSHOT_01 # DESCRIPTION=<作成するスナップショットの説明> DESCRIPTION=SERVER_01_SNAPSHOT_01 # VOLUME_ID=<仮想サーバ1のシステムストレージID> VOLUME_ID=20ebc60b-1de8-4417-9fe3-156f80ce26s8 # FORCE=<(true:対象のストレージが仮想サーバに接続されている場合), # (false:対象のストレージが仮想サーバに接続されていない場合)> FORCE=true # AZ=<アベイラビリティゾーン名> AZ=jp-west-2a API実行コマンド例: ====================================================================== curl -Ss $BLOCKSTORAGE/v2/$PROJECT_ID/snapshots -X POST -H "Content-Type: application/json" -H "Accept: application/json" -H "X-Auth-Token: $OS_AUTH_TOKEN" -d '{"snapshot":{"name":"'$SNAPSHOT_NAME'", "availability_zone": "'$AZ'","description":"'$DESCRIPTION'","volume_id":"'$VOLUME_ID'","force":"'$FORCE'"}}' | jq . レスポンス例: ====================================================================== { "snapshot": { "name": "TEST_SNAPSHOT_01", "id": "8405c99e-f5c2-419d-8fc3-d6f9c271840b", "size": 30, "volume_id": "20ebc60b-1de8-4417-9fe3-156f80ce26s8", "metadata": {}, "created_at": "2017-12-25T11:01:02.452076", "description": "SERVER_01_SNAPSHOT_01", "status": "creating" } } ====================================================================== 項番2-2.スナップショット確認 スナップショットが作成されたことを以下のパラメータで確認します。 ・"status": "available" ・"os-extended-snapshot-attributes:progress": "100%" 環境定義コマンド例: ====================================================================== # SNAPSHOT_ID=<作成したスナップショットID> SNAPSHOT_ID=8405c99e-f5c2-419d-8fc3-d6f9c271840b API実行コマンド例: ====================================================================== curl -Ss $BLOCKSTORAGE/v2/$PROJECT_ID/snapshots/$SNAPSHOT_ID -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq . レスポンス例: ====================================================================== { "snapshot": { "availability_zone": "jp-west-2a", "name": "TEST_SNAPSHOT_01", "id": "8405c99e-f5c2-419d-8fc3-d6f9c271840b", "status": "available", "os-extended-snapshot-attributes:progress": "100%", "description": "SERVER_01_SNAPSHOT_01", "created_at": "2017-12-25T11:01:02.000000", "metadata": {}, "volume_id": "20ebc60b-1de8-4417-9fe3-156f80ce26s8", "os-extended-snapshot-attributes:project_id": "<プロジェクトID>", "size": 30 } } ====================================================================== 項番3.スナップショットからのリストア 作成したスナップショットを指定した仮想サーバを作成しリストアを 行います。 項番3-1.仮想サーバ作成(スナップショット指定) 作成したスナップショットを指定して仮想サーバ2を作成します。 注意事項: ・仮想サーバのブロックストレージサイズを作成時に指定しない場合は、 作成元のスナップショットのブロックストレージサイズとなります。 ・ストレージタイプの指定はできません。作成元のスナップショットの ストレージタイプで作成されます。 ・スナップショットが作成されているシステムストレージは、仮想サーバ 削除と同時に削除されません。仮想サーバ削除と同時にシステム ストレージを削除したい場合は、作成したスナップショットを削除した 後に、仮想サーバを削除してください。 環境定義コマンド例: ====================================================================== # SERVER_NAME=<作成する仮想サーバ名> SERVER_NAME=TEST_SERVER_02 # SNAPSHOT_REF_ID=<作成したスナップショットID> SNAPSHOT_REF_ID=8405c99e-f5c2-419d-8fc3-d6f9c271840b # FLAVOR_ID=<フレーバーID(フレーバーIDはAPI実行サンプル「リソース # 確認用API一覧」を参照してください)> FLAVOR_ID=1101 # VOLUME_SIZE=<ブロックストレージサイズ(GB)(CentOSは「30」以上を設定)> VOLUME_SIZE=30 # DEVICE_NAME=<ブロックストレージパス(「/dev/vda」の形式で指定)> DEVICE_NAME=/dev/vda # SOURCE=<ブロックストレージのソースタイプ(「snapshot」を指定)> SOURCE=snapshot # DESTINATION=<接続先ボリューム(volume指定)> DESTINATION=volume # ISDELETE=<(0:仮想サーバと同時に作成されるシステムストレージを、 # 仮想サーバ削除時に同時に削除しない), # (1:仮想サーバと同時に作成されるシステムストレージを、 # 仮想サーバ削除時に同時に削除する)> ISDELETE=1 # KEY_NAME=<仮想サーバへのログインで利用するキーペア名> KEY_NAME=TEST_KEY_01 # INSTANCE_MAX=<仮想サーバの最大数> INSTANCE_MAX=1 # INSTANCE_MIN=<仮想サーバの最小数> INSTANCE_MIN=1 # NETWORK_ID=<あらかじめ作成したネットワークID> NETWORK_ID=d8c49da6-0162-4014-972b-084e3e6bms78 # SG_NAME=<あらかじめ作成したセキュリティグループ名> SG_NAME=TEST_SG_01 # AZ=<仮想サーバを作成するアベイラビリティゾーン> AZ=jp-west-2a API実行コマンド例: ====================================================================== curl -Ss $COMPUTE/v2/$PROJECT_ID/servers -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"server": {"name": "'$SERVER_NAME'", "availability_zone": "'$AZ'", "imageRef": "", "flavorRef": "'$FLAVOR_ID'", "block_device_mapping_v2":[ {"boot_index": "0", "uuid":"'$SNAPSHOT_REF_ID'", "volume_size": "'$VOLUME_SIZE'", "device_name": "'$DEVICE_NAME'", "source_type": "'$SOURCE'", "destination_type": "'$DESTINATION'", "delete_on_termination": '$ISDELETE'} ] , "key_name": "'$KEY_NAME'", "max_count": '$INSTANCE_MAX', "min_count": '$INSTANCE_MIN', "networks": [{"uuid": "'$NETWORK_ID'"}], "security_groups": [{"name": "'$SG_NAME'"}] }}' | jq . レスポンス例: ====================================================================== { "server": { "links": [ { "rel": "self", "href": "http://10.27.0.201/v2/<プロジェクトID>/servers/69e6f562-43d2-4f4e-9f70-e389d59a0816" }, { "rel": "bookmark", "href": "http://10.27.0.201/<プロジェクトID>/servers/69e6f562-43d2-4f4e-9f70-e389d59a0816" } ], "id": "69e6f562-43d2-4f4e-9f70-e389d59a0816", "OS-DCF:diskConfig": "MANUAL", "security_groups": [ { "name": "TEST_SG_01" } ] } } ====================================================================== 項番3-2.仮想サーバ確認 スナップショットを指定した仮想サーバ2が作成されたことを確認します。 環境定義コマンド例: ====================================================================== # SERVER_ID=<作成した仮想サーバID> SERVER_ID=69e6f562-43d2-4f4e-9f70-e389d59a0816 API実行コマンド例: ====================================================================== curl -Ss $COMPUTE/v2/$PROJECT_ID/servers/$SERVER_ID -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq . レスポンス例: ====================================================================== { "server": { "metadata": {}, "config_drive": "", "OS-EXT-STS:power_state": 1, "progress": 0, "accessIPv6": "", "accessIPv4": "", "os-extended-volumes:volumes_attached": [ { "id": "65eb7e7f-2682-4ffe-b1a2-2e7491ef1093" } ], "OS-DCF:diskConfig": "MANUAL", "tenant_id": "<プロジェクトID>", "created": "2017-10-25T07:24:18Z", "name": "TEST_SERVER_02", "user_id": "<ユーザID>", "OS-EXT-AZ:availability_zone": "jp-west-2a", "OS-SRV-USG:terminated_at": null, "image": "", "key_name": "TEST_KEY_01", "links": [ { "rel": "self", "href": "http://10.27.0.201/v2/<プロジェクトID>/servers/69e6f562-43d2-4f4e-9f70-e389d59a0816" }, { "rel": "bookmark", "href": "http://10.27.0.201/<プロジェクトID>/servers/69e6f562-43d2-4f4e-9f70-e389d59a0816" } ], "addresses": { "TEST_Network_01": [ { "OS-EXT-IPS:type": "fixed", "addr": "192.168.211.26", "version": 4, "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:3e:eb:dc" } ] }, "OS-EXT-SRV-ATTR:host": "jp3a01-pgy036-00", "hostId": "ae209f54adbe63e2dbfb13dfb544165db3c1bcd0625ffeb5c452839j", "updated": "2017-10-25T07:24:36Z", "status": "ACTIVE", "OS-EXT-STS:task_state": null, "OS-EXT-STS:vm_state": "active", "OS-EXT-SRV-ATTR:instance_name": "instance-00019764", "OS-SRV-USG:launched_at": "2017-10-25T07:24:36.000000", "OS-EXT-SRV-ATTR:hypervisor_hostname": "jp3a01-pgy036-00", "flavor": { "links": [ { "rel": "bookmark", "href": "http://10.27.0.201/<プロジェクトID>/flavors/1101" } ], "id": "1101" }, "id": "69e6f562-43d2-4f4e-9f70-e389d59a0816", "security_groups": [ { "name": "TEST_SG_01" } ] } } ====================================================================== 変更履歴: ─────────────────────────────────── v1.1版: ・項番全体:項番構成の見直し、説明修正 ─────────────────────────────────── 以上