AWS Lambda, чтобы аннулировать CloudFront при загрузке S3

Я загружаю 10-50 файлов одновременно. Лямбда запускает событие для каждого обновленного файла (если размер файла изменился).

Поэтому вместо того, чтобы аннулировать одно за другим 50x, я бы хотел использовать шаблон “*” символ один раз в конце загрузки.

Кто-нибудь может пролить свет на то, как этого добиться? Спасибо!

2 ответа

Решение

Если я правильно понял ваш вопрос, ваша лямбда-функция знает, должен ли CloudFront сделать недействительной или нет, но не знает, когда это должно произойти точно.

В этом случае вы можете вернуть логический флаг (например, mustInvalidate) как часть ответа, чтобы указать, что запрос на аннулирование должен быть создан. Затем ваше приложение (или любой другой объект, инициировавший запрос пакетной загрузки) может создать /target-location/* запрос на аннулирование, как только пакет загрузки завершен.

В вашей лямбда-функции используйте AWS SDK для CloudFront, чтобы аннулировать распространение, используя подстановочный знак "/*".

var params = {
  DistributionId: 'STRING_VALUE', /* required */
  InvalidationBatch: { /* required */
    CallerReference: 'STRING_VALUE', /* required */
    Paths: { /* required */
      Quantity: 0, /* required */
      Items: [
        'STRING_VALUE',
        /* more items */
      ]
    }
  }
};
cloudfront.createInvalidation(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

Примечание. Убедитесь, что роль IAM, прикрепленная к функции Lambda, обладает необходимыми привилегиями для выполнения действия аннулирования.

Другие вопросы по тегам