LoginSignup
0
0

More than 1 year has passed since last update.

AWSのLambdaに関数を作成する:S3を更新したとき、キャッシュクリアを自動で行う

Posted at

AWSのS3を更新した際にCloudFrontのキャッシュクリアを自動で行う関数をLambdaに作成します。

Lambdaとは
AWSの公式ドキュメントによると「サーバーをプロビジョニングまたは管理せずにコードを実行できるようにするコンピューティングサービス」とあります。
要約すると、AWSの他のサービスをトリガーとしてクラウド上に定義したプログラムを実行するようにできるサービスです。
今回は「S3の更新」がトリガー、「CloudFrontのキャッシュのクリア」がプログラム(関数)になります。

以下、作業の流れを記述します。

1.AWSのLambdaに移動し、「関数の作成」をクリック
スクリーンショット (168).png

2.関数の情報を入力します。今回は関数名を「remove-cache」とします。今回関数はPythonで記述しますのでランタイムは「Python3.9」を選択し、アーキテクチャは「arm64」を選択します。
スクリーンショット (169).png

3.まだ何も設定されていない関数ができます。左にある「トリガーを追加」をクリックします。
スクリーンショット (170).jpg

4.S3を選択し、自動キャッシュクリアを適用したいバケットを入力します。イベントタイプは「すべてのオブジェクト作成イベント」を選択します。その他の項目はそのままで、最下部のチェックボックスにチェックを入れ「追加」をクリックします。
スクリーンショット (171).png

5.S3と関数の紐づけができました。
スクリーンショット (172).jpg

6.ページ下部のタブから「設定」を開き、「ロール名」のリンクをクリックします。
スクリーンショット (173).jpg

7.「CloudFrontFullAccess」を選択します。これで関数のロールにポリシーがアタッチされ、関数がS3を参照できるようになります。
スクリーンショット (174).png

8.Lambdaに戻り、「コード」のタブからキャッシュクリアのコードを記述します。【対象のディストリビューションID】は、CloudFrontで確認してください。
スクリーンショット (175).png

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/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0