はじめに
S3にアップロードした画像や動画は、CloudFront側で自動で検知して更新を反映してくれないので、いつまでもキャッシュされた古いデータを見てしまうということが起こり得る。
そのため、CloudFront側でキャッシュを削除する必要がある。これをLambdaでスケジューリング実行する。一応手動実行の方法も記載しておきます。
CloudFrontのキャッシュ削除(手動実行)
手動実行でキャッシュを削除する方法は以下
CloudFrontのキャッシュ削除(Lambda)
Lambda実行でキャッシュを削除する方法は以下
Lambda関数の作成
- 関数名:remove-cache
- ランタイム:Python3.9
- アーキテクチャ:arm(x86でも可)
- ロール:「CloudFrontFullAccess」のポリシーがアタッチされたロールを設定
- 関数の処理を設定
from __future__ import print_function
import boto3
import time
def lambda_handler(event, context):
client = boto3.client('cloudfront')
invalidation = client.create_invalidation(DistributionId='【ディストリビューションID】',
InvalidationBatch={
'Paths': {
'Quantity': 1,
'Items': ['/*'] // ファイルパス指定
},
'CallerReference': str(time.time())
})
- トリガー(EventBridge CloudWatch)
何をトリガーにするかは要件による。S3にオブジェクトが置かれたことをトリガーにして、実行するもよし。
スケジュール式はcronまたはrate式を使って、スケジュールを設定する。UTCでもローカルタイムでも設定可能。
まとめ
キャッシュを頻繁に削除する場合は、上記の手動工程をいちいち行わなければいけない。そこでLambdaのスケジュール実行を行うと自動化できる。