静的ファイルのパブリッシュ・削除と連動して AWS CloudFront のキャッシュを無効化します。
AWS_S3プラグインと併用が可能です。AWS_S3プラグインと併用する場合、ファイルの更新・削除後に S3へ同期、その後にキャッシュを無効化リクエストを送信します。
このプラグインは PowerCMS X ver.2.6 以上が必要です。
月間 1,000 パス以上の無効化リクエストには料金が発生します。予算に上限のある場合、「無効化リクエストの送信数を減らすために」の内容に従い適切に設定を行ってください。
このプラグインによって無効化リクエストが送信されるのは PowerCMS X によって出力・削除されたファイルに対してのみとなります。FTPなどで直接設置・削除したファイルは対象外となります。
また、パラメタ付きURLについては「ルート相対パスとパージ対象パスのマッピング」設定によりクリアできる場合を除き無効化対象とはなりません。
スコープの設定で「リンクURL」に CloudFrontのURLを入力して、「」にチェックを入れて設定を保存すると、管理画面にリンクが追加されます。
AWS SDK for PHP をインストールします。パスは include_path の配下であればどこでも構いません(autoload.phpのパスを環境変数 composer_autoload に指定します)。
$ composer require aws/aws-sdk-php
AWS_CloudFrontプラグイン用の環境変数を指定します。config.jsonに記述する場合は、Web経由で config.jsonにアクセスできないように制限をかけてください。
"aws_cloudfront_api_version": "2019-03-26",
"aws_cloudfront_api_interval" : 1000,
"aws_cloudfront_bulk_per" : 100,
"aws_cloudfront_queue_delay" : 900,
"aws_cloudfront_maxpurge_per_once" : 15,
"aws_cloudfront_maxpurge_per_month" : 1000,
"aws_cloudfront_realtime_purge": false,
"aws_cloudfront_purge_dynamic" : true,
"aws_cloudfront_purge_directry_without_slash" : false,
"aws_cloudfront_inherit_S3_extensions" : true
※ 「composer_autoload」の指定がないとプラグインを有効化できません。
※ 環境変数「denied_exts」に指定されている拡張子は 環境変数「denied_exts」の初期値 別ウィンドウで開きます でご確認ください。 ※「aws_cloudfront_realtime_purge」指定のある時も、実際の処理は __destruct (非同期処理を含むすべての処理が行われた後) に実行されるため、多少のタイムラグが生じます。
※「AWS_S3」をあわせて利用している時、「aws_cloudfront_realtime_purge」指定のある時も、キューによって S3に同期するファイルに対するキャッシュのパージは同期時点で行われます。
※「AWS_S3」をあわせて利用している時、「aws_s3_exclude_exts」または「denied_exts」指定の拡張子のファイル更新は無視されます。
※ 「aws_cloudfront_maxpurge_per_month」に対する月間の無効化リクエスト数については、ログから算出します。ログが削除されているとコール数の算出が不正確になりますのでご注意ください。また、実際の利用状況と月間の無効化リクエスト数が異なることがありますので、正確な利用状況は必ず AWSのコンソール 別ウィンドウで開きます で確認してください。
プラグインを有効化し、設定を行います。プラグイン設定は、システム、スペースなどのスコープごとに設定します。
task_ids に「aws_cloudfront_purge_cache」を指定して worker.php を実行することで、すべてのキャッシュに対する無効化リクエストを送信します。
$ cd /path/to/PowerCMSX; sudo -u apache php ./tools/worker.php --verbose --task_ids aws_cloudfront_purge_cache
Amazon CloudFrontの無効リクエストの利用料金については AWSのドキュメントを参照ください。
1か月に最初の 1,000 件の無効化パスを送信するのは無料です。それ以降は、無効化要求されたパスごとに 0.005 USD が課金されます。(2023年4月現在)
環境変数「aws_cloudfront_maxpurge_per_month」に「-1」を指定すると、上限なく無効化リクエストを送信します。
「aws_cloudfront_realtime_purge」を指定すると、キャッシュパージまでの時間が最も短くなります。常に最新の情報を返す必要のあるケースで指定してください。
以下に、無効化リクエストの数を減らして料金が想定外にかからないための設定や運用方法について説明します。
※「aws_cloudfront_maxpurge_per_month」に対する月間の無効化リクエスト数はプラグイン設定画面で確認できます。ただし、この数字については、ログから算出します。ログが削除されているとコール数の算出が不正確になりますのでご注意ください。また、実際の利用状況と月間の無効化リクエスト数が異なることがありますので、正確な利用状況は必ず AWSのコンソール 別ウィンドウで開きます で確認してください。
個別のコンテンツを無効化リクエストから除外するのであれば、たとえば「/contents/*」「/articles/*」などのようにワイルドカードを使ってディレクトリ配下のコンテンツを除外します。 「.php$」のように指定すると拡張子の除外設定も可能です。
除外するURLマップのIDをカンマ区切りで指定します。単一コンテンツの更新時にトリガーなどにより多くのファイルが更新される時、日付アーカイブやトップページ以外の一覧系のページなど比較的アクセスの少ないページに指定するとよいでしょう。
「除外パス」の代わりに「ルート相対パスとパージ対象パスのマッピング」にワイルドカード付きのパスを指定することで、無効化リクエストをまとめることができます。 例えば、カンマで区切らずに単に「/articles/*」のように指定すると、「/articles/2021/09/entry1.html」「/articles/2021/09/entry2.html」が同時に更新された時も無効化リクエストは「/articles/*」の 1つだけ作成されます。
最も極端な例では「/*」のみ設定すれば、コンテンツの更新があったたびに更新ファイルの数にかかわらず 1リクエストのみが作成されます。
コンテンツの更新などでまとまった作業を行うときは「ファイル更新時」「ファイル削除時」のチェックを外しておき、作業が終わったところで、「/*」パスを指定して無効化することで無効化リクエストをまとめることができます。
環境変数「aws_cloudfront_queue_delay」でキューの実行開始までの待ち時間を秒で指定します。初期値は 1800(30分)です。この間に同一ファイルが更新された場合、そのファイルのパージのための無効化リクエストは1回で済みます。
この環境変数を「3600」などと長くすることで、同一ファイルが頻繁に更新される時の無効化リクエストの回数を減らすことができます。
「/dirname/index.html」が更新された時「/dirname/」のキャッシュのみを無効化し「/dirname/index.html」については無効化を行わないことでリクエスト数を減らします。
環境変数「aws_cloudfront_maxpurge_per_once」の指定数を超える無効化リクエストは「/*」にまとめられます。初期値は「15」です。この数字を小さくすることで無効化リクエストの発行回数を減らすことができます。
※ いずれにしても、無効化リクエストの発行回数とリアルタイムに確実にキャッシュをコントロールすることは相反する要求事項となりますので、コストと効果のバランスを見ながら各パラメタを設定してください。
※ AWS、Amazon S3 および CloudFront は、AWS の米国およびその他の国における登録商標です。