はじめに
Power Systems Virtual Server on IBM Cloud で FlashCopy (Snapshot, Restore, Clone) を操作できるようになりました。
今回は、API 経由で操作を実施します。
Release notes
May 2020
Added snapshot, clone and restore capabilities to the Power Systems Virtual Server service. You can use these new capabilities by using the Power Systems Virtual Server API.
それぞれのベストプラクティス、ユースケース、制約については、こちらにあります。
必要情報の取得
該当リージョンに ibmcloud
コマンドでログイン
ダラスなら us-south
、ワシントンなら us-east
といったように指定してログインします。
export REGION="us-east"
echo $REGION
ibmcloud login -r $REGION
アカウント ID の取得
以下のコマンド、または https://cloud.ibm.com/account/settings から取得できます。
export TENANT_ID=$(ibmcloud account show --output JSON | jq -r '.account_id')
echo $TENANT_ID
Power Systems Virtual Server サービスインスタンス情報
以下のコマンド、または https://cloud.ibm.com/resources から取得できます。
export SERVICE_INSTANCE="khayama-power"
echo $SERVICE_INSTANCE
export CRN=$(ibmcloud resource service-instance $SERVICE_INSTANCE --output JSON | jq -r '.[]|.crn')
echo $CRN
export GUID=$(ibmcloud resource service-instance $SERVICE_INSTANCE --output JSON | jq -r '.[]|.guid')
echo $GUID
IAM アクセストークン取得
IBM Cloud API アクセスの認証に必要です。
export ACCESS_TOKEN=$(ibmcloud iam oauth-tokens --output JSON | jq -r '.iam_token')
echo $ACCESS_TOKEN
cloudInstanceId の取得
Power Systems Virtual Server の情報を API 経由で取得するために必要です。
export CLOUDINSTANCE_ID=` \
curl -X GET \
"https://$REGION.power-iaas.cloud.ibm.com/pcloud/v1/tenants/$TENANT_ID" \
-H "Authorization: $ACCESS_TOKEN" \
-H "CRN: $CRN" \
-H 'Content-Type: application/json' \
| jq -r '.cloudInstances | .[] | select (.name=="'$GUID'") | .cloudInstanceID' \
`
echo $CLOUDINSTANCE_ID
pvmInstanceID の取得
Power Systems Virtual Server のサーバー名から取得します。
export SERVER_NAME="khayama-aix"
echo $SERVER_NAME
export PVMINSTANCE_ID=` \
curl -X GET \
"https://$REGION.power-iaas.cloud.ibm.com/pcloud/v1/cloud-instances/$CLOUDINSTANCE_ID/pvm-instances" \
-H "Authorization: $ACCESS_TOKEN" \
-H "CRN: $CRN" \
-H 'Content-Type: application/json' \
| jq -r '.pvmInstances | .[] | select (.serverName=="'$SERVER_NAME'") | .pvmInstanceID' \
`
echo $PVMINSTANCE_ID
volumeIDs の取得
対象の Power Systems Virtual Server に紐づくボリュームの ID を取得します。
複数ボリュームがアタッチされている場合、複数の ID が取得できます。
export VOLUME_IDS=` \
curl -X GET \
"https://$REGION.power-iaas.cloud.ibm.com/pcloud/v1/cloud-instances/$CLOUDINSTANCE_ID/pvm-instances/$PVMINSTANCE_ID" \
-H "Authorization: $ACCESS_TOKEN" \
-H "CRN: $CRN" \
-H 'Content-Type: application/json' \
| jq -c '.volumeIDs' \
`
echo $VOLUME_IDS
FlashCopy の操作
Snapshot 実行
対象となる Power Systems Virtual Server に紐づく全てのボリュームに対して、Snapshot を実行します。
curl -X POST \
"https://$REGION.power-iaas.cloud.ibm.com/pcloud/v1/cloud-instances/$CLOUDINSTANCE_ID/pvm-instances/$PVMINSTANCE_ID/snapshots" \
-H "Authorization: $ACCESS_TOKEN" \
-H "CRN: $CRN" \
-H 'Content-Type: application/json' \
-d '{ "name": "test", "description": "Snapshot for test", "volumeIDs": '$VOLUME_IDS'}'
{"snapshotID":"***"}
Snapshot 確認
Snapshot の状態を確認します。
percentComplete
が 100
で status
が available
となった場合は、問題なく処理が完了したことが確認できます。
参考までに、ボリュームが数十 GB 程度の場合、30 秒程度で処理が完了します。
curl -X GET \
"https://$REGION.power-iaas.cloud.ibm.com/pcloud/v1/cloud-instances/$CLOUDINSTANCE_ID/pvm-instances/$PVMINSTANCE_ID/snapshots" \
-H "Authorization: $ACCESS_TOKEN" \
-H "CRN: $CRN" \
-H 'Content-Type: application/json' \
| jq -r
{
"snapshots": [
{
"action": "snapshot",
"creationDate": "2020-06-26T16:48:59.000Z",
"description": "Snapshot for test",
"lastUpdateDate": "2020-06-26T16:49:33.000Z",
"name": "test",
"percentComplete": 100,
"pvmInstanceID": "***",
"snapshotID": "***",
"status": "available",
"volumeSnapshots": {
"***": "***",
"***": "***"
}
}
]
}
Restore 実行
snapshotID
を指定して、リストアを実行します。
percentComplete
が 100
となった場合は、問題なく処理が完了したことが確認できます。
参考までに、ボリュームが数十 GB 程度の場合、30 秒程度で処理が完了します。
export SNAPSHOT_ID="***"
echo $SNAPSHOT_ID
curl -X POST \
"https://$REGION.power-iaas.cloud.ibm.com/pcloud/v1/cloud-instances/$CLOUDINSTANCE_ID/pvm-instances/$PVMINSTANCE_ID/snapshots/$SNAPSHOT_ID/restore" \
-H "Authorization: $ACCESS_TOKEN" \
-H "CRN: $CRN" \
-H 'Content-Type: application/json' \
-d '{ "force": true }'
{
"action": "restore",
"creationDate": "2020-06-26T16:48:59.000Z",
"description": "Snapshot for test",
"lastUpdateDate": "2020-06-26T16:58:54.000Z",
"name": "test",
"percentComplete": 11,
"pvmInstanceID": "***",
"snapshotID": "***",
"status": "available",
"volumeSnapshots": {
"***": "***",
"***": "***"
}
}
Roll back 実行
以下のようなクエリパラメータを付与してリストア実行することで、エラー時にロールバックすることができます。
To roll back the clone operation, append '?restore_fail_action=rollback' to the cURL URL. If you'd like to try the clone operation again, append '?restore_fail_action=retry' to the cURL URL.
curl -X POST \
"https://$REGION.power-iaas.cloud.ibm.com/pcloud/v1/cloud-instances/$CLOUDINSTANCE_ID/pvm-instances/$PVMINSTANCE_ID/snapshots/$SNAPSHOT_ID/restore?restore_fail_action=rollback" \
-H "Authorization: $ACCESS_TOKEN" \
-H "CRN: $CRN" \
-H 'Content-Type: application/json' \
-d '{ "force": true }'
status
が available
である場合には、この操作は無効です。
{"description":"bad request: snapshot *** is in state available, restore fail actions only valid if snapshot in restore error state","error":"bad request"}
Clone 実行
任意のボリュームを指定して、 Clone を実行できます。
参考までに、ボリュームが数十 GB 程度の場合、30 秒程度で処理が完了します。
curl -X POST \
"https://$REGION.power-iaas.cloud.ibm.com/pcloud/v1/cloud-instances/$CLOUDINSTANCE_ID/volumes/clone" \
-H "Authorization: $ACCESS_TOKEN" \
-H "CRN: $CRN" \
-H 'Content-Type: application/json' \
-d '{ "volumeIDs": '$VOLUME_IDS', "displayName": "khayama-clone-test" }'
{
"clonedVolumes": {
"***": "***",
"***": "***"
}
}
Clone 確認
Clone されたボリュームは特定のサーバーに紐付かない独立したボリュームとなり、 UI からも確認ができます。
参考リンク
参考 : Image Capture
上記の同一インスタンスに対して、 Image Capture (内部で PowerVC が外部ストレージ装置のディスクコピーを取得) をおこなうと、開始してから ICOS に Export されるまで約 30 分かかりました。
Image Capture の対象となるインスタンスのボリューム容量が増えると、OVA イメージ化の処理と ICOS へのアップロード処理の時間が長くなっているものと推測します。