AWS Lambda と Fastly instant purge を利用して S3 コンテンツの更新を即時反映する

Fastly CDN の特徴のひとつに、Instant purge(コンテンツの即時削除)があります。通常、CDN では更新の多いコンテンツはキャッシュすることができませんが、Fastly では Purge を即座に行うことが可能であるため、更新の多いコンテンツでもキャッシュすることが可能です。
ただし、コンテンツが変更されるたびに Instant purge を手動で行うのは理想的な運用とはいえません。ここでは AWS Lambda を利用して、S3 でのファイル更新を検知して、自動的に Instant purge を実行する方法を紹介します。

AWS Lambda と Fastly instant purge を利用して S3 コンテンツの更新を即時反映する

  • Name / Description を入力し、Runtime はデフォルトの Node.js を選択します。 AWS Lambda と Fastly instant purge を利用して S3 コンテンツの更新を即時反映する
  • Code は下記のように設定します。hostname を Instant purge を行うドメインに変更してください。 下記のコードでは、アップデートされたパスを key に格納し、options にドメイン、ポート番号、method(purge のため、PURGE) と共に設定し、http.request で Instant purge のリクエストを送信しています。
  • console.log('Loading event');
    var aws = require('aws-sdk');
    var s3 = new aws.S3({apiVersion: '2006-03-01'});
    var http = require('http');
    
    exports.handler = function(event, context) {
       console.log('Received event:');
       console.log(JSON.stringify(event, null, '  '));
       // Get the object from the event and show its content type
       const bucket = event.Records[0].s3.bucket.name;
       const key = event.Records[0].s3.object.key;
       s3.getObject({Bucket:bucket, Key:key},
          function(err,data) {
            if (err) {
               console.log('error getting object ' + key + ' from bucket ' + bucket +
                   '. Make sure they exist and your bucket is in the same region as this function.');
               context.done('error','error getting file'+err);
            }
            else {
               console.log('CONTENT TYPE:' + data.ContentType + ' bucket: ' + bucket + ' path: ' + key);
               context.done(null,'');
            }
          }
       );
    
      var options = {
        hostname: 'www.example.com',
        port: 80,
        path: '/' + key,
        method: 'PURGE',
      };
    
      callback = function(response) {
      var str = '';
    
        //another chunk of data has been recieved, so append it to `str`
        response.on('data', function (chunk) {
          str += chunk;
        });
    
        //the whole response has been recieved, so we just print it out here
        response.on('end', function () {
          console.log(options.hostname + ':' + options.port + options.path + ' method:' + options.method);
          console.log(str);
        });
      }
    
      http.request(options, callback).end();
    };
    

    6 . Role は Choose an existing role を選択し、Existing role を選択します。
    AWS Lambda と Fastly instant purge を利用して S3 コンテンツの更新を即時反映する

    以上で設定は完了です。

    AWS Lambda と Fastly instant purge を利用して S3 コンテンツの更新を即時反映する

    カテゴリ:Default 時間:2017-07-19 人気:38
    この記事では、 AWS lambda fastly

    関連記事

    Copyright (C) socapnw.com, All Rights Reserved.

    Socapnw All Rights Reserved.

    processed in 0.237 (s). 11 q(s)