WindowsインスタンスにEBSをアタッチする4つの方法

WindowsインスタンスにEBSをアタッチする4つの方法

WindowsインスタンスにEBSをアタッチする

WindowsインスタンスにEBS(Elastic Block Store)をアタッチする構成を確認します。

本ページでは、WindowsインスタンスにEBSをアタッチし、ストレージとして使用できるようにするまでの手順を確認します。
アタッチ以降の手順は、AWS公式サイト「Windows で Amazon EBS ボリュームを使用できるようにする」で紹介されている内容に沿って進めます。

具体的には、以下の4パターンを確認します。

  1. ディスク管理ユーティリティを使う方法
  2. Diskpartコマンドを実行する方法
  3. PowerShellコマンドを実行する方法
  4. SSMドキュメントからPowerShellコマンドを実行する方法

またLinuxインスタンスにEBSをアタッチする手順については、以下のページをご確認ください。

あわせて読みたい
LinuxインスタンスにEBSをアタッチする 【LinuxインスタンスにEBSをアタッチする構成】 LinuxインスタンスにEBS(Elastic Block Store)をアタッチする構成を確認します。 EBSはAWSが提供するブロックストレージ...

構築する環境

Diagram of attaching EBS to Windows instance.

4つのEC2インスタンスを作成します。
いずれも最新のWindows Server 2019ベースのインスタンスとします。

EBSも4つ作成します。
先述の4インスタンスに1つずつEBSをアタッチします。

環境構築用のCloudFormationテンプレートファイル

上記の構成をCloudFormationで構築します。
以下のURLにCloudFormationテンプレートを配置してます。

https://github.com/awstut-an-r/awstut-fa/tree/main/009

テンプレートファイルのポイント解説

EC2インスタンスを作成する

Resources:
  Instance1:
    Type: AWS::EC2::Instance
    Properties:
      IamInstanceProfile: !Ref InstanceProfile
      ImageId: !Ref ImageId
      InstanceType: !Ref InstanceType1
      KeyName: !Ref KeyName
      NetworkInterfaces:
        - DeviceIndex: 0
          SubnetId: !Ref PrivateSubnet
          GroupSet:
            - !Ref InstanceSecurityGroup
Code language: YAML (yaml)

特別な設定は不要です。
同様の設定のインスタンスを4台分定義します。

EBSをインスタンスにアタッチする

EBSを作成します。
先ほど定義したインスタンスにアタッチします。

Resources:
  EBS1:
    Type: AWS::EC2::Volume
    Properties:
      AvailabilityZone: !Sub "${AWS::Region}${AvailabilityZone}"
      Size: !Ref VolumeSize
      VolumeType: !Ref VolumeType

  EBSAttachment1:
    Type: AWS::EC2::VolumeAttachment
    Properties:
      Device: !Sub "xvd${DeviceNameSuffix}"
      InstanceId: !Ref Instance1
      VolumeId: !Ref EBS1
Code language: YAML (yaml)

EBS本体を定義後、インスタンスにアタッチするためのリソースを定義します。
今回はEBSのタイプはgp3とし、確保する容量を1GiB、デバイス名を「xvdf」とします。

詳細に関しては、以下のページもご確認ください。

あわせて読みたい
LinuxインスタンスにEBSをアタッチする 【LinuxインスタンスにEBSをアタッチする構成】 LinuxインスタンスにEBS(Elastic Block Store)をアタッチする構成を確認します。 EBSはAWSが提供するブロックストレージ...

SSMドキュメントを使ってEBSを使用可能にする

後ほどPowerShellコマンドを使った方法をご紹介しますが、コマンドをSSMドキュメントを通して実行することもできます。

