【小ネタ】 AWS CLI コマンドを利用して EBS スナップショットの取得時間を確認してみた
はじめに
テクニカルサポートの 片方 です。
本ブログでは小ネタとして、AWS CLI コマンドを利用した EBS スナップショットの取得時間を確認する方法をご紹介します。
コンソールまたはレスポンスで開始時刻と完了時刻の差を確認することで、リクエストされた完了期間内に時間ベースのスナップショットまたは EBS-backed AMI コピーオペレーションが完了したかどうかを確認できますStartTimeCompletionTimedescribe-snapshots。
やってみた
AWS CLI aws ec2 describe-snapshots コマンドでは "StartTime" と "CompletionTime" が取得可能です。
そのため、"CompletionTime" - "StartTime" = スナップショット取得時間 として確認可能です。
なお、本ブログでは検証・実行環境として CloudShell を利用しています。
単一スナップショットの取得時間を確認
スクリプト例
aws ec2 describe-snapshots \
--snapshot-ids snap-xxxxxxxxxxxxxxx \
--query 'Snapshots[0].[SnapshotId, StartTime, CompletionTime, VolumeSize, State]' \
--output text | \
awk '{
start_time=$2;
completion_time=$3;
if ($5=="completed") {
cmd="date -d\""start_time"\" +%s";
cmd | getline start_sec;
close(cmd);
cmd="date -d\""completion_time"\" +%s";
cmd | getline end_sec;
close(cmd);
duration=end_sec-start_sec;
printf "%s | %s | %s | %d秒 | %dGB | %s\n",
$1, start_time, completion_time, duration, $4, $5
} else {
printf "%s | %s | %s | - | %dGB | %s\n",
$1, start_time, completion_time, $4, $5
}
}'
※ 適宜修正してください。
取得例
snap-xxxxxxxxxxxxxxx | 2025-02-15T14:17:46.998000+00:00 | 2025-02-15T14:44:09.578000+00:00 | 1583秒 | 30GB | completed
全スナップショットの取得時間を確認
スクリプト例
#!/bin/bash
# スナップショット ID が指定されている場合はそれを使用し、そうでなければ全てのスナップショットを取得
if [ -n "$1" ]; then
SNAPSHOT_IDS=("$1")
SNAPSHOT_FILTER="--snapshot-ids $1"
else
echo "全てのスナップショットを取得しています..."
SNAPSHOT_FILTER=""
# 全スナップショットの ID を配列に格納
SNAPSHOT_IDS=($(aws ec2 describe-snapshots --owner-ids self --query 'Snapshots[*].SnapshotId' --output text))
fi
echo "スナップショット ID | 開始時間 | 完了時間 | 所要時間(秒) | サイズ(GB) | 状態"
echo "---------------------------------------------------------------------"
for SNAPSHOT_ID in "${SNAPSHOT_IDS[@]}"; do
# スナップショット情報を JSON 形式で取得
SNAPSHOT_INFO=$(aws ec2 describe-snapshots --snapshot-ids "$SNAPSHOT_ID")
# 必要な情報を抽出
START_TIME=$(echo "$SNAPSHOT_INFO" | jq -r '.Snapshots[0].StartTime')
COMPLETION_TIME=$(echo "$SNAPSHOT_INFO" | jq -r '.Snapshots[0].CompletionTime')
STATE=$(echo "$SNAPSHOT_INFO" | jq -r '.Snapshots[0].State')
SIZE=$(echo "$SNAPSHOT_INFO" | jq -r '.Snapshots[0].VolumeSize')
# 完了していないスナップショットの場合は処理をスキップ
if [ "$STATE" != "completed" ] || [ "$COMPLETION_TIME" == "null" ]; then
echo "$SNAPSHOT_ID | $START_TIME | 未完了 | - | $SIZE | $STATE"
continue
fi
# 日時をUNIX時間に変換して差分を計算
START_SECONDS=$(date -d "$START_TIME" +%s)
COMPLETION_SECONDS=$(date -d "$COMPLETION_TIME" +%s)
# 所要時間を計算(秒)
DURATION_SECONDS=$((COMPLETION_SECONDS - START_SECONDS))
echo "$SNAPSHOT_ID | $START_TIME | $COMPLETION_TIME | $DURATION_SECONDS | $SIZE | $STATE"
done
※ 適宜修正してください。
取得例
> echo "$SNAPSHOT_ID | $START_TIME | $COMPLETION_TIME | $DURATION_SECONDS | $SIZE | $STATE"
> done
snap-xxxxxxxxxxxxxxx | 2025-03-15T09:00:39.634000+00:00 | 2025-03-15T09:29:03.556000+00:00 | 1704 | 30 | completed
snap-aaaaaaaaaaaaaaa | 2025-02-27T06:22:08.729000+00:00 | 2025-02-27T06:32:17.494000+00:00 | 609 | 20 | completed
snap-bbbbbbbbbbbbbbb | 2025-03-16T05:59:28.064000+00:00 | 2025-03-16T06:27:36.976000+00:00 | 1688 | 30 | completed
snap-ccccccccccccccc | 2025-02-15T13:47:40.902000+00:00 | 2025-02-15T14:14:31.983000+00:00 | 1611 | 30 | completed
snap-ddddddddddddddd | 2025-02-15T13:56:56.697000+00:00 | 2025-02-15T14:15:42.108000+00:00 | 1126 | 30 | completed
snap-eeeeeeeeeeeeeee | 2025-03-16T06:00:00.052000+00:00 | 2025-03-16T06:28:06.995000+00:00 | 1686 | 30 | completed
注意点
AWS CLI が古いバージョンである場合、describe-snapshots コマンドにて CompletionTime が表示されない可能性があります。
AWS CLI バージョン 2 リファレンスガイドで利用可能であると記載されているコマンドが存在しない、またはパラメータが認識されないことを示すエラーが表示された場合は、最初にコマンドの形式が正しいことを確認します。形式が正しい場合は、最新バージョンの AWS CLI にアップグレードすることをお勧めします。AWS CLI の更新バージョンはほぼ毎営業日にリリースされています。AWS の新しいバージョンでは、AWS CLI の新しいサービス、機能、パラメータが導入されています。これらの新しいサービスや機能、パラメータにアクセスする唯一の方法は、その要素が最初に導入された後にリリースされたバージョンにアップグレードすることです。
そのため、以下を参考に AWS CLI のバージョンを最新に更新して CompletionTime が表示されるようにしてください。
まとめ
本ブログが誰かの参考になれば幸いです。
参考資料
- Amazon EBS スナップショットと EBS-backed AMIs の時間ベースのコピー - Amazon EBS
- describe-snapshots — AWS CLI 2.25.11 Command Reference
- AWS CLI のエラーのトラブルシューティング - AWS Command Line Interface
- AWS CLI の最新バージョンのインストールまたは更新 - AWS Command Line Interface
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。