Есть ли способ загрузить внешние данные в Lambda@Edge
Я пытался использовать Lambda@Edge для обработки A/B-тестирования на моем сайте. Интересно, есть ли способ позволить функциям Lambada@Edge загружать внешние данные конфигурации из URL, например? я создал API для возврата скорости трафика каналов A/B, я хочу управлять этими данными конфигурации снаружи, чтобы я мог динамически настраивать поток трафика на канал A или B и не нуждался в изменении функции Lambda. что я сделал сейчас
var versions = [];
var isLoadingVersionData = false;
const https = require('https');
function loadVersions() {
if (isLoadingVersionData)
return null;
isLoadingVersionData=true;
https.get('https://example.com/getAbTestConfig', (res) => {
res.on('data', (d) => {
var parsedBody = JSON.parse(d);
if (parsedBody.status)
versions = parsedBody.data;
});
}).on('error', (e) => {
console.log(e);
});
}
//and load the function in handler
exports.handler = (event, context, callback) => {
context.callbackWaitsForEmptyEventLoop = false;
loadVersions();
}
Интересно, эта переменная "версии" может быть загружена правильно и совместно использовать в каждом последующем запросе
у вас есть более эффективные решения?
2 ответа
Я столкнулся с той же проблемой, но не для A/B тестирования. Я только что создал файл json в своей лямбда-функции, чтобы избежать задержки выполнения http-вызовов внутри лямбда-функций. Это работает, но обслуживание не является хорошим, так как каждый раз, когда мне нужно изменить файл Json, мне нужно снова развертывать лямбда-функцию.
Пока я искал его, я нашел то же решение, описанное выше для Mr.Ocean, звучит как хорошая альтернатива для сохранения данных в S3.
Почему бы не сохранить эти данные в S3 и использовать Lambda@Edge для получения конфигурации оттуда? Кроме того, чтобы уменьшить задержку, вы можете перейти к корзине S3, содержащей коэффициент трафика, с помощью CloudFront, и ваш L@E может позвонить в CloudFront и получить желаемое значение.