LoginSignup
23
29

More than 5 years have passed since last update.

EFSとEBS

Last updated at Posted at 2017-02-09

AWSのストレージサービス

AWSには以下のようなストレージサービスが提供されています。

  • インスタンスストレージ
  • EBS
  • EFS
  • S3
  • Glacier
  • Storage Gateway
  • RDS
  • Redshift
  • ElastiCache
  • DynamoDB
  • (SimpleDB)

ここではEFSとEBSの比較について特徴と利用方法を取り上げます。

EFSとEBSの比較

EFSはNFSでアクセス可能な共有ストレージのファイルストレージサービスで、EBSはブロックレベルのストレージサービスで、共にEC2にマウント可能なストレージです。EFSとEBSの利用比較の図については以下のようになります。
efs_ebs.png

公式ページの比較表を引用させて頂くと以下のようになります。

Amazon EFS Amazon EBS PIOPS
パフォーマンス オペレーションあたりのレイテンシー 低、一定 最低、一定
スループットスケール 1 秒間あたり数 GB 1 秒間あたり 1 GB
特徴 データ(可用性/耐久性) 複数 AZ に冗長的に保存 単一 AZ に冗長的に保存
アクセス 複数 AZ の 1~数千の EC2 インスタンスから同時 単一 AZ の単一 EC2 インスタンスから
ユースケース ビッグデータと分析、メディア処理ワークフロー、コンテンツ管理、ウェブ配信、ホームディレクトリ ブートボリューム、トランザクションおよび NoSQL データベース、データウェアハウスと ETL

制限

マウントコマンド まとめ

EFS

$ sudo yum install nfs-utils
$ sudo mkdir -p /mnt/efs/0
$ sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 fs-xxxxxxxx.efs.us-east-1.amazonaws.com:/ /mnt/efs/0
$ df -h
$ sudo bash -c "echo 'fs-xxxxxxxx.efs.us-east-1.amazonaws.com:/ /mnt/efs/0 nfs4 defaults 0 0' >> /etc/fstab"

EBS

$ sudo mkfs.xfs /dev/sdf
$ sudo mkdir -p /mnt/ebs/0
$ sudo mount -t xfs /dev/sdf /mnt/ebs/0
$ df -h
$ sudo bash -c "echo '/dev/sdf /mnt/ebs/0 xfs defaults 0 0' >> /etc/fstab"

利用方法

EFS

マネジメントコンソールから[Elastic File System]を選択。
[Create file system]を選択。

Step 1: Configure file system access

VPC: vpc-xxxxxxxxx
Create mount targets:
Availability Zone, Subnet, IP address, Security groupsの各項目について、利用するリージョン中のアベイラビリティゾーンが幾つか表示される。

[Next step]を選択。

Step 2: Configure optional settings

Add tags

Key: Name
Value: SampleEFS

Choose performance mode

  • General Purpose
  • Max I/O

パフォーマンスモードは2種類から選択できる。Max I/Oはインスタンスが10個〜1000個の規模で接続するのに向いている。通常はGeneral Purposeで良い。CloudWatchのPercentIOLimitのIOの様子を見てMax I/Oを考える。

[Next step]を選択。

Step 3: Review and create

内容を確認したら、[Create File System]を選択。

※注意点で、EFS側のセキュリティグループでインバウンドでEFSの通信を許可しておかないとタイムアウトでマウントに失敗するので、ポートを開放しておく。

EFSのMount targetsで各AZに適用されているSecurity Groupを確認しておく。
マネジメントコンソールから[VPC]を選択。
[セキュリティグループ]を選択。
先ほど確認したセキュリティグループを選択し、インバウンドルールを選択して、[編集]を選択。

[別のルールの追加]を選択して、以下を追加して[保存]を選択する。

カスタムTCPルール TCP(6) 2049 0.0.0.0/0

$ ssh -i ~/.ssh/id_rsa.pem ec2-user@XXX.XXX.XXX.XXX

以下を入力しても何も表示されない場合はnfs-utilsがインストールされていないのでインストールする。

$ yum list installed | grep nfs-utils
nfs-utils.x86_64                         1:1.3.0-0.21.amzn1           @amzn-main
$ sudo yum install nfs-utils
$ sudo mkdir -p /mnt/efs/0
$ sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 fs-xxxxxxxx.efs.us-east-1.amazonaws.com:/ /mnt/efs/0
$ df -h
ファイルシス                              サイズ  使用  残り 使用% マウント位置
/dev/xvda1                                  7.8G  1.2G  6.6G   15% /
devtmpfs                                    488M   60K  488M    1% /dev
tmpfs                                       498M     0  498M    0% /dev/shm
fs-xxxxxxxx.efs.us-east-1.amazonaws.com:/   8.0E     0  8.0E    0% /mnt/efs/0
$ sudo bash -c "echo 'hoge' > /efs/sample.txt"
  • ユーザに実行権限がないディレクトリのファイルに対してリダイレクトでデータを書き込みとsudo をつけても失敗する。
  • もしくは、sudo tee -a /efs/sample.txt

