2

当我尝试执行函数抛出错误时,我创建了一个 Lambda 函数

'use strict';

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

  const request = event.Records[0].cf.request;
  const headers = request.headers;
  const origin = request.origin;
  const client_IP = request.clientIp;
  console.log(JSON.stringify(event));

  //Setup the two different origins
  const originA = "cloudfront-S3-origin1";
  const originB = "Cloudfront-S3-origin2";
  if (client_IP == "xx.xx.xx.xx") {
    origin.s3.domainName = originA;
  } else {
    origin.s3.domainName = originB;
  }
  callback(null, request);
};
4

3 回答 3

0

您的 Lambda 函数要么通过手动触发,要么以某种方式错过event.Records。我想建议您在使用类似的东西之前检查可用的数据

'use strict';

exports.handler = (event, context, callback) => {
  if(!event.Records) {
    return callback(new Error('Records not available'));
  }

  const request = event.Records[0].cf.request;
  const headers = request.headers;
  const origin = request.origin;
  const client_IP = request.clientIp;
  console.log(JSON.stringify(event));

  //Setup the two different origins
  const originA = "cloudfront-S3-origin1";
  const originB = "Cloudfront-S3-origin2";
  if (client_IP == "xx.xx.xx.xx") {
    origin.s3.domainName = originA;
  } else {
    origin.s3.domainName = originB;
  }
  callback(null, request);
}; 
于 2019-05-21T10:06:17.090 回答
0

我相信您是手动触发 lambda 函数,而不是通过分配的事件触发器(s3、sns 等)。对于手动触发,您需要自己传递事件,如下所示,我正在使用来自 s3 的事件示例。(如果您不手动执行,请告诉我您是如何触发它的。)另外,请确保事件你收到的是一个对象而不是一个字符串。

let event = {
  "Records": [
    {
      "eventVersion": "2.0",
      "eventSource": "aws:s3",
      "awsRegion": "us-west-2",
      "eventTime": "2018-04-20T21:01:59.672Z",
      "eventName": "ObjectCreated:Put",
      "userIdentity": {
        "principalId": "AWS:xxxxxxxxxxx:xxx"
      },
      "requestParameters": {
        "sourceIPAddress": "172.0.0.1"
      },
      "responseElements": {
        "x-amz-request-id": "xxxxxxxxxxx",
        "x-amz-id-2": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
      },
      "s3": {
        "s3SchemaVersion": "1.0",
        "configurationId": "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxxxxx",
        "bucket": {
          "name": "testing-process",
          "ownerIdentity": {
            "principalId": "xxxxxxxxxxxxxxx"
          },
          "arn": "arn:aws:s3:::testing-process"
        },
        "object": {
          "key": "5a2a37db9b15036253a4336d/1kmultipayables_together_chunk_2.csv",
          "size": 193,
          "eTag": "0ae33a40954ee4c745ea39f7e5e3d830",
          "sequencer": "005ADA554796220809"
        }
      }
    }
  ]
}
exports.handler = (event, context, callback) => {

  const request = event.Records[0].cf.request;
  const headers = request.headers;
  const origin = request.origin;
  const client_IP = request.clientIp;
  console.log(JSON.stringify(event));

  //Setup the two different origins
  const originA = "cloudfront-S3-origin1";
  const originB = "Cloudfront-S3-origin2";
  if (client_IP == "xx.xx.xx.xx") {
    origin.s3.domainName = originA;
  } else {
    origin.s3.domainName = originB;
  }
  callback(null, request);
};
module.exports.handler(event, null, function (err, res) {
    if (err) {
        console.log(err);
    } else {
        console.log(res);
    }
});````
于 2019-05-21T14:12:49.130 回答
0

我们可以用这种方式来处理这样的错误:

 let payload = {};
    payload = event;
    if (event.Records) payload = JSON.parse(event.Records[0].body);
    if (typeof payload == "string") payload = JSON.parse(payload);
于 2021-11-11T07:05:19.717 回答