LoginSignup
3
0

More than 1 year has passed since last update.

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

Posted at

はじめに

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文字以上の文字、なので、区切りとして想定されている / を含むため、このような挙動になっている。

3
0
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
  3. You can use dark theme
What you can do with signing up
3
0