はじめに
お疲れ様です。矢儀 @yuki_ink です。
S3 ファイルゲートウェイ、使ってますか??
S3 ファイルゲートウェイは、S3の存在を隠蔽して(S3を意識することなく)SMBでファイルサーバのようにS3にアクセスできる非常に便利なツールです。
が、S3を意識しなくていいために、ファイルゲートウェイを作って使い始めたあとに、S3側の状況がどうなっているか確認することはないと思います(私だけ??)
ということで、今回はファイルゲートウェイの裏側のS3がどのようになっているか見ていきます。
なお、今回は以下の記事で作ったファイルゲートウェイの環境を流用して検証を行います。
先に結論
- ファイルゲートウェイ上のフォルダ階層は、そのままマネジメントコンソールのS3画面上でも「フォルダ」として表示される
- フォルダ階層は
/
で表現される - オブジェクトのS3 URIはこんな感じになる
s3://(バケット名)/(フォルダ名)/(ファイル名)
- オブジェクトのARNはこんな感じになる
arn:aws:s3:::(バケット名)/(フォルダ名)/(ファイル名)
何も想像を裏切らない!!!!!w
やってみた
今回確認したいのは以下の2点です。
- フォルダ階層を作ったときに、フォルダとファイルがS3側でどのように扱われるか
- 日本語のフォルダ・ファイルは、S3側でどのように扱われるか
ファイルゲートウェイでフォルダ階層を作る
Windowsでファイルゲートウェイをマウントして(ドライブレター:Y)、Exploreから手動で以下のフォルダ構造を作りました。
Y:\
│ text1.txt
│ 日本語1.txt
│
├───folder1
│ │ text2.txt
│ │ 日本語2.txt
│ │
│ └───foleder2
│ text3.txt
│ 日本語3.txt
│
└───日本語
text4.txt
日本語4.txt
S3 側の状況を見てみる
ファイルゲートウェイと紐づくS3バケットを見てみます!
folder1
に潜ってみると、こんな感じ。これもExploreでの見た目と完全一致です。
text3.txt
のS3 URIとAmazon リソースネーム (ARN)は以下の通りでした。
- S3 URI:
s3://standard-bucket-for-storage-gateway/folder1/foleder2/text3.txt
- ARN:
arn:aws:s3:::standard-bucket-for-storage-gateway/folder1/foleder2/text3.txt
ここから、フォルダ階層が /
で表現されていることが分かります。
日本語のフォルダ、ファイルも同様でした。
日本語3.txt
のS3 URIとAmazon リソースネーム (ARN)は以下の通りでした。
- S3 URI:
s3://standard-bucket-for-storage-gateway/folder1/foleder2/日本語3.txt
- ARN:
arn:aws:s3:::standard-bucket-for-storage-gateway/folder1/foleder2/日本語3.txt
また、日本語のフォルダ配下のファイルは、マネジメントコンソール上ではこのように表示されました。
日本語4.txt
のS3 URIとAmazon リソースネーム (ARN)は以下の通りでした。
- S3 URI:
s3://standard-bucket-for-storage-gateway/日本語/日本語4.txt
- ARN:
arn:aws:s3:::standard-bucket-for-storage-gateway/日本語/日本語4.txt
※オブジェクトURLの表記はさすがにエンコードされていますねw
というわけで結論ですが、
- ファイルゲートウェイ上のフォルダ階層は、そのままマネジメントコンソールのS3画面上でも「フォルダ」として表示される
- フォルダ階層は
/
で表現される - オブジェクトのS3 URIはこんな感じになる
s3://(バケット名)/(フォルダ名)/(ファイル名)
- オブジェクトのARNはこんな感じになる
arn:aws:s3:::(バケット名)/(フォルダ名)/(ファイル名)
終わりに
まったく想像を裏切らない結果となりましたww
この結果が得られて何がうれしいかといえば、
例えば、「ファイルゲートウェイの○○フォルダにCSVファイルを置いたら、S3イベント通知でLambdaがキックされ、CSVが加工され、加工されたファイルが××フォルダに格納される」というようなことが、感覚的に容易に実装できます。
(参考)S3 バケットに csv ファイルがアップロードされたら Lambda を動かしてみる
▼S3イベント通知でプレフィックスを設定すれば、特定のフォルダを指すことができます
最後までお読みいただき、ありがとうございました!