としておき、別のインスタンスからも同様の手順でマウントすると、

$ cat /efs/sample.txt 
hoge

ファイルが共有できることが確認できる。

Amazon Linux, Red Hat Enterprise Linux, or SuSE Linuxでは、nfs-utilsパッケージ
Ubuntuでは、nfs-commonパッケージ

nfs-utilsパッケージを使用するが、Amazon Linuxではデフォルトでインストールされているので、yumなどでインストールする必要はない。

再起動してもマウントが外れないように/etc/fstabにマウントの情報を追記しておく。

$ sudo bash -c "echo 'fs-xxxxxxxx.efs.us-east-1.amazonaws.com:/ /mnt/efs/0 nfs4 defaults 0 0' >> /etc/fstab"

注意点

nfs-utilsを入れ直さないと

$ sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 fs-xxxxxxxx.efs.us-east-1.amazonaws.com:/ /efs
mount: wrong fs type, bad option, bad superblock on fs-xxxxxxxx.efs.us-east-1.amazonaws.com:/,
       missing codepage or helper program, or other error
       (for several filesystems (e.g. nfs, cifs) you might
       need a /sbin/mount.<type> helper program)

       In some cases useful info is found in syslog - try
       dmesg | tail or so.

(参考) http://qiita.com/Accent/items/0d99c4652e2101760b50

$ sudo yum install nfs-utils

ファイアウォールを解放しないと

$ sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 fs-xxxxxxxx.efs.us-east-1.amazonaws.com:/ efs
mount.nfs4: Connection timed out

EBS

マネジメントコンソールの操作

1.マネジメントコンソールから、[EC2]を選択。
2.ELASTIC BLOCK STOREの[ボリューム]を選択。
3.[ボリュームの作成]を選択。

4.
ボリュームタイプ: 汎用SSD(GP2)
サイズ(GiB): 5(最小: 1 GiB、最大: 16384 GiB)
IOPS: 300 / 3000(Baseline of 3 IOPS per GiB with a minimum of 100 IOPS, burstable to 3000 IOPS)
スループット (MB/秒): 該当しません
アベイラビリティーゾーン : us-east-1d
スナップショット ID: (空欄)
暗号化: (チェックしない)

[作成]を選択。

EBSはアベイラビリティーゾーンに属するので、アタッチしたいEC2インスタンスがあるものと同じものにしておかないといけないことに注意。

5.作成したボリュームを選択した状態で[アクション]から[ボリュームのアタッチ]を選択。

6.
ボリューム : us-east-1d にある vol-0bf1030e59290b4f8
インスタンス : i-e25cdcd2 us-east-1d 内の
デバイス : /dev/sdf

  • Linux のデバイス: /dev/sdf から /dev/sdp

[アタッチ]を選択。

7.デバイスの存在を確認。

CUIからの操作

$ ssh -i ~/.ssh/id_rsa.pem ec2-user@XXX.XXX.XXX.XXX
$ ls -al /dev/ | grep sdf
lrwxrwxrwx  1 root root           4  1月  2 06:16 sdf -> xvdf

xfsprogsパッケージが必要。Amazon Linuxではデフォルトでインストールされている。

$ sudo mkfs.xfs /dev/sdf
meta-data=/dev/sdf               isize=256    agcount=4, agsize=327680 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=1310720, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
$ sudo mkdir -p /mnt/ebs/0
$ sudo mount -t xfs /dev/sdf /mnt/ebs/0
$ df -h
ファイルシス                              サイズ  使用  残り 使用% マウント位置
/dev/xvda1                                  7.8G  1.2G  6.6G   15% /
devtmpfs                                    488M   64K  488M    1% /dev
tmpfs                                       498M     0  498M    0% /dev/shm
fs-xxxxxxxx.efs.us-east-1.amazonaws.com:/   8.0E     0  8.0E    0% /mnt/efs/0
/dev/xvdf                                   5.0G   33M  5.0G    1% /mnt/ebs/0

再起動してもマウントが外れないように/etc/fstabにマウントの情報を追記しておく。

$ sudo bash -c "echo '/dev/sdf /mnt/ebs/0 xfs defaults 0 0' >> /etc/fstab"

その他

ルートデバイスボリュームの容量の追加

AMIの作成
AMIや元々のインスタンスの設定によっては、サイズの変更が反映されないので以下のコマンドを入力する。

$ sudo resize2fs /dev/xvda1

追加ボリュームの容量の追加。

$ sudo resize2fs /dev/xvdf

ファイルシステムがXFSの場合は以下のコマンドを入力する。

$ sudo xfs_growfs /mnt/ebs/0

参考

http://docs.aws.amazon.com/efs/latest/ug//mounting-fs.html
http://dev.classmethod.jp/cloud/aws/amazon-elastic-file-system-is-generally-available/
http://dev.classmethod.jp/cloud/efs-ataglance/
http://blog.serverworks.co.jp/tech/2016/06/29/efs-2/

23
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
29