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

おわりに

本エントリが誰かの役に立てれば幸いです。