ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

Amazon EC2ルートボリュームのサイズを縮小してみた

こんにちは、ソリューション技術部 平原です。

Amazon EBSボリュームのサイズ拡張はシームレスに実施でき、容易に行うことができます。
対して、EBSボリュームのサイズを縮小するにはそれなりの手間が必要となります。
今回、EC2のEBSルートボリュームサイズを縮小してみましたので、その方法を紹介します。

はじめに

言葉の定義
  • 新EBSボリューム:新規起動したEC2インスタンスのEBSルートボリューム
  • 旧EBSボリューム:縮小対象EC2インスタンスのEBSルートボリューム
留意点
  • ルートボリュームは8GB未満にはできない
  • 縮小サイズは、現在の旧EBSボリューム使用量を考慮する

手順概要

  1. 新規でEC2インスタンスを起動する
  2. 任意の作業用EC2インスタンスに新EBSボリュームと旧EBSボリュームをアタッチする
  3. 新EBSボリュームを旧EBSボリュームと同期する
  4. 縮小対象EC2インスタンスに新EBSボリュームをアタッチする
  5. 不要なリソースを削除する

概要フロー f:id:hirahara777:20180905185105p:plain

手順詳細

1. 新規でEC2インスタンスを起動する
  • 新ボリュームを作成する為に、新規でEC2インスタンスを起動する
  • EC2インスタンス起動時のストレージ設定にて、縮小するボリュームサイズを入力する
    ※ 縮小対象EC2インスタンスを最初に起動した時と同じAMI(Amazon linux AMI など)で起動することを推奨(AMIが異なる場合では未検証)

f:id:hirahara777:20180905190015p:plain


2. 任意の作業用EC2インスタンスに新EBSボリュームと旧EBSボリュームをアタッチする
  • 新EBSボリューム及び旧EBSボリュームをデタッチする f:id:hirahara777:20180905191534p:plain ※ 旧EBSボリュームをデタッチする前に、デバイス名を記録しておくこと(新ボリュームアタッチの際に必要なため)。

  • 任意の作業用EC2インスタンスに新EBSボリュームと旧EBSボリュームをアタッチする f:id:hirahara777:20180906191952p:plain


3. 新EBSボリュームを旧EBSボリュームと同期する
  • 作業用EC2インスタンスに新EBSボリュームと旧EBSボリュームのマウントポイントを作成する
# mkdir -p /mnt/new /mnt/old
  • 新EBSボリュームと旧EBSボリュームをマウントする
# mount /dev/xvdf1 /mnt/new
# mount /dev/xvdg1 /mnt/old
  • rsyncコマンドで、新EBSボリュームを旧EBSボリュームと同期する
    ※ この作業は、旧EBSボリュームのデータを紛失しないように(事前にsnapshotを取得するなど)、細心の注意を払って行うこと
# rsync -ax /mnt/old /mnt/new
  • 新EBSボリュームと旧EBSボリュームをアンマウントする
# umount /mnt/new /mnt/old
  • マウントポイントを削除する
# rmdir /mnt/new
# rmdir /mnt/old


4. 縮小対象EC2インスタンスに新EBSボリュームをアタッチする
  • 作業用EC2インスタンスから新EBSボリュームと旧EBSボリュームをデタッチする
  • 縮小対象EC2インスタンスに新EBSボリュームをアタッチする f:id:hirahara777:20180906191155p:plain ※ 2. で記録したデバイス名を入力すること


5. 不要なリソースを削除する
  • 新規起動したEC2インスタンスや旧EBSボリュームなど、不要なリソースを削除する

さいごに

コスト削減のプレッシャーに押し潰されそうな方など、ボリュームサイズの縮小が必要な時に参考にしてもらえると幸いです!