アタッチ済みのEBSを拡張する
AWS SOAの出題範囲の1つでもある、デプロイ、プロビジョニング、およびオートメーションに関する内容です。
EC2インスタンスにアタッチしたEBSを拡張する方法を確認します。
今回は以下の3パターンを確認します。
- Amazon Linux 2にSSM Session Manager経由でアクセスして拡張する
- Windows ServerにSSM Session Manager(RDP)経由でアクセスして拡張する
- WIndows ServerにSSM Session Manager(PowerShell)経由でアクセスして拡張する
構築する環境

3つのEC2インスタンスとEBSを作成し、アタッチします。
SSM Session Managerを使用してインスタンスにアクセスしますので、同サービス用のVPCエンドポイントを作成します。
CloudFormationテンプレートファイル
上記の構成をCloudFormationで構築します。
以下のURLにCloudFormationテンプレートファイルを設置しています。
https://github.com/awstut-an-r/awstut-soa/tree/main/03/001
テンプレートファイルのポイント解説
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 "/dev/sd${DeviceNameSuffix}"
      InstanceId: !Ref Instance1
      VolumeId: !Ref EBS1
Code language: YAML (yaml)EBS本体を定義後、インスタンスにアタッチするためのリソースを定義します。
EBSのタイプはgp3とし、確保する容量を1GiBとします。
デバイス名ですが、LinuxインスタンスであるInstance1にアタッチするEBS1は「/dev/sdf」とし、残りの2つはWindowsインスタンスですので、「xvdf」とします。
詳細につきましては、以下のページをご確認ください。


SSMドキュメントを使用して、EBSを使用可能な状態にする
今回の構成の目的はEBSの拡張方法を検証することですが、そのために各インスタンスでEBSを使用可能な状態に設定する必要があります。
今回はSSMドキュメント(AWS-RunShellScript, AWS-RunPowerShellScript)を使用して、使用可能な状態にするためのコマンドを実行します。
詳細は以下のページをご確認ください。


SSM Session Managerを使用してEC2にアクセスする
インスタンスにアクセスする場合、Linuxの場合はSSH、Windowsの場合はリモートデスクトップ接続が一般的ですが、今回はSSM Session Managerを使用します。
今回の構成では、インスタンスはプライベートサブネットに設置されているため、SSM用VPCエンドポイントを通じて、SSMにアクセスする形となります。
詳細につきましては、以下のページをご確認ください。


環境構築
CloudFormationを使用して、本環境を構築し、実際の挙動を確認します。
CloudFormationスタックを作成し、スタック内のリソースを確認する
CloudFormationスタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。

各スタックのリソースを確認した結果、今回作成された主要リソースの情報は以下の通りです。
- インスタンス①のID:i-0e79c9134ceb59b25
- インスタンス②のID:i-06a0ec6c05879a8b2
- インスタンス③のID:i-05905eee44a840587
- インスタンス①にアタッチするEBSのID:vol-09d2c3c14709e87db
- インスタンス②にアタッチするEBSのID:vol-02ef94d7f63643a55
- インスタンス③にアタッチするEBSのID:vol-0ecab6c58edfe0585
事前準備:インスタンスにアタッチしたEBSを使用可能な状態にする
CloudFormationを実行すると、自動的に各インスタンスにEBSがアタッチされます。
ただしアタッチしたばかりのEBSボリュームはそのままでは使用することはできません。
例えばLinuxインスタンスの場合は、ファイルシステムを作成し、マウントする必要があります。
インスタンスにアタッチされていて、として実行する Amazon EBS ボリュームは、ブロックデバイスとして認識されます。任意のファイルシステムでボリュームをフォーマットし、マウントできます。
Linux で Amazon EBS ボリュームを使用できるようにする
先述の通り、今回はSSMドキュメントを使用して、必要なコマンドを実行し、EBSを使用可能な状態に設定します。
具体的には、以下の通りに設定します。
- Linux
- ファイルシステム:xfs
- マウントポイント:/data
 
- Windows
- ボリュームラベル:D
 
詳細につきましては、以下のページをご確認ください。


