AWSのS3を更新した際にCloudFrontのキャッシュクリアを自動で行う関数をLambdaに作成します。
Lambdaとは
AWSの公式ドキュメントによると「サーバーをプロビジョニングまたは管理せずにコードを実行できるようにするコンピューティングサービス」とあります。
要約すると、AWSの他のサービスをトリガーとしてクラウド上に定義したプログラムを実行するようにできるサービスです。
今回は「S3の更新」がトリガー、「CloudFrontのキャッシュのクリア」がプログラム(関数)になります。
以下、作業の流れを記述します。
2.関数の情報を入力します。今回は関数名を「remove-cache」とします。今回関数はPythonで記述しますのでランタイムは「Python3.9」を選択し、アーキテクチャは「arm64」を選択します。
3.まだ何も設定されていない関数ができます。左にある「トリガーを追加」をクリックします。
4.S3を選択し、自動キャッシュクリアを適用したいバケットを入力します。イベントタイプは「すべてのオブジェクト作成イベント」を選択します。その他の項目はそのままで、最下部のチェックボックスにチェックを入れ「追加」をクリックします。
6.ページ下部のタブから「設定」を開き、「ロール名」のリンクをクリックします。
7.「CloudFrontFullAccess」を選択します。これで関数のロールにポリシーがアタッチされ、関数がS3を参照できるようになります。
8.Lambdaに戻り、「コード」のタブからキャッシュクリアのコードを記述します。【対象のディストリビューションID】は、CloudFrontで確認してください。
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())
})
9.「Test」をクリックし、正常に動作すると「Execution results」が作成されます。CloudFrontでもキャッシュクリアが行われたことが確認できます。
実際にS3を更新してみても同じくキャッシュクリアが確認できれば成功です。(CloudFront>ディストリビューション>ディストリビューションID内の「キャッシュ削除」タブから確認できます。)
上記を適用したサイト
https://www.owl-light.net/