概要
本記事は AWSでWebアプリを構築してみる シリーズの4回目の記事です。
前回の記事はこちら。
今回は番外編として、CloudFrontのキャッシュ削除を自動化してみます。
キャッシュ削除を自動化する理由
開発しているときに、サイトを更新したのにCloudFrontのキャッシュにより内容が反映されるまで時間がかかってしまったり、手動でキャッシュを削除したりすることが手間に感じることがありました。
この問題を解消するためにCloudFrontのキャッシュ削除を自動化し、それにより開発効率の向上を狙います。
CloudFrontのキャッシュ削除を自動化してみる
1. CloudFrontでキャッシュ削除を作成
-
静的ウェブサイトホスティングにCloudFrontを経由してアクセスしてみるで作成したCloudFrontのディストリビューションを開き、キャッシュ削除タブから「キャッシュ削除を作成」をクリック
-
オブジェクトパスを追加で「/*」としてすべての領域をキャッシュ削除するように設定する
2. Lambdaを設定する
-
マネジメントコンソールからLambdaを開き、「関数の作成」をクリック
-
「一から作成」を選択し、関数名に任意の関数名を入力し、ランタイムに「Python 3.X」を選択して、関数を作成する
-
作成した関数で「トリガーの追加」ボタンをクリックし、「ソースの選択」で「S3」を選択し、「Bucket」に静的ウェブサイトホスティングでホスティングしてみるで作成したバケットを選択して、「Event Types」で「All object create events」を選択して、トリガーを追加する
-
作成した関数で設定タブのアクセス権限より、実行ロールのロール名にあるリンクをクリックし、許可タブより「許可を追加」をクリックし、「ポリシーをアタッチ」をクリックし、その他の許可ポリシーで「CloudFront」で検索をかけて、「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()) })
3. キャッシュ削除の自動化の確認
-
静的ウェブサイトホスティングでホスティングしてみるで行った手順と同様にバケットのindex.htmlの中身をわずかに変更する
-
ディストリビューションへアクセスし、更新内容が反映されていることを確認する