EBS ボリュームの設定変更完了時刻を確認する方法

EBS ボリュームの設定変更完了時刻を確認する方法

はじめに

EBS ボリュームの変更が完了されるまでの時間は公式ドキュメントによると、数分から数時間あるいは 24 時間以上かかる場合もあるそうです。[1]
そうなると、EBS ボリュームの変更を行った際「いったいいつ設定の変更が完了したんだろう?」って思いますよね?僕は思います!

実際、お客様から時々「EBS ボリュームの設定変更にかかった時間が知りたい」というお問い合わせがあったりするので、需要は結構ありそうじゃん!?

ということで、終了時刻を取得する方法について書いていきます。

勘違いされがちなこと

EBS ボリュームの設定変更をした際、開始時刻が CloudTrail にて確認できることはご存知でしょうか?
これを知ってると「終了時刻も記録されるはず」と思うと思います。僕は CloudTrail に記録されると思ってました…。
しかし、実際には CloudTrail に記録されるイベントは「変更を開始した時刻」のみで、終了時刻や変更に要した時間については記録されません

では、どのようにして確認できるのでしょうか。

終了時刻を確認する方法

方法としては以下の2つがあります。

  • CLI コマンド
  • EventBridge と SNS を連携してメール通知

2つ目「EventBridge と SNS を連携してメール通知」は結構いろんな方がブログにされてますよね。
ただ、手軽さで言ったら圧倒的に1つ目「CLI コマンド」 です!

なので、まず CLI コマンドから紹介していきます。

CLI コマンド

これは本当に簡単です。
なんと、下記コマンドを実行するだけ!!(※ vol-xxxxxxxxxxxxxxxxx には当該 EBS ボリューム ID を入力してください)

aws ec2 describe-volumes-modifications --volume-ids vol-xxxxxxxxxxxxxxxxx

すると以下のように返ってきます。

{
    "VolumesModifications": [
        {
            "VolumeId": "vol-xxxxxxxxxxxxxxxxx",
            "ModificationState": "completed",
            "TargetSize": 30,
            "TargetIops": 3000,
            "TargetVolumeType": "gp3",
            "TargetThroughput": 125,
            "TargetMultiAttachEnabled": false,
            "OriginalSize": 10,
            "OriginalIops": 3000,
            "OriginalVolumeType": "gp3",
            "OriginalThroughput": 125,
            "OriginalMultiAttachEnabled": false,
            "Progress": 100,
            "StartTime": "2024-07-19T07:15:38+00:00",
            "EndTime": "2024-07-19T07:25:52+00:00"
        }
    ]
}

正常に設定変更が終了していなくても、結果は返ってきますので「ModificationState」が completed になっていることは確認してください。

「StartTime」が開始時刻、「EndTime」が終了時刻です。
協定世界時(UTC)で出力されるので、そこは注意が必要ですね。

EventBridge と SNS を連携してメール通知

こちらは EBS の状態変化を EventBridge にて監視し、SNS と連携することで実現しています。

前提として EBS ボリュームの変更を行う際には、ボリューム状態が modifying -> optimizing -> completed という流れで変化していきます。[2]
EventBridge にて、このボリューム状態の変化に応じたプログラムによるアクションをトリガーとするルールを設定し、終了時刻を取得することができます。

文字にしてみると難しいので、混乱する前に早速設定方法を見ていきましょう。

設定方法としては、EventBridge のイベントパターンに下記カスタムパターンを設定します。
これにより、開始時刻(ボリューム状態:optimizing)と終了時刻(ボリューム状態:completed)を取得することができます。

{
  "source": ["aws.ec2"],
  "detail-type": ["EBS Volume Notification"],
  "detail": {
    "event": ["modifyVolume"]
  }
}

下記ブログを参考に検証しましたが、EventBridge の設定について非常に分かりやすく解説されているため、ぜひ参考にしてみてください。

https://blog.serverworks.co.jp/monitoring-volume-modifications-to-gp3

また、SNS トピックの作成については下記ブログが分かりやすくまとまっていておすすめです。

https://dev.classmethod.jp/articles/intor-subscribe-sns-with-email/

さて、ここまでで設定は完了しました。

上手くいっていれば、変更開始時と変更完了時に以下のようなメールが届きます。

Photokako-mosaic-vm8XjRdbFz11uU75

JSON 形式で受信しますので、分かりやすいように ChatGPT くんに整えてもらいましょう。
すると、以下のようになります。だいぶ見やすくなりましたね!

{
  "version": "0",
  "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "detail-type": "EBS Volume Notification",
  "source": "aws.ec2",
  "account": "xxxxxxxxxxxx",
  "time": "2024-07-02T01:43:23Z",
  "region": "ap-northeast-1",
  "resources": [
    "arn:aws:ec2:ap-northeast-1:xxxxxxxxxxxx:volume/vol-xxxxxxxxxxxxxxxxx"
  ],
  "detail": {
    "result": "completed",
    "cause": "",
    "event": "modifyVolume",
    "request-id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
  }
}

「result」が completed になっていれば、変更完了の通知。optimizing になっていれば変更開始の通知です。
肝心の時刻は「time」に表示されていますね。また、こちらも協定世界時(UTC)で出力されるので注意が必要ですね。

まとめ

今回は、EBS ボリュームの設定変更が完了された時刻を取得する方法をご紹介しました。

CLI コマンドの方が事前の設定もほとんどなく、楽に取得できます。
一方で EventBridge と SNS を利用する方法では、メールで変更完了の通知を受け取ることができます。この通知には、変更完了時刻も記載されています。

以上のことを踏まえて、実際どちらで取得するか検討していただければと思います。

参考資料

[1] EBS ボリュームへの変更のリクエスト
[2] EBS ボリューム変更の進行状況のモニタリング

アノテーション株式会社

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.