is there a way to load external data in Lambda@Edge
i was trying to use Lambda@Edge to handle A/B testing in my site.
i wonder is there a way to let Lambada@Edge functions load an external config data from a url, eg. i created an api to return the traffic rates of A/B channels,i want control that config data outside, so that i can dynamically adjust the traffics flow to A or B channel and no need to modify the Lambda function.
what i did now is
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();
i wonder this variable "versions" can be loaded correctly and shared in each later requests
do you have some more effectually solutions?
aws-lambda aws-lambda-edge
add a comment |
i was trying to use Lambda@Edge to handle A/B testing in my site.
i wonder is there a way to let Lambada@Edge functions load an external config data from a url, eg. i created an api to return the traffic rates of A/B channels,i want control that config data outside, so that i can dynamically adjust the traffics flow to A or B channel and no need to modify the Lambda function.
what i did now is
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();
i wonder this variable "versions" can be loaded correctly and shared in each later requests
do you have some more effectually solutions?
aws-lambda aws-lambda-edge
add a comment |
i was trying to use Lambda@Edge to handle A/B testing in my site.
i wonder is there a way to let Lambada@Edge functions load an external config data from a url, eg. i created an api to return the traffic rates of A/B channels,i want control that config data outside, so that i can dynamically adjust the traffics flow to A or B channel and no need to modify the Lambda function.
what i did now is
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();
i wonder this variable "versions" can be loaded correctly and shared in each later requests
do you have some more effectually solutions?
aws-lambda aws-lambda-edge
i was trying to use Lambda@Edge to handle A/B testing in my site.
i wonder is there a way to let Lambada@Edge functions load an external config data from a url, eg. i created an api to return the traffic rates of A/B channels,i want control that config data outside, so that i can dynamically adjust the traffics flow to A or B channel and no need to modify the Lambda function.
what i did now is
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();
i wonder this variable "versions" can be loaded correctly and shared in each later requests
do you have some more effectually solutions?
aws-lambda aws-lambda-edge
aws-lambda aws-lambda-edge
asked Oct 30 '18 at 10:34
Kent WoodKent Wood
3311313
3311313
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
Why not maintain this data in S3 and use your Lambda@Edge to get the configuration from there? Further to reduce latency, you can front the S3 bucket containing traffic ratio with CloudFront and have your L@E make a call to CloudFront and get the desired value.
add a comment |
I was facing the same issue but not for A/B testing. I just created a json file in my lambda function to avoid delay of making http calls inside lambda functions. It works but the maintenance is not good, as every time when I need to change the Json file I need deploy the lambda function again.
While I was searching for it, I found same solution described for Mr.Ocean above, sounds like a good alternative to maintain the data in S3.
Have you tried this before @Mr.Ocean
– Lucas Santos
Nov 15 '18 at 21:20
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53062371%2fis-there-a-way-to-load-external-data-in-lambdaedge%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Why not maintain this data in S3 and use your Lambda@Edge to get the configuration from there? Further to reduce latency, you can front the S3 bucket containing traffic ratio with CloudFront and have your L@E make a call to CloudFront and get the desired value.
add a comment |
Why not maintain this data in S3 and use your Lambda@Edge to get the configuration from there? Further to reduce latency, you can front the S3 bucket containing traffic ratio with CloudFront and have your L@E make a call to CloudFront and get the desired value.
add a comment |
Why not maintain this data in S3 and use your Lambda@Edge to get the configuration from there? Further to reduce latency, you can front the S3 bucket containing traffic ratio with CloudFront and have your L@E make a call to CloudFront and get the desired value.
Why not maintain this data in S3 and use your Lambda@Edge to get the configuration from there? Further to reduce latency, you can front the S3 bucket containing traffic ratio with CloudFront and have your L@E make a call to CloudFront and get the desired value.
answered Nov 15 '18 at 7:09
Mr.OceanMr.Ocean
3314
3314
add a comment |
add a comment |
I was facing the same issue but not for A/B testing. I just created a json file in my lambda function to avoid delay of making http calls inside lambda functions. It works but the maintenance is not good, as every time when I need to change the Json file I need deploy the lambda function again.
While I was searching for it, I found same solution described for Mr.Ocean above, sounds like a good alternative to maintain the data in S3.
Have you tried this before @Mr.Ocean
– Lucas Santos
Nov 15 '18 at 21:20
add a comment |
I was facing the same issue but not for A/B testing. I just created a json file in my lambda function to avoid delay of making http calls inside lambda functions. It works but the maintenance is not good, as every time when I need to change the Json file I need deploy the lambda function again.
While I was searching for it, I found same solution described for Mr.Ocean above, sounds like a good alternative to maintain the data in S3.
Have you tried this before @Mr.Ocean
– Lucas Santos
Nov 15 '18 at 21:20
add a comment |
I was facing the same issue but not for A/B testing. I just created a json file in my lambda function to avoid delay of making http calls inside lambda functions. It works but the maintenance is not good, as every time when I need to change the Json file I need deploy the lambda function again.
While I was searching for it, I found same solution described for Mr.Ocean above, sounds like a good alternative to maintain the data in S3.
I was facing the same issue but not for A/B testing. I just created a json file in my lambda function to avoid delay of making http calls inside lambda functions. It works but the maintenance is not good, as every time when I need to change the Json file I need deploy the lambda function again.
While I was searching for it, I found same solution described for Mr.Ocean above, sounds like a good alternative to maintain the data in S3.
answered Nov 15 '18 at 21:20
Lucas SantosLucas Santos
110111
110111
Have you tried this before @Mr.Ocean
– Lucas Santos
Nov 15 '18 at 21:20
add a comment |
Have you tried this before @Mr.Ocean
– Lucas Santos
Nov 15 '18 at 21:20
Have you tried this before @Mr.Ocean
– Lucas Santos
Nov 15 '18 at 21:20
Have you tried this before @Mr.Ocean
– Lucas Santos
Nov 15 '18 at 21:20
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53062371%2fis-there-a-way-to-load-external-data-in-lambdaedge%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown