CloudFront Behaviors の Pattern Path と S3 Path の関係

More than 1 year has passed since last update.

定期的にはまる Amazon CloudFront のパス関連のメモ。

現在 Amazon CloudFront では、Behaviors を設定することで、拡張子やパスに応じたキャッシュコントロールを実現できます。

このとき、複数オリジン + 複数 Behaviors の(path pattern)設定を行うことで、


  • /aaa/* の場合は s3.yourBucketAAA を参照

  • /bbb/* の場合は s3.yourBUcketBBB を参照

といったように、複数の S3 Origin を使い分けることも可能です。


本題 : path pattertn も S3 の パス に含まれる

path pattern、S3 Origin ID、実際に参照される S3 の パス の対応表は下記のとおりです。

path pattern
S3 Origin ID
実際に参照される S3 の パス

/aaa/*
S3-yourbucket/aaa
s3.yourbucket/aaa/aaa

/aaa/*
S3-yourbucket/
s3.yourbucket/aaa/

/bbb/*
S3-yourbucket/
s3.yourbucket/bbb/

/bbb/*
S3-yourbucket/aaa
s3.yourbucket/aaa/bbb/

直感的には、 path pattern /aaa/* に S3 Origin ID S3-yourbucket/aaa を紐付けると、s3.yourbucket/aaa/ を参照するかなぁと思ったのですがそうはなりません。

path pattern でディレクトリを指定する場合、S3 上のパスと協調させておく必要があります。したがって、ディレクトリ名の Alias 的な使いかたはできません。Alias 的な使い方とは、path pattern に /static/* を指定し、実際には S3の s3.yourbucket/img/ を参照させる、などです。

S3側の Redirection Rules でやればいいのではという感じもしますが、CloudFront からのアクセスで Redirection Rules を有効にするには S3 Origin は指定出来ない制約がある1 ため、ニーズによっては対応できないケースもあると思います。

元々、Behaviors は キャッシュコントロールを行うための機構で、URLのパスと Origin を関連付ける機能はあくまで副次的なものであるために若干融通が利かないのかなぁと想像しています。