全力で怠けたい

怠けるために全力を尽くしたいブログ。

EBS ボリュームを EC2 インスタンスに追加と削除する方法。

EC2 を運用中にディスクが足りなくなったので EBS ボリュームを追加とアタッチをして、ついでにデタッチと削除したときのメモ。

EBS ボリュームの追加

EC2 インスタンスが追加の EBS ボリュームを使うためには EBS ボリュームの作成と EC2 インスタンスへのアタッチをしていく。

追加する EBS ボリュームの作成

今回は汎用 SSD (gp2) の EBS ボリュームを作成して EC2 インスタンスへアタッチしていく。

作業開始前の EC2 インスタンスの状態。

$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk
└─xvda1 202:1    0   8G  0 part /

$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
devtmpfs         475M     0  475M    0% /dev
tmpfs            492M     0  492M    0% /dev/shm
tmpfs            492M  404K  492M    1% /run
tmpfs            492M     0  492M    0% /sys/fs/cgroup
/dev/xvda1       8.0G  1.5G  6.6G   19% /
tmpfs             99M     0   99M    0% /run/user/1000

EBS ボリュームを作成する。 EBS ボリュームは追加先の EC2 インスタンスと同じアベイラビリティゾーンに作成する必要があるので追加先の EC2 インスタンスが稼働しているアベイラビリティゾーンを確認しておくこと。

$ aws ec2 create-volume \
    --availability-zone <アベイラビリティゾーン> \
    --no-encrypted --volume-type gp2 \
    --size 30

EBS ボリュームを EC2 インスタンスへアタッチ

作成した EBS ボリュームを EC2 インスタンスへアタッチする。

$ aws ec2 attach-volume --device /dev/xvdf --instance-id <EC2 インスタンス ID> --volume-id <作成した EBS ボリュームの ID>
{
    "AttachTime": "2020-02-13T13:57:31.721Z",
    "InstanceId": "<EC2 インスタンス ID>",
    "VolumeId": "<作成した EBS ボリュームの ID>",
    "State": "attaching",
    "Device": "/dev/xvdf"
}

EBS ボリュームの状態が in-use になると EC2 インスタンスから見えるようになる。

$ aws ec2 describe-volumes --volume-ids <作成した EBS ボリュームの ID> | jq -r '.Volumes[].State'
in-use

EBS ボリュームのファイルシステムの作成

作ったばかりの EBS ボリュームはファイルシステムがないのでファイルシステムを作成していく。

ファイルシステムを作成する前に今どうなってるか確認。 lsblk コマンドを実行すると EC2 インスタンス/dev/xvdf にアタッチした EBS ボリュームが見えるようになっている。

$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk
└─xvda1 202:1    0   8G  0 part /
xvdf    202:80   0  30G  0 disk

$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
devtmpfs         475M     0  475M    0% /dev
tmpfs            492M     0  492M    0% /dev/shm
tmpfs            492M  408K  492M    1% /run
tmpfs            492M     0  492M    0% /sys/fs/cgroup
/dev/xvda1       8.0G  1.5G  6.6G   19% /
tmpfs             99M     0   99M    0% /run/user/1000

file コマンドで /dev/xvdf を見るとまだファイルシステムを作成していないので data とだけ出力される。

$ sudo file -s /dev/xvdf
/dev/xvdf: data

mkfs コマンドで /dev/xvdfファイルシステムを作成していく。

$ sudo mkfs -t xfs /dev/xvdf
meta-data=/dev/xvdf               isize=512    agcount=4, agsize=1966080 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=0
data     =                       bsize=4096   blocks=7864320, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=3840, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

file コマンドで /dev/xvdf を見ると XFS ファイルシステムが作成されていることが分かる。

$ sudo file -s /dev/xvdf
/dev/xvdf: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)

EBS ボリュームのマウント

マウントポイントのディレクトリを作成してボリュームをマウントしていく。 今回は /dev/xvdf/data にマウントしていく。

$ sudo mkdir /data
$ sudo mount /dev/xvdf /data

df コマンドを実行すると /dev/xvdf/data にマウントされているのが分かる。

$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
devtmpfs         475M     0  475M    0% /dev
tmpfs            492M     0  492M    0% /dev/shm
tmpfs            492M  464K  492M    1% /run
tmpfs            492M     0  492M    0% /sys/fs/cgroup
/dev/xvda1       8.0G  1.5G  6.6G   19% /
tmpfs             99M     0   99M    0% /run/user/1000
tmpfs             99M     0   99M    0% /run/user/0
/dev/xvdf         30G   63M   30G    1% /data

EBS ボリュームを作成して EC2 インスタンスから使えるようにする手順は以上。

EBS ボリュームの削除

EC2 インスタンスが使っている EBS ボリュームを削除するためには EBS ボリュームのアンマウントと EC2 インスタンスからのデタッチをしていく。 必要なデータが EBS ボリュームに入っているときは作業を進める前にデータを別の場所に移したりコピーなど取得しておく。

EBS ボリュームのアンマウント

$ sudo umount -d /dev/xvdf

$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
devtmpfs         475M     0  475M    0% /dev
tmpfs            492M     0  492M    0% /dev/shm
tmpfs            492M  464K  492M    1% /run
tmpfs            492M     0  492M    0% /sys/fs/cgroup
/dev/xvda1       8.0G  1.5G  6.6G   19% /
tmpfs             99M     0   99M    0% /run/user/1000
tmpfs             99M     0   99M    0% /run/user/0

EBS ボリュームのデタッチ

$ aws ec2 detach-volume --volume-id <削除する EBS ボリュームの ID>
{
    "AttachTime": "2020-02-13T13:58:31.000Z",
    "InstanceId": "<EC2 インスタンスの ID>",
    "VolumeId": "<削除する EBS ボリュームの ID>",
    "State": "detaching",
    "Device": "/dev/xvdf"
}

EBS ボリュームが EC2 インスタンスからデタッチが完了すると EBS ボリュームの状態が available になる。

$ aws ec2 describe-volumes --volume-ids <削除する EBS ボリュームの ID> | jq -r '.Volumes[].State'
available

EBS ボリュームの削除

$ aws ec2 delete-volume --volume-id <削除する EBS ボリュームの ID>

EBS ボリュームを EC2 インスタンスからデタッチして削除する手順は以上。

参考ページ