読者です 読者をやめる 読者になる 読者になる

Tomo's IT Blog

技術的な調査メモ

AWS EBSをEC2インスタンスにアタッチして、Linuxから利用できるようにする

aws ec2

EBSボリュームを作成して既存のEC2インスタンスにアタッチして、Linuxから利用する方法をまとめました。

EC2インスタンスの作成

適当にスポットインスタンスを作成します。
以下の記事を参照してください。
tmnj.hatenablog.com

EBSボリュームの作成

EC2ダッシュボードで"ELASTIC BLOCK STORAGE" -> "ボリューム"を選択します。

f:id:tmnj:20161129214807p:plain


ボリュームの作成ボタンをクリックします。

f:id:tmnj:20161129214847p:plain


今回は、汎用SSD(GP2)で8GBほど作成します。同一のアベイラビリティゾーンのインスタンスにしかアタッチできませんので、アベイラビリティゾーンはアタッチしたいインスタンスと同じものを指定してください。

f:id:tmnj:20161129214925p:plain


なお、EBSは別途料金がかかりますので注意してください。ボリュームタイプの説明と料金は以下に定義されています。

料金 - Amazon Elastic Block Store(EBS) | AWS


以下のようにボリュームが作成されます。Nameは後から追記できます。"available"となっているのが新しく追加したボリュームです。

f:id:tmnj:20161129215218p:plain

EBSボリュームをEC2インスタンスにアタッチする

まず、対象のEC2インスタンスにログインしてlsblkコマンドを利用して現在のデバイスの状態を出力してみます。

[ec2-user@ip-xx-xx-xx-xx ~]$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk
└─xvda1 202:1    0   8G  0 part /

作成したボリュームを右クリックして、ボリュームのアタッチを選択します。

f:id:tmnj:20161129215322p:plain



既存のインスタンスを選択して"アタッチ"ボタンをクリックします。

f:id:tmnj:20161129215417p:plain


再度、lsblkコマンドを利用してデバイスの状態を出力してみます。xvdfが追加されていることが解ります。

[ec2-user@ip-xx-xx-xx-xx2 ~]$ 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   8G  0 disk

LinuxでEBSボリュームを使用できるようにする

以下のURLの手順で実行します。

Amazon EBS ボリュームを使用できるようにする - Amazon Elastic Compute Cloud


今回対象となるデバイスは上記の出力から/dev/xvdfとなります。以下のコマンドを実行します。

[ec2-user ~]$ sudo file -s /dev/xvdf
/dev/xvdf: data

dataと出ると、ファイルシステムが存在していない状態です。次にファイルシステムをこのデバイスに作成します。
以下のコマンドを実行して出力を確認します。

[ec2-user@ip-xx-xx-xx-xx ~]$ sudo mkfs -t ext4 /dev/xvdf
mke2fs 1.42.12 (29-Aug-2014)
Creating filesystem with 2097152 4k blocks and 524288 inodes
Filesystem UUID: 805da6f8-b81c-40ef-969c-910763183294
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

再度、/dev/xvdfを確認するとファイルシステムが作成されていることが解ります。

[ec2-user@ip-xx-xx-xx-xx ~]$ sudo file -s /dev/xvdf
/dev/xvdf: Linux rev 1.0 ext4 filesystem data, UUID=805da6f8-b81c-40ef-969c-9107
63183294 (extents) (large files) (huge files)

ファイルシステムができたので、マウントポイントにマウントします。今回は/dataにマウントしてみます。
まず、ディレクトリを作成します。

$ sudo mkdir /data


マウントポイントにマウントします。

$ sudo mount /dev/xvdf /data


これで、EBSボリュームをEC2インスタンスにアタッチしてLinux上から利用できるようになりました。

システムブート時にEBSボリュームをマウントする

/etc/fstabファイルに以下のエントリを追記します。

/dev/xvdf  /data  ext4  defaults,nofail 0 2

再起動してマウントされているか確認

/dataに適当なファイルを作成しておきます。
その後、rebootした後に/dataにマウントされて先ほど作成したファイルが存在していることを確認します。
(スポットインスタンスだとshutdownをするとインスタンスが削除されますので注意してください。)

スポットインスタンス再作成後のマウント

スポットインスタンスを再作成した後に、再度EBSボリュームをマウントし同じファイルが存在していることを確認してみましょう!