こんにちは。2024年6月 にサーバーワークスに JOIN しました塩野と申します。
そこそこ珍しい苗字ですが、なんとサーバーワークス (しかも同じ部) に塩野が 2名 在籍するという混迷極める状況になってしまいましたので、「テクサポの方の塩野」としてお見知りおきいただけますと幸いです。
本記事では「EC2 (Windows) の UUID ってどんな時に変わるの?」というテーマで検証してみましたので検証結果をまとめます。
UUIDとは
UUID は "Universally Unique IDentifier" の略であり、その訳は "汎用一意識別子" や "ユニバーサル一意識別子" と言うようです。 コンピュータの世界では、誤解を恐れずにざっくり説明すると「コンピュータを一意に特定する為の識別情報」というような理解になります。
"一意に特定する為の識別情報" なのですから、基本的には任意の "コンピュータA" と "コンピュータB" とで UUID は必ず異なるはずだよね、というコンセプトになります。 しかしながら、このコンセプトに反して UUID が重複する状況というのは様々な理由により発生し得るものとなります。
そのためあまり固く考えずに、まずはざっくりとした理解で UUID を捉えていただくのがよろしいかと思います。
※ AWS 社公式ドキュメントとしては、以下がございます
EC2 Windows インスタンスを特定する - Amazon Elastic Compute Cloud
→「システム UUID の検査」を参照
検証する背景
そんな UUID ですが、ソフトウェアやアプリケーションによっては、インストール先のコンピュータの UUID 情報を取得することがあります。 その目的は、ライセンスが適切に利用されているかの管理であったり、インストールしているコンピュータそのものの管理であったり、様々です。
AWS において代表的なコンピューティングサービスといえば Amazon EC2 (以下、EC2) がありますが、EC2 インスタンスも UUID を持っています。
その為、EC2 インスタンスにインストールするソフトウェアやアプリケーションが当該 EC2 インスタンスの UUID を取得・管理するようなユースケースにおいては、 EC2 インスタンスの UUID がどのような状態になっているのか(どのような時に変化するのか)が気になる場合があります。
実際に弊社のお客様でも UUID についてお問い合わせいただくことは過去にもありましたので、少しでも参考になればと思い、簡単ではありますが検証して情報をまとめてみました。
今回の検証構成 (EC2 インスタンス)
AMI:Microsoft Windows Server 2022 Base
アーキテクチャ:64 ビット (x86)
インスタンスタイプ:t2.micro
※ 構成によって検証結果が異なる可能性は想定されますのでご注意ください
検証シナリオ
以下のようなシナリオで検証を行い、UUID が変わるのか確認します。
シナリオ 0 では、各シナリオで比較する為のオリジナルの UUID を確認します。
シナリオ 0:まずは現在の UUID を確認する
シナリオ 1:OS 再起動によって UUID が変わるか確認する
シナリオ 2:EC2 インスタンスの EBS ルートボリュームのスナップショットから作成したイメージ (AMI) を使用して EC2 インスタンスを起動した場合、UUID が変わるか確認する
シナリオ 3:現在アタッチされている EBS ルートボリュームをデタッチして、別の EC2 インスタンスの EBS ルートボリュームをアタッチした場合、UUID が変わるか確認する
シナリオ 0:まずは現在の UUID を確認する
EC2 インスタンスが起動したら、まずは現在の UUID を確認してみましょう。
UUID を確認するコマンドはいくつか存在しますが、今回はコマンドプロンプトでも PowerShell でもどちらでも実行可能な以下コマンドで確認します。
wmic path win32_computersystemproduct get UUID
コマンドプロンプトでコマンド実行した結果が以下となります。
C:\Users\Administrator>wmic path win32_computersystemproduct get UUID UUID EC29EE55-1532-733E-3BFE-758F9C97FCB0
→UUID が「EC29EE55-1532-733E-3BFE-758F9C97FCB0」であることが確認できました。
この UUID「EC29EE55-1532-733E-3BFE-758F9C97FCB0」をベースに、他のシナリオではこの UUID が変わるのか、それとも変わらないのかを見ていきましょう。
シナリオ 1:OS 再起動によって UUID が変わるか確認する
EC2 インスタンスの OS 再起動を行います。
OS 起動後、同様のコマンドを実行して UUID を確認します。
C:\Users\Administrator>wmic path win32_computersystemproduct get UUID UUID EC29EE55-1532-733E-3BFE-758F9C97FCB0
→UUID が「EC29EE55-1532-733E-3BFE-758F9C97FCB0」であり、本シナリオでは UUID は変わらないことが確認できました。
シナリオ 2:EC2 インスタンスの EBS ルートボリュームのスナップショットから作成したイメージ (AMI) を使用して EC2 インスタンスを起動した場合、UUID が変わるか確認する
わかりづらいので、分解すると以下のようなシナリオになります。
シナリオ 0 の EC2 インスタンスの EBS ルートボリュームのスナップショットを作成します。
※ シナリオ 0 の EC2 インスタンスを "EC2 インスタンス A" と呼びます
※ 作成したスナップショットを "スナップショット A" と呼びますスナップショット A からイメージ (AMI) を作成します。
※ 作成した AMI を "AMI A" と呼びますAMI A から EC2 インスタンスを起動します。
※ 起動した EC2 インスタンスを "EC2 インスタンス B" と呼びますEC2 インスタンス B の UUID を確認し、EC2 インスタンス A の UUID と比較します。
作業結果の詳細な説明は省略しますが、上記作業を実施した結果 (UUID) は以下になります。
EC2 インスタンス A の UUID
→シナリオ 0 で確認している通り、UUID は「EC29EE55-1532-733E-3BFE-758F9C97FCB0」です。
EC2 インスタンス B の UUID
C:\Users\Administrator>wmic path win32_computersystemproduct get UUID UUID EC297234-06EA-CAD9-1FFC-685D30F7123E
→UUID が「EC297234-06EA-CAD9-1FFC-685D30F7123E」であり、シナリオ 0 の UUID から変わっていることが確認できました。
→つまり、本シナリオでは UUID が変わる、ということがわかりました。
シナリオ 3:現在アタッチされている EBS ルートボリュームをデタッチして、別の EC2 インスタンスの EBS ルートボリュームをアタッチした場合、UUID が変わるか確認する
わかりづらいので、分解すると以下のようなシナリオになります。
※シナリオ 2 で使っていた呼称をここでも使います
EC2 インスタンス A にアタッチされている EBS ルートボリュームをデタッチします。
※ デタッチするボリュームを "EBS ボリューム A" と呼びますEC2 インスタンス B にアタッチされている EBS ルートボリュームをデタッチします。
※ デタッチするボリュームを "EBS ボリューム B" と呼びますEC2 インスタンス A に EBS ボリューム B をアタッチします。
EC2 インスタンス A を開始して、EC2 インスタンス A の UUID を確認します。
確認した UUID と、シナリオ 0 での UUID を比較します。
作業結果の詳細な説明は省略しますが、上記作業を実施した結果、EC2 インスタンス A の UUID は以下になります。
C:\Users\Administrator>wmic path win32_computersystemproduct get UUID UUID EC29EE55-1532-733E-3BFE-758F9C97FCB0
→UUID が「EC29EE55-1532-733E-3BFE-758F9C97FCB0」であり、本シナリオでは UUID は変わらないことが確認できました。
検証結果の整理
シナリオ 0 ~ シナリオ 3 までの結果を整理すると、以下のようになります。
シナリオ | EC2 インスタンス | EBS ルートボリューム | UUID |
---|---|---|---|
シナリオ 0 | EC2 インスタンス A | EBS ボリューム A | EC29EE55-1532-733E-3BFE-758F9C97FCB0 |
シナリオ 1 | EC2 インスタンス A | EBS ボリューム A | EC29EE55-1532-733E-3BFE-758F9C97FCB0 |
シナリオ 2 | EC2 インスタンス B | EBS ボリューム B | EC297234-06EA-CAD9-1FFC-685D30F7123E |
シナリオ 3 | EC2 インスタンス A | EBS ボリューム B | EC29EE55-1532-733E-3BFE-758F9C97FCB0 |
→ シナリオ 1、シナリオ 3 では UUID は変わらず、シナリオ 2では UUID が変わる、という検証結果が得られました。
検証結果からの考察
今回の検証結果で、シナリオ 3 に着目すると、EBS ルートボリュームが変わっても、EC2 インスタンスが同じであれば UUID が変わらないことがわかりました。 また シナリオ 3 の結果を踏まえた上で シナリオ 2 に着目すると、EC2 インスタンスが変わると UUID も変わることがわかりました。
以上の事実から、UUID は EC2 インスタンスに紐づく(もしくは密接に関係している)情報なのではないかと推測することができます。 ( AWS 社の公式ドキュメント等で明言している情報が見つからなかった為、"推測" という表現をしています )
話が少し逸れますが、VMware社 (Broadcom社) が提供する VMware vSphere では、UUID は仮想マシンに紐づくものであり、 仮想マシンの構成ファイルである .vmx ファイル を編集することで UUID を任意に修正することができたりします。
VMware vSphere における仮想マシンを、AWS における EC2 インスタンスと捉えるなら、仮想マシンにおける UUID と同様に、EC2 インスタンスに UUID が紐づいていると考えるのも納得感があるのではないでしょうか。
なお現時点(2024年6月)で、VMware vSphere の .vmx ファイル のように、UUID を任意に修正することができるような構成ファイルや 設定を EC2 インスタンスでは提供しておりませんので、 AWS 利用者側で EC2 インスタンスの UUID を任意の値に修正したり固定したりすることは現実的に難しいものと思われます。
さいごに
今回はいくつかの簡単なシナリオで UUID の値がどう変わるのか(変わらないのか)について検証で確認してみましたが、いかがでしたでしょうか。
少しでもお役に立てたのであれば幸いです。