オレゴンからEFS。さくっと、Amazon Elastic File System(EFS)を触ってみた

記事タイトルとURLをコピーする

takada@福岡オフィスです。
「サーバーレスより普通にサーバが好っきーっ。」はい、ということで、AWSよりAmazon Elastic File System(EFS)のプロダクションリリースのアナウンスがでましたので、触ってみました。
アナウンスにあるとおり、2016/6/29時点で、the US East (Northern Virginia), US West (Oregon), and Europe (Ireland) の3つのリージョンのみで利用可能です。
今回は、US West (Oregon)リージョンで試してみました。

 

EFSを作ってみる

US West (Oregon)リージョンを選択すると、メニューにEFSが追加されています。

マネコンメニューEFS

 

メニューから選択した後、「Create file system」を押下すると、STEP1として、以下のような画面で必要項目を設定します。

以下、ポイントです。

  • AZごとに1つのmount target(NFSのエンドポイント)を作成します。作成するサブネットは任意です。
  • IP addressは自動割り当てにすることも、指定することもできます。
  • mount targetごとにセキュリティグループを付与します。

 

efs-step1

 

次の画面に進みます。
タグの指定と、Performance modeを選択します。
EFSをマウントするEC2が10台未満であれば、General Purposeでよさそうです。

efs-step2次の画面に進みます。

内容を確認し、「Create File System」を押下します。

efs-step3

作成中の画面となり、しばらくすると、ファイルシステムの作成が完了します。

efs-creating

EFSをマウントしてみる

 

上記の画面の中断にある「EC2 mount instruction」を押下すると、マウントの仕方が記載された画面が表示されます。

efs_mnt_inst

今回は、CentOS7で試してみました。手順は以下のとおりです。

  1. nfs-utils パッケージをインストールします。
    sudo yum install -y nfs-utils
    
  2. マウントポイントを作成します。
    sudo mkdir /efs
    
  3. マウントします。
    sudo mount -t nfs4 -o nfsvers=4.1 $(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)."File system ID".efs.us-west-2.amazonaws.com:/ efs
    

3番目のマウントコマンドでは、AZ名をメタデータから取得しています。File system IDはそれぞれ作成した後に付与されるものに読み替えてください。また、EFSはNFSver4およびv4.1に対応していますので、NFSのバージョン指定を4.1に指定しています。。

マウント後のdfコマンドの結果は、以下のようになります。

efs-df

「8.0E」って、奥さん、エクサバイトですよ。ギガ、テラ、ペタ、エクサ。。。ベム、ベラ、ベロ。。。 ただし、マニュアルには「Amazon EFS file systems store data and metadata across multiple Availability Zones in a region and can grow to petabyte scale」という記載がありますので、表示されている「8.0E」はダミー表示の可能性があります。ペタでもすごいですが。。。

永続的にマウントさせるためには、/etc/fstabに以下にように書いてあげます。以下の例では、明示的にNFSv4を指定しています。これでリブート後も自動的にマウントされます。

efs-fstab1

まとめ

 

今回は、プロダクトリリースされたEFSを触ってみました。
これまでは、EC2でNFSサーバを構築し、可用性を持たせるためには、ディスクミラーリング/クラスタ等の仕組みが必要でしたが、EFSなら、3stepでフルマネージドの大容量のNFSを利用することができます。東京リージョンでの提供が待ち遠しいですね。

 

"; doc.innerHTML = entry_notice + doc.innerHTML; }
' } }) e.innerHTML = codeBlock; });