【CloudFront】S3で更新した内容をすぐに反映させたい!キャッシュクリアの方法

  • 2021年3月16日
  • AWS, IT
AWS

こんにちはますのです。
最近はCloudFront検証にどっぷり浸かっております。検証の嵐です。

Web開発やWebアプリのことは分からないけど頑張ってます。これからも頑張ります。

さてさて、Amazon S3に保存されているオブジェクトを配信するためにCloudFrontを利用しています。

今回の検証ではS3のメタデータ編集(Content-TypeやContent-Cncode等の付与)を行い、何度もS3のデータを更新していたのです。しかし、検証するもデータは一切更新されず。
設定が間違えているのかキャッシュなのか良く分からなくなる始末。

CloudFrontの仕様をみたところ、S3オブジェクトのキャッシュは24時間保持しているようです。
「24時間」待てはさすがに検証で時間が進まない…。

デフォルトでは、CloudFront は Amazon S3 からのレスポンスを 24 時間 (86,400 秒間のデフォルト TTL) キャッシュしています。リクエストが エッジロケーションに到着してから24 時間以内に Amazon S3 を提供した場合、Amazon S3 のコンテンツを更新したとしても、CloudFront はキャッシュされたレスポンスを使います。
引用:CloudFront が、Amazon S3 から古いコンテンツを提供し続けるのはなぜですか?

ということでキャッシュクリアの方法を調べましたので備忘録です。

CloudFrontのキャッシュをクリアする際は「Invalidation」を設定する

今回参考にさせていただいた記事はこちら。
[AWS] Amazon CloudFrontのキャッシュ削除(Invalidation)

「Invalidation」を直訳すると「無効化」とGoogle翻訳さんに教えてもらいました。

では早速「Invalidation」を設定してCloudFrontのキャッシュ削除を試してみたいと思います。

Invalidationsを作成する

それではキャッシュクリア設定をしてきましょう。

AWS管理コンソール>CloudFront>対象のDistributionsを選択>タブ:Invalidationsをクリック>「Create Incalidation」をクリック

「Object Paths」にキャッシュクリアをしたいS3オブジェクトのパスを指定

今回の画像内では「/*」としています。
対象のS3バケット内全てのキャッシュクリアを実施する結果が得られます。

データを指定したい場合や階層を下げたい場合はデータを指定して設定も可能なようです。
「/index.html」
「/content/*」

キャッシュクリアを実行すると「Status」の値が変化します。
「Status:In Progress」→「Completed」になればキャッシュの削除が完了となります。

「Invalidation」の実行回数に注意!料金が発生する場合も。

これでキャッシュクリアできるから検証し放題!

とはいきません。やり過ぎると料金が発生するようです。

1 か月に送信した無効化パスのうち、最初の 1000 件は無料です。1 か月に 1000 件を超えると、無効化パス 1 件ごとに支払いが発生します。無効なパスは 1 つのファイル (/images/logo.jpg など) に対して、または複数のファイル (/images/*) に対して発生する場合があります。CloudFront が無数のファイルを無効にした場合でも、ワイルドカード * は 1 つのパスとして含まれます。

1 つの AWS アカウントで作成するすべてのディストリビューションの無効化パスの合計数に対して適用されます。
CloudFront:ファイルの無効化に対する支払い

  • 1つのAWSアカウントの合計回数が合算される。(CloudFrontのディストリビューション毎ではないよ)
  • 「/*」で1つのパス、「images/logo.jpg」「images/logo2.jpg」で2つのパスと計算される。

2016年の記事ですがGMOさんのTECH記事で怖いものを見てしまったので、設定するのにびびってしまいました。料金が発生するということを頭の片隅に入れておきましょう。
AmazonCloudFrontのInvaridation機能で20万円ぶっ飛ばした話

最近は現場が変わったこともあり、APIGatewayやCloudFront、Lambdaなどを触る機会が増えてきました。
今までは社内SE的な内容が多かったのですが、Web開発寄りの内容も少しずつ取り入れていくことになりそうです。
色んな案件に触れるのはSESのメリットでございます。
最新情報をチェックしよう!