WindowsインスタンスにEBSをアタッチする
WindowsインスタンスにEBS(Elastic Block Store)をアタッチする構成を確認します。
本ページでは、WindowsインスタンスにEBSをアタッチし、ストレージとして使用できるようにするまでの手順を確認します。
アタッチ以降の手順は、AWS公式サイト「Windows で Amazon EBS ボリュームを使用できるようにする」で紹介されている内容に沿って進めます。
具体的には、以下の4パターンを確認します。
- ディスク管理ユーティリティを使う方法
- Diskpartコマンドを実行する方法
- PowerShellコマンドを実行する方法
- SSMドキュメントからPowerShellコマンドを実行する方法
またLinuxインスタンスにEBSをアタッチする手順については、以下のページをご確認ください。
構築する環境
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」とします。
詳細に関しては、以下のページもご確認ください。
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スタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。
各スタックのリソースを確認した結果、今回作成された主要リソースの情報は以下の通りです。
- インスタンス①の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から確認することができます。
詳細は以下のページをご確認ください。
EBSのアタッチ状況を確認する
AWS Management Consoleから各インスタンスの状況を確認します。
代表して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(ディスクの管理)を起動します。
「Disk 1(ディスク1)」がEBSです。
「Disk 1(ディスク1)」を右クリックして「Online(オンライン)」を押下します。
続けて「Disk 1(ディスク1)」を右クリックし、「Initialize Disk(ディスクを初期化)」を押下します。
新たに「Initialize Disk(ディスクの初期化)」ウィンドウが表示されます。デフォルトの設定の状態で「OK」を押下します。
「Disk 1(ディスク1)」のステータスが「Online(オンライン)」に変化しました。右クリックし、「New Simple Volume…(新しいシンプルボリューム)」を押下します。
「New Simple Volume Wizard(新しいシンプルボリュームウィザード)」が起動します。基本的にデフォルトの設定で進めます。ディスク文字は「D」とします。
「New Volume (D:)(ボリューム (D:))」として表示されるようになりました。
エクスプローラでも、Cドライブに並んで、Dドライブとして表示されるようになりました。
Dドライブにファイルを書き込むこともできます。
以上の通り、リモートデスクトップ接続後、ディスク管理アプリを使用することで、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 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を使用可能な状態にするまでの手順を確認しました。