概要
AWSが提供しているマネージドCDNサービス Qudenでは、S3に配置している動画・サムネイルなどを配信する際に利用している
Qudenでの利用方法
S3の構成
S3のディレクトリごとにビヘイビアを設定し、アクセス制限をかけているため、まずはS3にどのようにオブジェクトを配置しているか見ていく
├── thumbnail
│ ├── <userId>
│ │ ├── <itemId>
│ │ │ ├── (ビデオメッセージのサムネイル)
│ │ │ ├── (ビデオメッセージ/ステップガイドのGIFサムネイル)
│ │ │ ├── cover
│ │ │ │ ├── (ステップガイドのサムネイル)
│ │ │ ├── edited
│ │ │ │ ├── (トリムされた動画、編集されたステップガイドのサムネイル)
│ │ │ │ ├── (トリムされた動画、編集されたステップガイドのGIFサムネイル)
│ │ └── (ユーザーアイコンとして登録した画像)
├── public
│ └── (Qudenロゴなど、パブリックかつユーザーに依存しないリソース)
├── raw-data
│ ├── <userId>
│ │ ├── <itemId>
│ │ │ ├── (mp4, webmなどの動画関連ファイル)
│ │ │ ├── screenshots
│ │ │ │ ├── (ステップガイド用に撮影されたスクリーンショット)
│ │ │ ├── drawn
│ │ │ │ ├── (ステップガイドの各ステップの画像)
│ │ │ ├── edited
│ │ │ │ ├── (トリムされた動画、編集されたステップガイドなどのリソース)
│ └── エンジニアチーム※ userId, itemId などはmongoのObjectIdを使用している
CloudFrontのビヘイビア設定
上にあるビヘイビアが優先される仕様になっている 最新の設定はTerraformの設定を参照
/thumbnail/????????????????????????/????????????????????????/*
- アクセス制限あり。signed Cookie なしではアクセスできない
- サムネイル・GIFサムネイルに対してのみアクセス制限をかけたいので、無理やり
?の数を mongo ObjectId の文字数に合わせている
/thumbnail/*
- アクセス制限なし。URLを知っていれば誰でもアクセスできる
- 現状では登録したユーザーアイコンの画像しか該当しない
/public/*
- アクセス制限なし
- デフォルト
- アクセス制限あり。
- 動画などが該当
IP アドレス制限
cloudFrontでのアクセス制限のほか、Lambda@Edgeを使ってS3のリソースに対してIPアドレス制限をかけている。 詳しくは、IPアドレス制限を参照
将来的に直したいポイント
- ユーザーアイコン置き場
thumbnail配下に置いてあることで、CloudFrontのビヘイビアが複雑になっている/profile-images/<userId>みたいに変更する?- サムネイルに関係ないので、可読性的にも微妙