LoginSignup
0

posted at

CloudFront Behavior の後方一致パスパターンにおける挙動確認

はじめに

CloudFront の Behavior でパスパターン文字のワイルドカードとして以下が使える。

  • * は、0 個以上の文字に一致します。
  • ? は、正確に 1 個の文字に一致します。

一般的な利用では、先頭固定でパスを取る (例: /static/ 以下に静的リソースを配置する。 /docs/ 以下に記事コンテンツを配置する) と思うが、アプリケーションの作り上、途中に特定パスが入るようなケース (例: 途中にディレクトリ css を含む全てのパスを対象にしたい時など) を CloudFront のパスパターンとして利用可能かを調査した。

実験内容と結果

Behavior の登録は可能か?

  1. パスパターンとして /*/css/* を CloudFront の Behavior に登録する (1)
  2. パスパターンとして /*/*/css/* を CloudFront の Behavior に登録する (2)

結果: 共に登録可能 。 独自の挙動を設定できる。

どの Behavior にマッチするか?

CloudFront の Behavior の設定は以下の通りとする。
/*/css/*/*/*/css/* を含むルールなので、優先度はこのような順として設定している。

No. 優先度 パスパターン
1 0 /*/*/css/*
2 1 /*/css/*
3 2 * (デフォルト)

準備したファイル構造は以下の通り。 この時、アクセスによってどのようなパターンにマッチするかを確認する。

準備したファイル構造
$ tree
.
├── css
│   ├── dir3
│   │   └── ok.txt
│   └── ok.txt
├── dir1
│   ├── css
│   │   ├── dir3
│   │   │   └── ok.txt
│   │   └── ok.txt
│   ├── dir2
│   │   ├── css
│   │   │   ├── dir3
│   │   │   │   └── ok.txt
│   │   │   └── ok.txt
│   │   ├── dir3
│   │   │   ├── css
│   │   │   │   └── ok.txt
│   │   │   └── ok.txt
│   │   └── ok.txt
│   └── ok.txt
└── ok.txt

検証結果は以下の通り。

URI 一致した Behavior No.
/ok.txt 3 (Default)
/css/ok.txt 3 (Default)
/css/dir3/ok.txt 3 (Default)
/dir1/ok.txt 3 (Default)
/dir1/css/ok.txt 2 ( /*/css/* )
/dir1/css/dir3/ok.txt 2 ( /*/css/* )
/dir1/dir2/ok.txt 3 (Default)
/dir1/dir2/dir3/ok.txt 3 (Default)
/dir1/dir2/css/ok.txt 1 ( /*/*/css/* )
/dir1/dir2/css/dir3/ok.txt 1 ( /*/*/css/* )
/dir1/dir2/dir3/css/ok.txt 1 ( /*/*/css/* )

最初に提示したワイルドカードルールに従った Behavior が選ばれていることが分かる(複数にマッチする場合は、最初にマッチした優先度のもの)。

ほとんど直感的な動作になっているが / による層を期待しているような場合(例えば表の最後のケース)にだけ直感的な動きになっていない点に注意。
* が単に0文字以上の文字、なので、区切りとして想定されている / を含むため、このような挙動になっている。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0