【AWS】EC2にS3をマウントする方法

2020年2月25日 | 広報・PR・イベント運営担当

EC2 に S3 をマウントした手順をご紹介します。

 

1. s3fs-fuse のダウンロード

s3fs-fuse を git からダウンロードします。

$ sudo yum install git ※git がない場合は事前にインストールする。

$ git clone https://github.com/s3fs-fuse/s3fs-fuse.git

 

2. s3fs-fuse のインストールに必要なパッケージを準備

s3fs-fuse のインストールに必要なパッケージが不足している場合は事前にインストールします。
今回は下記のパッケージが不足していたため事前にインストールしました。

$ sudo yum install automake gcc-c++ fuse-devel openssl-devel libcurl-devel libxml2-devel

 

3. s3fs-fuse のインストール

s3fs-fuse をダウンロードした場所へ移動してインストールしました。

$ cd s3fs-fuse/

$ ./autogen.sh

$ ./configure –prefix=/usr

$ make

$ sudo make install

 

4. マウントポイントの作成

今回は /usr/share/nginx/ の下に s3 というディレクトリを作成しました。

$ cd /usr/share/nginx/

$ mkdir s3

 

5. マウントに必要な情報を調べる

マウントするには下記の情報が必要です。

・マウント先バケット名
・マウントポイント
・マウントポイントの uid
・マウントポイントの gid
・ロール名(EC2 にアタッチされている S3 アクセス用ロール)
・エンドポイント(リージョン)

マウントポイントのユーザーを ec2-user 、グループを nginx にしたいため、それぞれの id を調べました。

$ id ec2-user

uid=1000(ec2-user) gid=1000(ec2-user) groups=1000(ec2-user),…

$ id nginx

uid=996(nginx) gid=994(nginx) groups=994(nginx)

 

6. マウント

s3fs コマンドを実行してマウントします。

$ sudo s3fs <マウント先バケット> <マウントポイント> -o rw,allow_other,uid=1000,gid=994,iam_role=<S3へのロール>,endpoint=ap-northeast-1

アンマウントするときは下記のコマンドを実行します。

$ sudo umount <マウント先バケット>

 

7. 確認

指定した S3 バケットがマウントされているか確認します。

$ df -h

$ ls <マウントポイント>

 

8. トラブルと解決方法

参考までに、今回発生したトラブルと解決方法をご紹介します。

トラブル1: s3fs コマンドを実行してもマウントされない

s3fs コマンドを実行してもマウントされない(コマンド実行時にエラーも出力されない)というトラブルが発生しました。

【原因】
読み込みと書き込みの権限のみでロールを作成していたが、マウントの実行にはリスト権限も必要なため。

【解決方法】
マネジメントコンソール IAM で該当のロール(ポリシー)を選択し、リスト権限を追加する。

トラブル2: マウントポイントで ls や cat コマンドを実行するとエラーが表示される

マウントポイントで ls や cat コマンドを実行すると下記のトラブルが発生しました。

・マウントポイントの ls でエラー(No such file or directory)が表示される

・ls -l でファイルの詳細を表示したとき、パーミッションやユーザーなどの情報が「???」になる

・ファイルは存在するのに cat コマンドでファイルの中身が参照できない(No such file or directory)

【原因】
ロールでバケットへのアクセス権限を設定していたが、バケットの中身に対してのアクセス権限も設定する必要があるため。

【解決方法】
ロール(ポリシー)のリソースに、バケットの中身(バケット名/*)を追加設定する。

マネジメントコンソール IAM で該当ロールのポリシーを選択し、リソースの bucket 項目に arn:aws:s3:::<バケット名>/* を追加する。

トラブル3: /var/log/messages にエラーメッセージ

こちらはマウントが失敗しているわけではありませんが、トラブル1の原因を探っているとき、 /var/log/messages に下記のエラーメッセージが出力されていることに気付き、原因を調べてみました。

Failed to connect region ‘us-east-1′(default), so retry to connect region ‘ap-northeast-1’.

【原因】
s3fs コマンド実行時に endpoint の指定がないと、デフォルトで us-east-1 に接続されるため。

【解決方法】
マウント実行コマンドに endpoint=ap-northeast-1 を追加する。

 

8. 自動マウント設定

再起動したときに自動的にマウントされるように設定しました。

/etc/rc.local にマウント実行コマンドを追加

$ sudo vi /etc/rc.local

最終行に下記を追加します。

s3fs <マウント先バケット> <マウントポイント> -o rw,allow_other,uid=1000,gid=994,default_acl=public-read,iam_role=<S3へのロール>,endpoint=ap-northeast-1

実行権限を付与

$ sudo ls -l /etc/rc.d/rc.local

-rw-r–r– 1 root root 635 Feb 25 11:20 /etc/rc.d/rc.local

はじめはパーミッション 644 でしたが、744 に変更しました。

$ sudo chmod 744 /etc/rc.d/rc.local

$ sudo ls -l /etc/rc.d/rc.local

-rwxr–r– 1 root root 635 Feb 25 11:20 /etc/rc.d/rc.local

以上で設定完了です。

参考:Qiita EC2 インスタンスに S3 をマウントする
https://qiita.com/shicky1121/items/e19b50308c79e5a6081e

 

いかがでしたか?

イー・エージェンシーでは、AWS(Amazon Web Services)による開発や、データプライバシーコンサルティングCRM / MA支援ツールでお客様のマーケティング課題の解決を支援しております。 詳しくは下記サイトをご覧ください。

データソリューション|イー・エージェンシー
https://datasolution.e-agency.co.jp/

また、Google アナリティクス 4 プロパティ(GA4)など Google マーケティング プラットフォーム(GMP)の各種ツールをはじめ、BigQuery など Google Cloud Platform(GCP)を用いたデータ統合や、広告連携アトリビューション分析などデータ活用全般を支援しております。 詳しくは下記サイトをご覧ください。

Google アナリティクス 4 プロパティ(GA4)など
Google マーケティング プラットフォーム|イー・エージェンシー
https://googleanalytics360-suite.e-agency.co.jp/

PICK UP

広報・PR・イベント運営担当

ライター

おもてなしを科学するイー・エージェンシーでは、クロスデバイス分析によるユーザー単位の分析やオンラインオフラインを横断した分析など次世代の分析をサポート。また分析データを元にしたABテスト支援から、EC領域での購買、行動データを活用したレコメンドシステムなどを提供。 お問い合わせはこちらにどうぞ。

お問い合わせ

サービスに関するご相談は
こちらよりお気軽にお問い合わせください。

e-Agencyの様々な情報をFacebookでお届けします!