Resources:
  RunPowerShellScriptAssociation:
    Type: AWS::SSM::Association
    Properties:
      AssociationName: !Sub "${Prefix}-run-powershellscript-association"
      Name: AWS-RunPowerShellScript
      Parameters:
        commands:
          - "Stop-Service -Name ShellHWDetection"
          - !Sub "Get-Disk | Where PartitionStyle -eq 'raw' | Initialize-Disk -PartitionStyle MBR -PassThru | New-Partition -AssignDriveLetter -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel '${VolumeLabel}' -Confirm:$false"
          - "Start-Service -Name ShellHWDetection"
      Targets:
        - Key: InstanceIds
          Values:
            - !Ref Instance
      WaitForSuccessTimeoutSeconds: !Ref WaitForSuccessTimeoutSeconds
Code language: YAML (yaml)

SSMドキュメントAWS-RunPowerShellScriptを使用することで、Windowsインスタンスに対して、指定したPowerShellコマンドを実行することができます。
詳細は後ほど確認します。

環境構築

CloudFormationを使用して、本環境を構築し、実際の挙動を確認します。

CloudFormationスタックを作成し、スタック内のリソースを確認する

CloudFormationスタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。

あわせて読みたい
CloudFormationのネストされたスタックで環境を構築する 【CloudFormationのネストされたスタックで環境を構築する方法】 CloudFormationにおけるネストされたスタックを検証します。 CloudFormationでは、スタックをネストす...

各スタックのリソースを確認した結果、今回作成された主要リソースの情報は以下の通りです。

  • インスタンス①のID:i-0f4aa951f2a85a27f
  • インスタンス②のID:i-07c4964c4dc003aac
  • インスタンス③のID:i-0fce29170aa28679c
  • インスタンス④のID:i-0d463301f996c2e66
  • インスタンス①にアタッチするEBSのID:vol-0882997dc762f6833
  • インスタンス②にアタッチするEBSのID:vol-031ab2c2168b22d49
  • インスタンス③にアタッチするEBSのID:vol-096b4f032fc4e71ea
  • インスタンス④にアタッチするEBSのID:vol-0560cb05ba2d12f9a

次にInstance1にアクセスするためのパスワードですが、AWS Management Consoleか、AWS CLIから確認することができます。
詳細は以下のページをご確認ください。

あわせて読みたい
WindowsインスタンスにSSM Session Manager経由でアクセスする 【WindowsインスタンスにSSM Session Manager経由でアクセスする構成】 WindowsインスタンスにSSM Session Manager経由でアクセスする構成を確認します。 Session Manag...

EBSのアタッチ状況を確認する

AWS Management Consoleから各インスタンスの状況を確認します。

EBS is attached to the EC2 instance.

代表してInstance1を確認します。
BlockDeviceMappingsの値を確認すると、2つずつEBSがアタッチされていることが確認できます。
「/dev/sda1」の方はルートデバイスです。このデバイス名はルート用として予約されています。
もう一方の「xvdf」が今回作成したEBSです。正常にアタッチされていることがわかります。

WindowsインスタンスでEBSを使用できる状態にする:ディスク管理ユーティリティ

準備が整いましたので、実際にインスタンスにアクセスして、EBS用の設定を確認したいと思います。

Instance1にアクセスし、リモートデスクトップ接続時の設定方法を確認します。
インスタンスへのアクセスは、SSM Session Managerを使用して、トンネリングアクセスしてリモートデスクトップ接続でアクセスします。

まずクライアント側で以下のコマンドを実行します。

% aws ssm start-session \
--target i-0f4aa951f2a85a27f \
--document-name AWS-StartPortForwardingSession \
--parameters "portNumber=3389, localPortNumber=13389"

Starting session with SessionId: root-0a6891e618ed3616b
Port 13389 opened for sessionId root-0a6891e618ed3616b.
Waiting for connections...
Code language: Bash (bash)

次に以下の通りにリモートデスクトップ接続を行います。

  • リモートデスクトップ接続先:localhost:13389
  • ユーザー名:Administrator
  • パスワード:[rdp-password]

詳細は「WindowsインスタンスにSSM Session Manager経由でアクセスする – SSM Session Managerを使用してトンネリングアクセスしてモートデスクトップ接続でアクセスする」をご確認ください。

