SOA

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

スポンサーリンク
EC2(Linux/Win)にアタッチしたEBSを拡張する方法3選 SOA
スポンサーリンク
スポンサーリンク

アタッチ済みの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をコピーしました