[アップデート] スナップショットから EBS のボリューム作成時の初期化プロセスの進捗状況が可能になりました
はじめに
Amazon EBS の新機能により、スナップショットからボリューム作成時の初期化プロセスの進捗を確認できるようになりました。プロビジョニングレート利用時は推定完了時間も表示されます。
なにができるようになったのか
スナップショットからボリューム作成時、「ボリューム初期化」プロセスが実行されます。このプロセスは S3 からストレージブロックをダウンロードしボリュームに書き込みます。初期化中は I/O レイテンシが増加し、アプリケーションのパフォーマンスが低下する可能性があります。
今回のアップデートで、初期化プロセスの進捗状況を確認できるようになりました。 例えばレイテンシに敏感なアプリケーションでは、初期化完了後にアプリを起動するなどの運用手段が増えました。
ボリューム初期化レート使用時、従来は初期化完了時間を計算して求める必要がありました。今回のアップデートで、マネージメントコンソール、AWS CLI、SDK から推定完了時間を直接確認できるようになりました。
ボリューム初期化レートの詳細は以下のブログを参照ください。
スナップショットからボリュームを作成してみた
スナップショットサイズが約 23GB のスナップショットをボリュームに復元して、今回のアップデート内容を確認してみます。
スナップショットから普通にボリューム作成
スナップショットからボリュームを作成しました。ステータスチェックのタブに初期化の状態の項目が追加されています。初期化中であることが一目でわかります。
推定残り時間はボリューム初期化レート使用時しか確認できません。
23GB のスナップショットから 2 時間経過後、進捗は 46% でした。未アタッチのボリュームであり、ディスクアクセスは走りません。そのためか、初期化レートは 10,000MB ÷ 7,200 秒 = 1.39 MB/秒です。ずいぶん低速だったことを初めて伺い知ることができました。
ボリューム初期化レート使用してスナップショットからボリュームを作成
ボリューム初期化レートを 100MiB/秒に設定してスナップショットからボリュームを作成してみます。
推定残り時間が 4 分と表示されました。これはわかりやすい。
推定残り時間を秒単位で確認するなら AWS CLI
AWS CLI からなら秒単位で確認可能です。現時点ではドキュメント記載のコマンドが誤っていたため、修正されるまでは以下のコマンドを参考にしてください。
aws ec2 describe-volume-status --volume-id vol-0295a3e9f98bd2216
初期化中であること、推定残り時間は 238 秒であることが確認できました。
{
"VolumeStatuses": [
{
"Actions": [],
"AvailabilityZone": "ap-northeast-1a",
"Events": [],
"VolumeId": "vol-0295a3e9f98bd2216",
"VolumeStatus": {
"Details": [
{
"Name": "io-enabled",
"Status": "passed"
},
{
"Name": "io-performance",
"Status": "not-applicable"
},
{
"Name": "initialization-state",
"Status": "initializing"
}
],
"Status": "ok"
},
"InitializationStatusDetails": {
"InitializationType": "provisioned-rate",
"Progress": 0,
"EstimatedTimeToCompleteInSeconds": 238
},
"AvailabilityZoneId": "apne1-az4"
}
]
}
推定残り時間はカウントダウンされない?
進捗率はパーセンテージで進捗状況をリアルタイムに確認できます。マネージメントコンソールから眺めていると、推定残り時間は更新されないことに気づきました。
5 秒間隔で aws ec2 describe-volume-status
コマンドを実行して確認しました。推定残り時間はカウントダウンされず、ボリューム作成時点の固定値を表示していました。
$ while true; do aws ec2 describe-volume-status --volume-id vol-0295a3e9f98bd2216 | jq -r '.VolumeStatuses[0].InitializationStatusDetails.EstimatedTimeToCompleteInSeconds // "N/A"'; sleep 5; done
238
238
238
--- 省略 ---
238
238
238
0
0
0
0
0
0
238 秒から急に 0 秒になり、ステータスはcompleted
になりました。
{
"VolumeStatuses": [
{
"Actions": [],
"AvailabilityZone": "ap-northeast-1a",
"Events": [],
"VolumeId": "vol-0295a3e9f98bd2216",
"VolumeStatus": {
"Details": [
{
"Name": "io-enabled",
"Status": "passed"
},
{
"Name": "io-performance",
"Status": "not-applicable"
},
{
"Name": "initialization-state",
"Status": "completed"
}
],
"Status": "ok"
},
"InitializationStatusDetails": {
"InitializationType": "provisioned-rate",
"Progress": 100,
"EstimatedTimeToCompleteInSeconds": 0
},
"AvailabilityZoneId": "apne1-az4"
}
]
}
マネージメントコンソールから確認してみると完了していました。
補足: 高速スナップショットで復元した場合は?
高速スナップショットで復元した場合は、ボリューム作成直後に進捗状況が 100%になるとのことです。ボリューム復元直後からフルパフォーマンスを得るための機能なので当然です。
まとめ
EBS のアップデートにより、ボリューム初期化の進捗状況が確認できるようになりました。主なポイントは以下の通りです。
- スナップショットからのボリューム作成時、初期化プロセスの進捗率を確認可能
- ボリューム初期化レート使用時は推定残り時間も表示可
- ただし、推定残り時間はカウントダウンされない固定値表示
おわりに
私はブログを書きあげるまでに平均 4 時間かかるのですが、デフォルトの初期化レートは低く書き終えた今でもまだ完了を見届けられませんでした。