リモートデスクトップ接続の完了後、Disk Management(ディスクの管理)を起動します。

Open Disk Management.

「Disk 1(ディスク1)」がEBSです。

EBS is shown in Disk Management.

「Disk 1(ディスク1)」を右クリックして「Online(オンライン)」を押下します。

Set the attached EBS to Online.

続けて「Disk 1(ディスク1)」を右クリックし、「Initialize Disk(ディスクを初期化)」を押下します。

Initialize EBS Disk.

新たに「Initialize Disk(ディスクの初期化)」ウィンドウが表示されます。デフォルトの設定の状態で「OK」を押下します。

Select partition style of EBS.

「Disk 1(ディスク1)」のステータスが「Online(オンライン)」に変化しました。右クリックし、「New Simple Volume…(新しいシンプルボリューム)」を押下します。

Create new Volume in EBS.

「New Simple Volume Wizard(新しいシンプルボリュームウィザード)」が起動します。基本的にデフォルトの設定で進めます。ディスク文字は「D」とします。

Start Simple Volume Wizard.
Specify the size of the volume.
Specify the driver letter of the volume.
Specify the format of the volume.
Result of creating volume.

「New Volume (D:)(ボリューム (D:))」として表示されるようになりました。

The created volume is shown.

エクスプローラでも、Cドライブに並んで、Dドライブとして表示されるようになりました。

The created volume will also appear in Explore.

Dドライブにファイルを書き込むこともできます。

You can also create new files.

以上の通り、リモートデスクトップ接続後、ディスク管理アプリを使用することで、EBSを使用可能な状態にする手順を確認しました。

WindowsインスタンスでEBSを使用できる状態にする:Diskpart

Instance2にアクセスし、PowerShell接続時の設定方法を確認します。

インスタンスへのアクセスは、SSM Session Managerを使用して、PowerShell接続を行います。

$ aws ssm start-session \
--target i-07c4964c4dc003aac

Starting session with SessionId: root-01a3b44912e7eca4d

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\Windows\system32>
Code language: Bash (bash)

詳細は「WindowsインスタンスにSSM Session Manager経由でアクセスする – 挙動確認2:SSM Session Managerを使用してPowerShell接続でインスタンスにアクセスする」をご確認ください。

PowerShell起動後、diskpartコマンドを実行します。

PS C:\Windows\system32> diskpart

Microsoft DiskPart version 10.0.17763.1911

Copyright (C) Microsoft Corporation.
On computer: EC2AMAZ-P64AB4O
Code language: PowerShell (powershell)

サブコマンドでインスタンスに認識されているディスクを確認します。

DISKPART> list disk

  Disk ###  Status         Size     Free     Dyn  Gpt
  --------  -------------  -------  -------  ---  ---
  Disk 0    Online           30 GB      0 B
  Disk 1    Online         1024 MB  1024 MB
Code language: PowerShell (powershell)

次に「ディスク1」を選択後、以降の手順は公式サイトに従い、設定用のサブコマンドを実行します。

DISKPART> select disk 1

Disk 1 is now the selected disk.

DISKPART> attributes disk clear readonly

Disk attributes cleared successfully.

DISKPART> online disk

Virtual Disk Service error:
This disk is already online.


DISKPART> convert mbr

DiskPart successfully converted the selected disk to MBR format.

DISKPART> create partition primary

DiskPart succeeded in creating the specified partition.

DISKPART> format quick fs=ntfs label="test-volume"

  100 percent completed

DiskPart successfully formatted the volume.

DISKPART> assign letter="D"

DiskPart successfully assigned the drive letter or mount point.

DISKPART> exit

Leaving DiskPart...
Code language: PowerShell (powershell)

設定が完了しましたので、diskpartを終了し、インスタンス認識されているボリュームを確認します。

PS C:\Windows\system32> Get-Volume

