AWS初心者です。
EC2インスタンスのディスク容量追加やってみつつ、自分用の振り返り用の記事をまとめました。
公式Docもあり他の人の記事もすでにあるので、自分の記事に価値はないですが、なにか先達からコメントもらえたらいいなと思い公開します。
EC2のストレージの種類
EC2のストレージは、EBSとインスタンスストアの2種類がある。
公式ドキュメントでいう永続的ストレージはEBSを指していると考えられます。
また、公式ドキュメントでは、ストレージとボリュームは同義だと思っています。
EBS
- 高い可用性と耐久性を持つストレージ
- EBSボリュームともいう
- 5つのEBSボリュームタイプ(2016/11/06現在)から目的にあったものを選ぶ
- 単位:IOPS(Input/Output Per Second)
執筆時点で選択できるEBSボリュームタイプ5つ
タイプ | ハードウェア | 容量 | コスト | 用途 |
---|---|---|---|---|
EBS マグネティック | HDD | 1 GB~1 TB | 0.05 USD/GB-月 0.05 USD/100 万 I/O |
IOが遅くてもいい場合 コストを抑えたい場合 |
Cold HDD (sc1) | HDD | 500 GB~16 TB | 0.025 USD/GB-月 | アクセス頻度の低いワークロード向け |
スループット最適化 HDD (st1) | HDD | 500 GB~16 TB | 0.045 USD/GB-月 | アクセス頻度の高いワークロード向け |
EBS 汎用 SSD (gp2)* | SSD | 1 GB~16 TB | 0.10 USD/GB-月 | 幅広いトランザクションワークロードに適応できる |
EBS プロビジョンド IOPS SSD (io1) | SSD | 4 GB~16 TB | 0.125 USD/GB-月 0.065 USD/プロビジョンド IOPS |
レイテンシーの影響が大きいトランザクションワークロード向け |
インスタンスストア
- インスタンス用のブロックレベルの一時ストレージ
- 1 つ以上のインスタンスストアボリュームで構成される
- インスタンスストアのデータはEC2インスタンス再起動時は引き継がれる
- 下記のような場合はインスタンスストアのデータは失われる
- 基盤となるディスクでの障害発生
- EC2インスタンスの停止
- EC2インスタンスの終了
EC2インスタンスのマネジメントコンソールからの再起動ではインスタンスストアのデータは引き続き利用できる。
これは同じ物理サーバ上で立ち上がるためだと思われます。
一方、停止+起動によるインスタンスの再立ち上げは、停止前とは異なる物理サーバで立ち上がります。
ルートボリュームと追加ボリューム
- ルートボリューム = ルートにマウントされたストレージ(ボリューム)
- 追加ボリューム = ルートボリューム以外に追加されたストレージ(ボリューム)
ディスク容量の追加のパターン
インスタンスのディスク容量を増やす際に、3つのケースがある
- ストレージを追加する
- ルートボリュームの容量を追加する
- 追加ボリュームの容量を追加する
ざっくりした各項目の説明をします。
実行インスタンスOS : Amazon Linux
1. ストレージを追加する
- EBS => Volume => Volumeの追加
- 作成したVolumeをインスタンスにアタッチ
- Volumeをマウント
2. ルートボリュームの容量を追加する
- EC2インスタンスのAMIを作成する
- この時、「再起動しない」にチェックを入れとけば、AMI作成時にコピー元のインスタンスは再起動されない。商用で動いているインスタンスなら入れるべきですね。
- AMIから新しいインスタンスを起動する
- この時にルートボリュームのサイズを変更する
- 新しいインスタンスでルートボリュームのサイズが変更されていることを確認する
- サイズが変わっていなかったら[サイズ変更が反映されない場合]の項を参照のこと
- EIPを付け替える(Reallocateにチェックを入れないとエラーで実行できない)
これって、AMI作ってから、EIP付け替えるまでの情報って失われますよね。。。
もっといい方法ないかな。
3. 追加ボリュームの容量を追加する
「ルートボリュームの容量を追加する」でもできるかもしれないですが、「Amazon Web Services実践入門」では下記のボリュームを切り離す方法が説明されていた。
- EC2インスタンスを停止する
- 試してみましたが、インスタンスを停止しないと、後に実施する追加ボリュームの切り離しができなかったです。
- 容量追加する対象ボリュームのスナップショットを取得
- 対象ボリュームのスナップショットから新規ボリュームを作成する
- サイズを変更する
- EC2インスタンスと同じAvailability Zone(AZ)を選択する
- 元のボリュームを切り離す(デタッチする)
- サイズ変更した新ボリュームをアタッチする
- 元のボリュームと同じマウント先のディレクトリを選択すること
- サイズが変わっていなかったら[サイズ変更が反映されない場合]の項を参照のこと
サイズ変更が反映されない場合
ファイルシステムで実施するコマンドが違う。
- 対象ボリュームのファイルシステムがext4の場合
次のコマンドで反映させる
$ sudo resize2fs <デバイス>
- 対象ボリュームのファイルシステムがxfsの場合
次のコマンドで反映させる
$ sudo xfs_growfs <マウント先のディレクトリ>
実行例:
[ec2-user@ip-172-31-20-58 ~]$ sudo xfs_growfs /mnt/ebs/0
meta-data=/dev/xvdf isize=256 agcount=4, agsize=6553600 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=26214400, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=12800, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 26214400 to 31457280
- ちなみにファイルシステムを確認するには
$ df -T
[ec2-user@ip-172-31-20-58 ~]$ df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
devtmpfs devtmpfs 498772 60 498712 1% /dev
tmpfs tmpfs 509664 0 509664 0% /dev/shm
/dev/xvda1 ext4 16380820 2364400 13916172 15% /
/dev/xvdf xfs 125777920 32960 125744960 1% /mnt/ebs/0
参考資料
- [Amazon Web Services実践入門](http://amzn.to/2eLHzeF,"Amazon Web Services実践入門" )
- 公式ドキュメント AWS Documentation » Amazon EC2 » User Guide for Linux Instances » ストレージ