SOA

EC2(Linux/Win)にアタッチしたEBSを拡張する方法3選

アタッチ済みのEBSを拡張する

AWS SOAの出題範囲の1つでもある、デプロイ、プロビジョニング、およびオートメーションに関する内容です。
EC2インスタンスにアタッチしたEBSを拡張する方法を確認します。

今回は以下の3パターンを確認します。

  1. Amazon Linux 2にSSM Session Manager経由でアクセスして拡張する
  2. Windows ServerにSSM Session Manager(RDP)経由でアクセスして拡張する
  3. WIndows ServerにSSM Session Manager(PowerShell)経由でアクセスして拡張する

構築する環境

AWS認定アソシエイト3資格対策~ソリューションアーキテクト、デベロッパー、SysOpsアドミニストレーター~ | 平山毅, 堀内康弘, 福垣内孝造, 岡智也, 池田大, 原江梨佳, 澤田拓也, 原俊太郎, 仲村勇亮, 上村祐輝, 鳥谷部昭寛 | 工学 | Kindleストア | Amazon
Amazonで平山毅, 堀内康弘, 福垣内孝造, 岡智也, 池田大, 原江梨佳, 澤田拓也, 原俊太郎, 仲村勇亮, 上村祐輝, 鳥谷部昭寛のAWS認定アソシエイト3資格対策~ソリューションアーキテクト、デベロッパー、SysOpsアドミニストレーター~。アマゾンならポイント還元本が多数。一度購入いただいた電子書籍は、K...
Diagram of Attaching EBS to Linux instance.

3つのEC2インスタンスとEBSを作成し、アタッチします。
SSM Session Managerを使用してインスタンスにアクセスしますので、同サービス用のVPCエンドポイントを作成します。

CloudFormationテンプレートファイル

上記の構成をCloudFormationで構築します。
以下のURLにCloudFormationテンプレートファイルを設置しています。

awstut-soa/03/001 at main · awstut-an-r/awstut-soa
Contribute to awstut-an-r/awstut-soa development by creating an account on GitHub.

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

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に拡張します。
しばらく待つと完了します。

The size of the EBS are extended.

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(ディスクの管理)を起動します。

Steps to Extend EBS 1.

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

Steps to Extend EBS 2.

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

Steps to Extend EBS 3.

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

Steps to Extend EBS 4.

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

Steps to Extend EBS 5.
Steps to Extend EBS 6.
Steps to Extend EBS 7.

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

Steps to Extend EBS 8.

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

Steps to Extend EBS 9.

以上の通り、リモートデスクトップ接続後、ディスク管理アプリを使用してファイルシステムを拡張することで、拡張分の容量を使用できるようになることが確認できました。

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つ確認しました。

タイトルとURLをコピーしました