有没有办法在Lambda @ Edge中加载外部数据

时间:2018-10-30 10:34:08

标签: aws-lambda aws-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 个答案:

答案 0 :(得分:0)

为什么不在S3中维护此数据并使用Lambda @ Edge从那里获取配置?为了进一步减少延迟,您可以在CloudFront前面放置包含流量比率的S3存储桶,然后让L @ E致电CloudFront并获得所需的值。

答案 1 :(得分:0)

我遇到了同样的问题,但没有进行A / B测试。我只是在lambda函数中创建了一个json文件,以避免延迟在lambda函数中进行http调用。它可以工作,但是维护效果不好,因为每次我需要更改Json文件时,都需要再次部署lambda函数。

在搜索的同时,我发现了与上述针对Ocean先生相同的解决方案,听起来像是在S3中维护数据的不错选择。