Объект события из функции Lamda изменяется во время выполнения кода - PullRequest
0 голосов
/ 21 мая 2019

Я создал функцию Lambda, интегрированную с AWS API Gateway. Я настроил модель шаблона из запроса на интеграцию, чтобы я мог получить доступ к заголовкам запроса из объекта Event в функции Lambda.

Конфигурация запроса на интеграцию:

Из cloudWatch я заметил, что console.log (событие) не всегда пусто во время выполнения кода:

Журналы CloudWatch

Приведенный ниже код сгенерировал журналы CloudWatch:

var moment = require('moment');

var AWS = require('aws-sdk');
var keyPairId = 'APKAIPZ5BRDMEXAMPLE';

var privateKey = '';

var signer = new AWS.CloudFront.Signer(keyPairId, privateKey);
var expireTime = moment().add(3600, 'sec').unix();

exports.handler = (event, context, callback) => {

   console.log(event.headers); //logged twice from cloudWatch

   console.log(event.headers); //Undefined although i can see the data from cloudwatch...

   var domain = 'mydomain.com';
   var resource = 'https://cdn.mydomain.com/*';
   var attributes = '; domain=' + domain + '; path=/; secure; httpOnly'

   var options = {policy : '{"Statement":[{"Resource":"' + resource + 
   '","Condition":{"DateLessThan":{"AWS:EpochTime":' + expireTime + 
    '}}}]}'};

    signer.getSignedCookie(options, function(err, data) {

        if (err) {
        //do somehing

        } else {

           context.done(null, {

            'Set-Cookie': 'CloudFront-Policy=' + data["CloudFront-Policy"] + attributes,
            'SEt-Cookie': 'CloudFront-Signature=' + data["CloudFront-Signature"] + attributes,
            'SeT-Cookie': 'CloudFront-Key-Pair-Id=' + data["CloudFront-Key-Pair-Id"] + attributes


       });

    }
});
};

Как указано в приведенном выше коде, не могли бы вы объяснить, почему console.log(event) регистрируется дважды из cloudWatch и console.log(event['headers']) вызывает исключение, поскольку заголовки не определены, хотя я могу видеть данные из cloudwatch?

Большое спасибо!

РЕДАКТИРОВАТЬ:

Лямбда-функция вызывается с использованием REST (CORS). Я зарегистрировал два HTTP-запроса от моего браузера:

HTTP-запрос с методом: ОПЦИИ

OPTIONS https://mycdn-domain.net/authenticate
Access-Control-Request-Method: GET
Origin: https://origin-domain.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36
Access-Control-Request-Headers: x-api-key
Accept: */*

HTTP-запрос с методом: GET

GET https://mycdn-domain.net/authenticate
Origin: https://origin-domain.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36
x-api-key: ************************************
Accept: */*
...