AWS CLIでEBSの容量を拡張する
アタッチされているEBSの容量を1GiBから2GiBに拡張します。
拡張はAWS CLIから実施します。
$ aws ec2 modify-volume \
--volume-id vol-09d2c3c14709e87db \
--size 2
{
    "VolumeModification": {
        "VolumeId": "vol-09d2c3c14709e87db",
        "ModificationState": "modifying",
        "TargetSize": 2,
        "OriginalSize": 1,
        ...
    }
}
$ aws ec2 modify-volume \
--volume-id vol-02ef94d7f63643a55 \
--size 2
{
    "VolumeModification": {
        "VolumeId": "vol-02ef94d7f63643a55",
        "ModificationState": "modifying",
        "TargetSize": 2,
        "OriginalSize": 1,
        ...
    }
}
$ aws ec2 modify-volume \
--volume-id vol-0ecab6c58edfe0585 \
--size 2
{
    "VolumeModification": {
        "VolumeId": "vol-0ecab6c58edfe0585",
        "ModificationState": "modifying",
        "TargetSize": 2,
        "OriginalSize": 1,
        ...
    }
}
Code language: Bash (bash)OriginalSizeの1GBから、TargetSizeの2GBに拡張します。
しばらく待つと完了します。

Linuxインスタンスでファイルシステムを拡張する
LinuxインスタンスであるInstance1から確認します。
Linuxインスタンスにおける手順は、AWS公式「ボリュームサイズ変更後の Linux ファイルシステムの拡張」を参考に進めます。
SSM Session Managerを使用して、Instance1にアクセスします。
$ aws ssm start-session \
--target i-0e79c9134ceb59b25
Starting session with SessionId: root-0aca5cc809bc1f452
sh-4.2$
Code language: Bash (bash)lsblkコマンドで認識しているブロックデバイスの容量を確認します。
sh-4.2$ lsblk
NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1       259:0    0   8G  0 disk
├─nvme0n1p1   259:1    0   8G  0 part /
└─nvme0n1p128 259:2    0   1M  0 part
nvme1n1       259:3    0   2G  0 disk /data
Code language: Bash (bash)EBSストレージを意味する「nvme1n1」の容量が「2G」とあります。正常に拡張できていることがわかります。
次にdfコマンドで使用可能な容量を確認します。
sh-4.2$ df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  221M     0  221M   0% /dev
tmpfs          tmpfs     231M     0  231M   0% /dev/shm
tmpfs          tmpfs     231M  348K  230M   1% /run
tmpfs          tmpfs     231M     0  231M   0% /sys/fs/cgroup
/dev/nvme0n1p1 xfs       8.0G  1.2G  6.8G  15% /
/dev/nvme1n1   xfs      1014M   34M  981M   4% /data
Code language: Bash (bash)「/dev/nvme1n1」の容量が「1014M」とあります。ファイルシステムを拡張していないため、2GBある内、元々の1GB分しか使用することができません。
ファイルシステムの形式がXFSですので、xfs_growfsコマンドでファイルシステムを拡張します。
sh-4.2$ sudo xfs_growfs -d /data
meta-data=/dev/nvme1n1           isize=512    agcount=4, agsize=65536 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1 spinodes=0
data     =                       bsize=4096   blocks=262144, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 262144 to 524288
Code language: Bash (bash)正常にファイルシステムの拡張が完了しました。
改めて使用可能な容量を確認します。
sh-4.2$ df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  221M     0  221M   0% /dev
tmpfs          tmpfs     231M     0  231M   0% /dev/shm
tmpfs          tmpfs     231M  348K  230M   1% /run
tmpfs          tmpfs     231M     0  231M   0% /sys/fs/cgroup
/dev/nvme0n1p1 xfs       8.0G  1.2G  6.8G  15% /
/dev/nvme1n1   xfs       2.0G   35M  2.0G   2% /data
Code language: Bash (bash)先ほど「1014M」だった容量が、現在は「2.0G」となりました。
以上より、LinuxインスタンスにアタッチしたEBSを拡張した場合、上記コマンドでファイルシステムを拡張することで、拡張分の容量を使用できるようになることが確認できました。
Windowsインスタンスでファイルシステムを拡張する(GUI版)
次にWindowsインスタンスにおける手順を確認します。
Windows版の手順は、AWS公式「ボリュームサイズ変更後の Windows ファイルシステムの拡張」を参考に進めます。
Instance2を対象とします。Instance2へのアクセスは、SSM Session Managerを使用して、トンネリングアクセスしてモートデスクトップ接続でアクセスします。
まずクライアント側で以下のコマンドを実行します。
% aws ssm start-session \
--target i-06a0ec6c05879a8b2 \
--document-name AWS-StartPortForwardingSession \
--parameters "portNumber=3389, localPortNumber=13389"
Starting session with SessionId: root-0d5d84484b5c085cb
Port 13389 opened for sessionId root-0d5d84484b5c085cb.
Waiting for connections...
Code language: Bash (bash)次に以下の通りにリモートデスクトップ接続を行います。
- リモートデスクトップ接続先:localhost:13389
- ユーザー名:Administrator
- パスワード:[キーペアで設定されたパスワード]
リモートデスクトップ接続の完了後、diskmgmt.msc(ディスクの管理)を起動します。

