🍣

【AWS】lambdaでCloudFrontのキャッシュを削除する方法

2022/10/15に公開

はじめに

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のスケジュール実行を行うと自動化できる。

Discussion