人とはちょっと違うことをやるのがすごく好き。

仕事(主にインフラ系のエンジニア)と家族(主にトイプードル)と趣味(主にバドミントン)について感じたことや、勉強したことなどを自分のメモ&誰かの参考になるかもしれないと思って書きます。

AWSのS3にてファイルが作成/削除されたときに自動でCloudFrontのキャッシュを消す(応用)

 

 

AWSのS3にてファイルが作成/削除されたときに自動でCloudFrontのキャッシュを消すってやり方自体はほかのブログなどでも紹介されていますが、私がやりたかったの単純にファイルのオブジェクトを消すだけじゃなくて「https://hogehoge.com/index.htmlが更新されたらhttps://hogehoge.com/も消す」ってことでした。

 

詳しくはこちら↓

rn4ru.com

 

あとS3へのアクセスをCloudfrontだけに制限したかったのでこちらなども参考にしました。

christina04.hatenablog.com

 

で、つまりはこういうことです。

・index.htmlが更新・削除されたら/のキャッシュも消す

・それ以外(画像とかCSSとか)だったらそのファイルだけのキャッシュを消す

 

で、まずはこちらのサイトからコードを拝借。

cluex-developers.hateblo.jp

 

拝借したコードに手を加えたのがこちら。

 

 

from __future__ import print_function

import boto3
import time
import re

def lambda_handler(event, context):
    for items in event["Records"]:
        FILE = "/" + items["s3"]["object"]["key"]
    LIST=[FILE]
    if "index.html" in FILE:
        pattern = "(.*)index.html(.*)"
        PATH = re.search(pattern, FILE)
        LIST.append(PATH.group(1))
    for path in LIST:
        print(path)
        client = boto3.client('cloudfront')
        invalidation = client.create_invalidation(DistributionId='CloudFrontのID',
            InvalidationBatch={
                'Paths': {
                    'Quantity': 1,
                    'Items': [path]
                },
                'CallerReference': str(time.time())
            })