拡張した容量が「未割り当て」という形で存在していることが確認できます。

「操作 > ディスクの再スキャン」を実行します。

「ボリューム (D:)」を右クリック後、「ボリュームを拡張」を押下します。

「ボリュームの拡張ウィザード」が起動します。
基本的にデフォルトのまま進めます。



拡張が完了しますと、Dドライブの容量が2GBに変化していることがわかります。

エクスプローラからも同様の内容を確認することができます。

以上の通り、リモートデスクトップ接続後、ディスク管理アプリを使用してファイルシステムを拡張することで、拡張分の容量を使用できるようになることが確認できました。
Windowsインスタンスでファイルシステムを拡張する(CLI版)
最後にInstance3を対象とします。
Instance3へのアクセスは、SSM Session Managerを使用して、PowerShell接続でアクセスします。
$ aws ssm start-session --target i-05905eee44a840587
Starting session with SessionId: root-00f9c6b7806859aee
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
PS C:\Windows\system32>
Code language: Bash (bash)まず現状のパーティション情報を取得します。
PS C:\Windows\system32> Get-Partition
   DiskPath: \\?\scsi#disk&ven_nvme&prod_amazon_elastic_b#4&26a12046&0&000000#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}
PartitionNumber  DriveLetter Offset                                                              Size Type
---------------  ----------- ------                                                              ---- ----
1                C           1048576                                                            30 GB IFS
   DiskPath: \\?\scsi#disk&ven_nvme&prod_amazon_elastic_b#4&34763423&0&000000#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}
PartitionNumber  DriveLetter Offset                                                              Size Type
---------------  ----------- ------                                                              ---- ----
1                D           65536                                                         1022.94 MB IFS
Code language: PowerShell (powershell)Dライブの容量が「1022.04MB」で認識されていることがわかります。
次にディスクを再スキャンします。
PS C:\Windows\system32> "rescan" | diskpart
Microsoft DiskPart version 10.0.17763.1911
Copyright (C) Microsoft Corporation.
On computer: EC2AMAZ-ROULMFJ
DISKPART>
Please wait while DiskPart scans your configuration...
DiskPart has finished scanning your configuration.
DISKPART>
Code language: PowerShell (powershell)パーティションの最大サイズを確認します。
PS C:\Windows\system32> Get-PartitionSupportedSize -DriveLetter D
  SizeMin    SizeMax
  -------    -------
409968640 2146369536
Code language: PowerShell (powershell)上記コマンドで確認した最大サイズまで拡張します。
PS C:\Windows\system32> Resize-Partition -DriveLetter D -Size 2146369536
Code language: PowerShell (powershell)拡張後の状況を確認します。
PS C:\Windows\system32> Get-Partition
   DiskPath: \\?\scsi#disk&ven_nvme&prod_amazon_elastic_b#4&26a12046&0&000000#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}
PartitionNumber  DriveLetter Offset                                                              Size Type
---------------  ----------- ------                                                              ---- ----
1                C           1048576                                                            30 GB IFS
   DiskPath: \\?\scsi#disk&ven_nvme&prod_amazon_elastic_b#4&34763423&0&000000#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}
PartitionNumber  DriveLetter Offset                                                              Size Type
---------------  ----------- ------                                                              ---- ----
1                D           65536                                                               2 GB IFS
Code language: PowerShell (powershell)確かにDライブが「2GB」に変更されています。
以上の通り、PowerShell接続後、ファイルシステム拡張用のコマンドを使用することで、拡張分の容量を使用できるようになることが確認できました。
まとめ
インスタンスにアタッチ済みのEBSを拡張する方法を確認しました。
EBS拡張後、インスタンス側でファイルシステムを拡張する方法を、Linux用の手順を1つ、Windows用の手順を2つ確認しました。