CloudFrontのオリジンパスとパスルールがごっちゃになったのでメモ
オリジンパスもパスルールも値としてパスを指定するので、
初見だとどっちがどっちかごっちゃになっちゃったので備忘録として
- 前提:
-
static
というバケット内にphoto1.jpg
というアクセスさせたい静的ファイルを配置 - URLの末尾が /* (デフォルト)の場合 : LBのオリジンに割り振りたい
- URLの末尾が /images/*の場合 : 静的ファイルを保存したS3バケットのオリジンに割り振りたい
-
正解
- パスルールを/images/*に設定して、オリジンパスは空白にする
- staticバケット内には
images
というフォルダを作成して、その中にphoto1.jpg
ファイルを配置する
以下勘違いによる失敗談
オリジンパスがパスルールだと勘違いしていた
オリジンパスを設定したところでアクセス先オリジンを割り振りしてくれるわけではないのに、
パスルールと勘違いしてこっちだけ設定してたパターン
images/*
のルールでs3://static/photo1.jpg
にアクセスさせたいので、
オリジンパスを/images
とする
パス自体はhttps://example.com/images/photo1.jpg
にはなる
しかし、パスルールが設定されていないので、このリクエストはLBのオリジンに行っちゃうのでNG
移行前で、LB配下のウェブフロント側に同名のディレクトリがあると表示されちゃうから気づきにくいかもしれない
バケット名がURLに入ると勘違いしていた
バケット名がURLに出てくることはないけど、
S3関連はバケット名から指定するものだという偏見があったパターン
images/*
のルールでphoto1.jpg
にアクセスさせたいので、
images
というバケットを作ろう!
→S3バケットは一意じゃないといけないのでこんなありふれた名前では作成できないのでNG
パスルールで指定したパスはS3のバケット内の構造と無関係と思っていた
このパターンが一番多いかもしれない
images/*
で パスルールを設定しているから、 https://example.com/images/photo1.jpg
のアクセスは
s3://static/photo1.jpg
に行くはず!
→/images/photo1.jpg と指定した場合、 static
バケット内のimages/photo1.jpg
を見に行くので、そんなファイルはないと判断されてNG
→つまり、s3://static/images/photo1.jpg
とするのが正解
おわりに
一回理解してしまえばなんでこんな単純なことを勘違いしていたんだろうかと思いますね、、
初めて使うサービスは落ち着いてGettingStarted
をやってみるべきですね