ヤマムギ

growing hard days.

*

EFSをEC2(Amazon Linux 2)からマウントする

      2018/08/16


Amazon Elastic File Systemが東京リージョンに来たこともあって、AWSへの移行でアプリケーションのカスタマイズをしない純粋なフォークリフティングで利用されるケースがありそうだなあと。
アプリケーションのカスタマイズをしないことにより、移行の敷居は下がるので、使ってみないとなあと思ってまして。
ちょうどオートスケーリングさせたいEC2を使ったシステムでアプリケーションをカスタマイズしたくない、というシステムを作る機会があったので構築してみました。

作ろうとしているシステムはこちらです。

高可用なRedmine

Amazon Elastic File System(EFS)の設定

EFS用のセキュリティグループの作成

今回はAMIを作るためのEC2のセキュリティグループと、オートスケーリンググループ起動設定のセキュリティグループを送信元(ソース)として、ポートは2049(NFS)を設定しました。

EFSの設定

VPC、サブネット、セキュリティグループを設定します。
セキュリティグループはサブネットごとに設定出来るのですね。

タグ、パフォーマンスモード、スループット、暗号化の設定をします。

パフォーマンスモード

General Purposeがデフォルトです。
画面に書いているとおりですが、Max I/Oの設定をすると数千のEC2インスタンスが接続するようなケースに最適化されていて、高いレベルの集計スループットを提供しますが、レイテンシーがわずかに高くなるという特徴があります。
ビッグデータ解析、メディア処理、ゲノム解析などの高度に並列化されたアプリケーションに適しているようです。

スループットモード

デフォルトはBurstingで自動的にスループットがバーストします。
Provisionedを選択すると1~1024MiB/秒を設定することができます。(別途課金)

暗号化

暗号化はKMSを使用します。
デフォルトキーがあるので使いました。

VPCの設定

EFSのDNS名にEC2からアクセスしますので、DNSホスト名を有効にしておきます。

これをしておかないと、マウントするときに以下のエラーになります。

EC2からマウント

Amazon Linux 2を起動してSSHでログインします。

chownは用途に応じて行ってください。

/etc/fstabには以下の行を追加します。

fs-5c768917:/ /var/efs efs defaults,_netdev 0 0

  • “fs-5c768917″はEFSのファイルシステムIDですので環境によって変わります。
  • “/var/efs”はマウント先ですので環境によって変わります。
  • “efs”はマウントタイプです。EFSの場合は”efs”です。
  • “defaults,_netdev”はmount optionsです。

詳細はこちらのAmazon EFS ファイルシステムの自動マウントをご参照ください。

マウントしてデータを保存してみます。

問題なさそうであれば、EC2からAMIを作成して新しいインスタンスを起動します。
ユーザーデータに以下を記述しておきます。

新たに起動したインスタンスからもファイルをEFSに保存してみます。

両方のインスタンスから、同じファイルが見えていることが確認できました。

Redmineの添付ファイル保存先設定

config.ymlに次の行を追加すればOKです

attachments_storage_path: /var/efs

課金体系

今回の場合は、プロビジョンドスループット を使っていませんので、保存している容量に対しての課金のみです。
EFSはEBSと違ってストレージ容量をプロビジョニングする必要がない上に保存しているデータに対してのみ課金が発生します。

2018/8/11現在でEBS, EFS, S3でGB月(1ヶ月間1GB保存した場合)のバージニア北部の料金を比較してみます。

サービス 料金
EBS 0.1 USD
EFS 0.3 USD
S3 0.023 USD
  • EBSはプロビジョニング容量に対しての課金ですのでEFS,S3のように保存した実容量ではありません。
  • S3は最初の50TBで、リクエスト料金も発生します。
  • リージョン外へのデータ転送料金はS3も発生します。
  • リージョン外へのデータ転送料金はEBSとEFSはEC2を経由して発生します。

コストや耐久性を考えるとアプリケーションをカスタマイズしてS3を利用することを検討するのが良さそうですが、
カスタマイズできない、したくないアプリケーションをAWSへ移行して、EC2を単一障害点にしないよう複数台の高可用性構成にする場合に、EFSは有効に使えると思いました。

@yamamanx

開発ベンダー5年、ユーザ企業システム部門通算9年、ITトレーナー1年目のSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。

このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。

また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。

 - AWS , ,

ad

ad

  関連記事

AlexaにAWSの最新Feedを読み上げてもらう(Lambda Python)

年末にAmazon Echo Dotを購入しましたので、練習がてらAlexaスキ …

AWS EC2 Amazon Linuxにmauticをインストールする(Sendgrid, Nginx, MySQL on RDS)

mauticをAmazon LinuxとNginx,MySQL on RDSにイ …

NATインスタンスを作成する

プライベートサブネットのEC2インスタンスからカスタムメトリクスとCloudWa …

テキストをAmazon PollyでMP3に変換してS3に格納(AWS Lambda Python)

Google Calendar Twilio ReminderのテキストをAma …

Amazon LinuxにRedmine 環境構築(エラーと対応をそのまま記載版)

Amazon Linuxにgit + Redmineの環境を構築してみます。 自 …

Amazon Data Lifecycle Manager(DLM)が東京リージョンで使えるようになったのでLambdaでAMI自動取得から乗り換えた

EBSのスナップショットを自動で作成してくれるAmazon Data Lifec …

AWS Summit 2016 Tokyoに参加してきました (前日 ~ Day1)

AWS Summit 2016 Tokyoにて、セッション聴講、ブース展示拝見、 …

AWS EC2 Amazon Linux にEC-CUBE3をnginx+MySql環境へインストール(手順検証中)

EC2インスタンスを作成する 少し古い記事で恐縮ですが試したい事があるのでAWS …

Route53でドメインを新規取得してDNSレコードを設定する

Elastic IPをAWSで発行しているのですから、DNSの設定も同じようにマ …

AWS Lambdaで「Process exited before completing request」

AWS lambdaで「Process exited before comple …