DriveLetter FriendlyName FileSystemType DriveType HealthStatus OperationalStatus SizeRemaining       Size
----------- ------------ -------------- --------- ------------ ----------------- -------------       ----
D           test-volume  NTFS           Fixed     Healthy      OK                   1008.34 MB 1022.93 MB
C                        NTFS           Fixed     Healthy      OK                     14.08 GB      30 GB
Code language: PowerShell (powershell)

Cドライブに加え、Dドライブが表示されています。最後にDドライブにアクセスします。

PS D:\> ls


    Directory: D:\


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----         1/5/2022  11:40 AM             14 test.txt
Code language: PowerShell (powershell)

テスト用のファイルを設置することができました。
以上の通り、PowerShell接続後、diskpartコマンドを使用することで、EBSを使用可能な状態にする手順を確認しました。

WindowsインスタンスでEBSを使用できる状態にする:PowerShell

Instance3にアクセスし、PowerShellコマンドで設定を行う方法を確認します。
先ほどと同様に、SSM Session Managerでアクセスします。

接続後、以下のコマンドを実行します。

PS C:\Windows\system32> Stop-Service -Name ShellHWDetection

PS C:\Windows\system32> Get-Disk | Where PartitionStyle -eq 'raw' | Initialize-Disk -PartitionStyle MBR -PassThru | New-Partition -AssignDriveLetter -Us
eMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel "D" -Confirm:$false

DriveLetter FriendlyName FileSystemType DriveType HealthStatus OperationalStatus SizeRemaining       Size
----------- ------------ -------------- --------- ------------ ----------------- -------------       ----
D           D            NTFS           Fixed     Healthy      OK                   1008.34 MB 1022.93 MB

PS C:\Windows\system32> Start-Service -Name ShellHWDetection
Code language: PowerShell (powershell)

Instance2と同様の方法で、EBS領域の状況を確認します。

PS C:\Windows\system32> Get-Volume

DriveLetter FriendlyName FileSystemType DriveType HealthStatus OperationalStatus SizeRemaining       Size
----------- ------------ -------------- --------- ------------ ----------------- -------------       ----
D           D            NTFS           Fixed     Healthy      OK                   1008.34 MB 1022.93 MB
C                        NTFS           Fixed     Healthy      OK                     13.15 GB      30 GB

PS C:\Windows\system32> cd D:
PS D:\> echo null > test.txt
PS D:\> ls

    Directory: D:\

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        4/10/2022   7:40 AM             14 test.txt
Code language: PowerShell (powershell)

テスト用のファイルを設置することができました。
以上の通り、PowerShellコマンドを使用することで、EBSを使用可能な状態にする手順を確認できました。

WindowsインスタンスでEBSを使用できる状態にする:PowerShell(SSMドキュメント)

Instance4はSSMドキュメント(AWS-RunPowerShellScript)を使用するように設定しました。
SSMドキュメントで実行するように指定したコマンドは、Instance3のものと同様です。
以下がドキュメント実行時のログです。

SSM Document Result.

正常に実行できていることがわかります。

最後にSSM Session Managerでアクセス後、EBSの状況を確認します。

PS C:\Windows\system32> Get-Volume

DriveLetter FriendlyName FileSystemType DriveType HealthStatus OperationalStatus SizeRemaining       Size
----------- ------------ -------------- --------- ------------ ----------------- -------------       ----
D           D            NTFS           Fixed     Healthy      OK                   1008.34 MB 1022.93 MB
C                        NTFS           Fixed     Healthy      OK                     13.49 GB      30 GB

PS C:\Windows\system32> cd D:
PS D:\> echo null > test.txt
PS D:\> ls

    Directory: D:\

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        4/10/2022   8:12 AM             14 test.txt
Code language: PowerShell (powershell)

テスト用のファイルを設置することができました。
以上の通り、SSMドキュメントからPowerShellコマンドを実行することで、EBSを使用可能な状態にする手順を確認できました。

まとめ

CloudFormationでEC2インスタンスにEBSをアタッチする方法を確認しました。

アタッチしたEBSを使用可能な状態にするまでの手順を確認しました。