VPCエンドポイントでS3にアクセスする場合のgoofys利用で気を付けておきたいこと
はじめに
こんにちは、岩城です。 小ネタです。VPCエンドポイントでS3にアクセスする環境で、goofysを利用する機会が有りました。 少しハマったので備忘録として残しておきます。
主要な用語の簡単な説明
- VPCエンドポイントとは
- 通常はインターネットを介してアクセスするところ、サポートされるAWSサービスにおいて、AWSサービスとVPCをプライベートに接続を可能とします。
- 例えば、DirectConnectを利用して閉域網として構築した環境で、S3を利用したい場合に利用します。
- 詳細やサポートされるサービスに興味のある方は、以下のドキュメントを確認してみてください。 Amazon Virtual Private Cloud ユーザーガイド 〜VPCエンドポイント〜
- goofysとは
- Goofysは、Goで書かれた高性能でPOSIX風なS3バケットをファイルシステムとして扱うツールです。
- 第一にパフォーマンス、第二にPOSIXの準拠を目指して開発されています。
- ランダムな書き込みがあるようなアプリケーションで利用するデータの扱いや、ファイル毎のパーミッションを持てないため、単にデータを保存するような用途が効果的です。
- 興味のある方は、以下のドキュメントを確認してみてください。 goofys/README.md
何にハマったのか?
VPCエンドポイントを使ってS3にアクセスする環境で、goofysを利用してS3バケットをマウントできない事象にハマりました。 この時の構成は以下のようになっていました。
構成
インターネットの通信は、自身の端末であるMY IPアドレスのみを許可し、VPCエンドポイントを利用してS3にアクセスします。
原因は?
以下のブログにありますとおり、VPCエンドポイントでS3にアクセスする場合に、リージョン指定の有無で通信経路が変わることが原因でした。 goofysのオプションで明示的にリージョンを指定せず、インターネットGWを利用して通信しようとしたため、マウントできませんでした。 [AWS] VPC Endpoint で S3 にアクセスするときはリージョン指定に注意が必要な件
- 同一のS3リージョンを明示的に指定:VPC Endpoint利用可能
- 異なるS3リージョンを明示的に指定:VPC Endpointを利用しない(Internet Gatewayを利用する)
- S3のリージョンを明示的に指定しない:VPC Endpointを利用しない(Internet Gatewayを利用する)
解決方法は?
goofysでS3バケットをマウントする際に、明示的にリージョンを指定するようにオプション--region=ap-northeast-1
を追加します。
以下は、インスタンス起動時に自動でマウントする場合を想定し、/etc/fstab
への記載例を示しています。
$ cat /etc/fstab /root/go/bin/goofys#testbucket /mnt/testbucket fuse _netdev,allow_other,--dir-mode=0775,--file-mode=0666,--uid=1000,--gid=1000,--region=ap-northeast-1 0 0
おわりに
本エントリが誰かの役に立てれば幸いです。