状況
EC2: amazonlinux2
縮退前EBS: gp2 100GB
縮退後EBS: gp3 30GB
作業時間目安
EBSスナップショット作成: 30秒~60秒/GB
EBS同期(rsync): 2~3分/GB
手順
1. スナップショット作成
「アクション->イメージとテンプレート->イメージを作成」から縮退対象のインスタンスのAMIとEBSスナップショットを取得
取得後に復元しボリュームとして利用可能な状態に
※この時「再起動をしない」チェックはONにしない。再起動を行わないとスナップショット内のデータが壊れる可能性あり(AWS非推奨
2. 新規インスタンスと同時に縮退後のEBSを作成
縮退対象EC2と同じAMI・AZでEC2インスタンスを作成(「コミュニティAMI」でAMIIDで検索して一致するものを指定)し、ストレージを縮退後のサイズに指定
作成が完了後、インスタンスを停止し、EBSをデタッチしてからインスタンスを削除
これで縮退後のEBSが完成
3. 縮退対象インスタンスに同期用のEBSと、縮退後のEBSをアタッチする
縮退対象インスタンスに計3つのボリュームがアタッチされている状態に
4. 同期用EBSと縮退後EBSを同期
MOUNTPOINTに「/」と表示されているものがルートボリュームなので、それ以外をマウントし同期作業を行う
[ec2-user@ip-10-0-0-162 ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 100G 0 disk
├─nvme0n1p1 259:1 0 100G 0 part /
└─nvme0n1p128 259:2 0 1M 0 part
nvme1n1 259:3 0 100G 0 disk
├─nvme1n1p1 259:4 0 100G 0 part
└─nvme1n1p128 259:5 0 1M 0 part
nvme2n1 259:6 0 30G 0 disk
├─nvme2n1p1 259:7 0 30G 0 part
└─nvme2n1p128 259:8 0 1M 0 part
[ec2-user@ip-10-0-0-162 ~]$ sudo mkdir /mnt/new /mnt/old
[ec2-user@ip-10-0-0-162 ~]$ sudo mount -o nouuid /dev/nvme2n1p1 /mnt/new
[ec2-user@ip-10-0-0-162 ~]$ sudo mount -o nouuid /dev/nvme1n1p1 /mnt/old
[ec2-user@ip-10-0-0-162 ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 100G 0 disk
├─nvme0n1p1 259:1 0 100G 0 part /
└─nvme0n1p128 259:2 0 1M 0 part
nvme1n1 259:3 0 100G 0 disk
├─nvme1n1p1 259:4 0 100G 0 part /mnt/old
└─nvme1n1p128 259:5 0 1M 0 part
nvme2n1 259:6 0 30G 0 disk
├─nvme2n1p1 259:7 0 30G 0 part /mnt/new
└─nvme2n1p128 259:8 0 1M 0 part
[ec2-user@ip-10-0-0-162 ~]$ sudo rsync -ax --delete /mnt/old/ /mnt/new/
[ec2-user@ip-10-0-0-162 ~]$ sudo umount /mnt/new
[ec2-user@ip-10-0-0-162 ~]$ sudo umount /mnt/old
5. 不要になったEBSをデタッチしてルートボリュームを再設定
縮退対象EC2を停止したのち、全てのEBSを一度デタッチし、縮退後EBSをルートボリュームとしてアタッチする
このとき、デバイス名は縮退対象EC2のルートデバイスと同じにする必要がある
6. 不要になったEBSを削除
お片付けして作業終了