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をやってみるべきですね