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, обладает необходимыми привилегиями для выполнения действия аннулирования.