Amazon EC2(Root Device Type=EBS)でInstance Store(Ephemeral Store)を使う
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マスター!