Я создал функцию 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: */*