S3のuploadでCloudFrontのキャッシュをクリアする


やりたいこと

S3のファイルを 更新 / 削除 したら、CloudFrontのキャッシュを消す

手順

Lambdaを作成する

コード例

var AWS = require('aws-sdk');
var cf = new AWS.CloudFront();

var distributionId = ' < CloudFront Distribution ID > ';

exports.handler = async (event, context) => {
  var timestamp = new Date().getTime().toString();

  var paths = {
    Quantity: 1,
    Items: ['/' + event.Records[0].s3.object.key],
  };

  var params = {
    DistributionId: distributionId,
    InvalidationBatch: {
      CallerReference: timestamp,    // 一意な値を用意するため現在時刻にしている
      Paths: paths,
    }
  };

  await cf.createInvalidation(params).promise();
  console.log('invalidate: ' + paths.Items[0]);
  return;
};

トリガーにS3を追加する

以下の設定でS3に追加する

  • バケット: 対象のバケットを選択
  • イベントタイプ: PUT
  • プレフィックス: 空
  • サフィックス: 空