is there a way to load external data in Lambda@Edge










1















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?










share|improve this question


























    1















    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?










    share|improve this question
























      1












      1








      1








      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?










      share|improve this question














      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






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Oct 30 '18 at 10:34









      Kent WoodKent Wood

      3311313




      3311313






















          2 Answers
          2






          active

          oldest

          votes


















          0














          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.






          share|improve this answer






























            0














            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.






            share|improve this answer























            • Have you tried this before @Mr.Ocean

              – Lucas Santos
              Nov 15 '18 at 21:20











            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
            );



            );













            draft saved

            draft discarded


















            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









            0














            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.






            share|improve this answer



























              0














              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.






              share|improve this answer

























                0












                0








                0







                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.






                share|improve this answer













                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.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 15 '18 at 7:09









                Mr.OceanMr.Ocean

                3314




                3314























                    0














                    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.






                    share|improve this answer























                    • Have you tried this before @Mr.Ocean

                      – Lucas Santos
                      Nov 15 '18 at 21:20
















                    0














                    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.






                    share|improve this answer























                    • Have you tried this before @Mr.Ocean

                      – Lucas Santos
                      Nov 15 '18 at 21:20














                    0












                    0








                    0







                    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.






                    share|improve this answer













                    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.







                    share|improve this answer












                    share|improve this answer



                    share|improve this answer










                    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


















                    • 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


















                    draft saved

                    draft discarded
















































                    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.




                    draft saved


                    draft discarded














                    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





















































                    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







                    這個網誌中的熱門文章

                    How to read a connectionString WITH PROVIDER in .NET Core?

                    Node.js Script on GitHub Pages or Amazon S3

                    Museum of Modern and Contemporary Art of Trento and Rovereto