Amazon EC2(Root Device Type=EBS)でInstance Store(Ephemeral Store)を使う

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Amazon EBSとInstance Store

Amazon EC2のAMIには、RootデバイスがAmazon EBSのものとInstance Storeのものがあります。Amazon Linux AMIは両方に対応しています。Instance Storeは高速に処理できますが、インスタンスが消えると中身のデータも消えてしまいます。Amazon EBSはインスタンスが消えても取り外し可能でデフォルト設定ではデータは消えませんから安心して使う事ができます。

今回は、RootデバイスをAmazon EBSにしつつ、同時にInstanse Storeを使ってみたいと思います。

Amazon Linux AMI 32bitでSmallインスタンスを起動する

いつもは、AWS Managemant Consoleからサクッとインスタンスを起動しますが、今回行うことはコマンドからのみ行うことができます。

以下のコマンドをご覧ください。32bitのAmazon Lunux AMIのAMI名は、ami-dcfa4eddです。Smallインスタンスは32bitのみの対応です。

ec2-run-instances ami-dcfa4edd -b /dev/sdb=ephemeral0 --region ap-northeast-1 -t m1.small -k mykey1

これでRootデバイスにEBSを指定しつつ、Instance StoreにEphemeralディスクを指定することができました。ログインをしてディスク状態を確認します。

$ df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/xvda1             8256952    880224   7292880  11% /
tmpfs                   859048         0    859048   0% /dev/shm
/dev/xvdb            153899044    192068 145889352   1% /media/ephemeral0

確かに/dev/xvdbという名前(/dev/sdbの別名)で、/media/ephemeral0がマウントされています。

さて、この/media/ephemeral0とはどこで設定されているのでしょうか。答えは、/etc/cloud/cloud.cfgに記述されています。

$ cat /etc/cloud/cloud.cfg 
cloud_type: auto
user: ec2-user
disable_root: 1
mounts:
 - [ ephemeral0, /media/ephemeral0, auto, "defaults" ]
 - [ swap, none, swap, sw, "0", "0" ]
preserve_hostname: True
repo_upgrade: security

fstabにも記述されています。

$ cat /etc/fstab 
#
LABEL=/     /           ext4    defaults,noatime  1   1
tmpfs       /dev/shm    tmpfs   defaults        0   0
devpts      /dev/pts    devpts  gid=5,mode=620  0   0
sysfs       /sys        sysfs   defaults        0   0
proc        /proc       proc    defaults        0   0
/dev/sdb	/media/ephemeral0	auto	defaults,comment=cloudconfig	0	2
/dev/sda3	none	swap	sw,comment=cloudconfig	0	0

これはAmazon Linux AMIのデフォルト動作となっています。初期設定をカスタマイズするには、インスタンス起動時にユーザデータを付加することで実現できます。

ユーザデータを設定して起動する

インスタンス起動時にユーザデータを設定するには、AWS Management Consoleで指定するか、コマンドで指定します。今回は、コマンドから指定したいと思います。まずはユーザデータを記載したテキストファイルを用意します。

$ vi config.txt
#cloud-config

cloud_type: auto
user: ec2-user
disable_root: 1
mounts:
 - [ ephemeral0, /mnt/sdb, auto, "defaults" ]
 - [ swap, none, swap, sw, "0", "0" ]
preserve_hostname: True
repo_upgrade: security

設定したユーザデータを付けてインスタンスを起動します。

$ ec2-run-instances ami-dcfa4edd -b /dev/sdb=ephemeral0 --region ap-northeast-1 -t m1.small -k mykey1 --user-data-file config.txt

ログインして初期状態を確認します。

$ df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/xvda1             8256952    879996   7293108  11% /
tmpfs                   859048         0    859048   0% /dev/shm
/dev/xvdb            153899044    192068 145889352   1% /mnt/sdb

このEphemeralディスクは、インスタンスのタイプによって割り当てられる数とサイズが決まっています。Smallインスタンスの場合は、150GBを1つだけ使う事ができます。Largeインスタンスであれば420GBを2つです。残念ながらMicroインスタンスでは使えません。

fstabにも設定されていますのでバッチリですね。

$ cat /etc/fstab 
#
LABEL=/     /           ext4    defaults,noatime  1   1
tmpfs       /dev/shm    tmpfs   defaults        0   0
devpts      /dev/pts    devpts  gid=5,mode=620  0   0
sysfs       /sys        sysfs   defaults        0   0
proc        /proc       proc    defaults        0   0
/dev/sdb	/mnt/sdb	auto	defaults,comment=cloudconfig	0	2
/dev/sda3	none	swap	sw,comment=cloudconfig	0	0

まとめ

Amazon EC2のRootデバイスにEBSを指定しつつ、追加でInstance StoreにEphemeralディスクを追加できることが分かりました。どちらか一方しか使えないと思っていましたが、両方を同時に使える事が分かりましたので、アプリケーションの特性に合わせて使い分けましょう。今日からあなたもAmazon EC2マスター!

参考資料

Amazon Linux AMI

Amazon EC2 Instance Storage