こんにちは、インフラエンジニアの綿引です。
最近、弊社で WordPress を使用する案件があったのですが、WordPress だとどうしてもローカルストレージに書き込みを行うため、サーバ側の冗長化のため Amazon EFS を試してみました。
そこで今回は EFS の概要と作成方法からマウントまでについて記載したいと思います。
対象の方は以下のような方でしょうか。
- AWS で WordPress を 運用している
- EC2 やコンテナ環境で共有ストレージを検討している
- オンプレだが AWS 環境で共有ストレージを検討している
Amazon EFS とは
Amazon EFS とは一言で表すと [共有ストレージサービス] です。
EFS は以下のような特徴があります。
- OS から NFS マウントができる (NFSv4 プロトコル)
- 料金は実際に使用した分のみ発生
- ファイルの追加・削除に合わせて自動で拡大・縮小
- クラウドだけでなくオンプレでも使用できる
- [標準ストレージクラス] と [低頻度アクセスストレージクラス] の2つのストレージクラスを提供
- [1ゾーンストレージ] という安価なストレージクラスが追加された
標準ストレージクラス と 低頻度アクセスストレージクラスは以下のような特徴があります。
標準ストレージクラス
- 普通にファイルを保存するとまずは標準ストレージに格納される
- 料金は使用したファイルシステムストレージ分のみ発生
- ストレージ分の料金は低頻度アクセスストレージクラスより高い
低頻度アクセスストレージクラス
- ファイルを一定期間使用しないと低頻度アクセスストレージに自動で移行される
- 移行される期間は [ライフサイクル管理] にて指定できる
- 料金は使用したファイルシステムストレージ分とデータ転送量の両方に発生
- ストレージ分の料金は標準ストレージクラスより安い
尚、ライフサイクル管理の期間は以下のように 7日・14日・30日・60日・90日 で選択することが可能です。
また 1ゾーンストレージ に関してですが、EFS は作成する際に [可用性と耐久性] の項目で [リージョン] か [One Zone] で選択できます。
この際 [One Zone] を選択することで、1ゾーンストレージを使用することができます。
内容は上記に記載の通りですが、保存が一つの AZ に絞られ冗長化が失われる代わりに [リージョン] の約半分の料金で使用することができます。
開発環境など冗長化よりコストを重視するような環境ではありですね。
料金体型
続いて料金体型に関して、以下にざっくりと一覧にしましたが細かいところは記載しておりませんので、詳細は 公式の料金ページ をご覧ください。
標準ストレージ (GB-月) | 0.36USD |
標準 – 低頻度アクセスストレージ (GB-月) | 0.0272USD |
1 ゾーンストレージ (GB-月) | 0.192USD |
1 ゾーン – 低頻度アクセスストレージ (GB-月) | 0.0145USD |
低頻度アクセスリクエスト (転送 GB あたり) | 0.012USD |
プロビジョニングするスループット (MB/秒-月) | 7.20USD |
仮に50GBのストレージを EFS で用意したとすると、全て標準ストレージに保存しても約2,000円ぐらいでしょうか?
サーバ側とは別料金にはなりますが、そこまで高い感じではないですね。
EFS 作成からマウントまで
検証環境について
今回の検証環境は以下です。
- コンピューティング : EC2
- OS : Amazon Linux2
では早速 EFS を作成していきます。
セキュリティグループの作成
まずは EFS に設定するセキュリティグループを作成していきます。
作成するのは EC2 から EFS をマウントする用のセキュリティグループです。
公式のユーザーガイド を参考にプロコトルには EFS の “2049” を、ソースには [EC2 に付与しているセキュリティグループ] を指定し、名前は適当に [security-efs] としました。
これでセキュリティグループの作成は完了です。
EFS の作成
次は EFS の作成を行います。
マネジメントコンソールから EFS のコンソールにアクセスし、[ファイルシステムの作成] を選択します。
以下の項目を入力したら [作成] を選択します。
- 名前 : efs-test
- Virtual Private Cloud (VPC) : EC2 と同じ VPC
- 可用性と耐久性 : リージョン
上部で述べた [可用性と耐久性] ですが、今回は [リージョン] で作成していきます。
これで EFS のファイルシステムの作成が完了しました。
作成が完了すると先ほど指定した VPC に存在するサブネットに対して、各 AZ に [マウントターゲット] が作成されます。
確認方法は作成したファイルシステムを選択し、[ネットワーク] タブを選択すれば進捗が確認できます。
これは少し時間がかかるので、気長に待ちましょう。
このマウントターゲットが作成されればもう使用はできるのですが、セキュリティグループがデフォルトになっているので、先ほど作成した EFS 用のセキュリティグループに変更します。
[ネットワーク] タブ から画面右の [管理] を選択します。
するとマウントターゲットの現在の設定が出てくるので、[セキュリティグループ] を先ほど作成したものに変更し、最後に [保存] を選択します。
これで EFS の設定は完了です。
今回特にライフサイクル管理の設定は変更しませんが、実際に使用する際は [低頻度アクセスストレージクラス] を意識し、環境にあった設定に変更しましょう。
最後に EC2 でマウントを行っていきます。
EC2 にて EFS をマウントする
早速マウントといきたいところですが、今回は EFS のマウントに伴い amazon-efs-utils ツール を使用します。
amazon-efs-utils はクライアント側にインストールする、EFS をマウントするためのツールで、TLS を介してのマウントや、 IAM を使用して認証させる際などもできます、
インストール方法はいくつかあり yum や git clone などでできますが、今回は yum で実施します。
yum install amazon-efs-utils
なお、各OSのインストール方法については 公式のユーザーガイド を参考にしていただくとよろしいかと思います。
次にマウントポイントに [/efs-test] というディレクトリを作成します。
mkdir -p /efs-test
そして以下のコマンドで EFS をマウントします。
mount -t efs [ファイルシステムID] [マウントしたいディレクトリ]
※ 実際はこのようなコマンドです。
mount -t efs fs-6ddd7f4d /efs-test/
これで無事マウントができました。
df の結果見てみます。
df -h Filesystem Size Used Avail Use% Mounted on fs-6ddd7f4d.efs.ap-northeast-1.amazonaws.com:/ 8.0E 0 8.0E 0% /efs-test
問題なくマウントできているようですね。
fstab にも書いてみる
fstab に記載する際は以下のような形です。
[ファイルシステムID] [マウントポイント] efs _netdev 0 0
※ 実際はこのような記述です。
fs-6ddd7f4d /efs-test efs _netdev 0 0
なお、マウントのオプションは適当に入れたので、各環境で変更いただければと思います。
マウントオプションの詳細は github に記載されていましたので、詳細は github の Usage 部分 を参考にされると良いかと思います。
これで EFS の作成からマウントまでができました。
使用量なども EFS のコンソールから確認できて便利です。
最後に
今回は AWS EFS を作成してマウントする方法を検証しました。
WordPress の冗長化をどうしようか悩んでいた私にとっては非常にありがたいサービスです。
コンテナなど他にも用途がそこそこありそうなので、いろいろ使ってみようと思います。