POST 来自 Google 脚本的 AWS Lambda 请求为空

POST request from Google Scripts to AWS Lambda coming through as null

我正在尝试使用 Google Apps 脚本从 Google Sheet 发送包含给定行数据的 POST 请求。该请求发送到 AWS API 网关,后者将其发送到 Lambda 函数,然后执行其他操作。

当我使用 curl 手动发送请求时,AWS 端一切正常,但出于某种原因,当我尝试在 Sheets 内以编程方式执行此操作时,API 只会将空事件传递给我的功能。 POST 请求在 Sheet 端打印时看起来格式正确,但我的 API 拒绝通过它们。我知道这一点,因为我将其设置为记录传递给 CloudWatch 中的函数的所有事件,并且自动调用都只打印 {} 作为事件。

API 中不需要身份验证,所以我无法想象这是一个身份验证问题。我还看到了一个常见的解决方案是启用 Lambda 代理集成,但我不明白如果那是问题,为什么 curl 会起作用。

我几乎完全使用 this tutorial 构建了我的 API,如果这有帮助的话。

以下是 Apps 脚本端的相关代码:

/**
 * Creates JSON payload and sends request to Amazon. 
 */
function sendRequest()
{
  const url = "https://**********.execute-api.us-east-1.amazonaws.com/prod/DynamoDBManager";

  // Make a POST request with a JSON payload.
  var data = 
  {
    "operation": "create",
    'tableName': 'lambda-apigateway',
    'payload': {
      'Item': {
        'name': nameGiven,
        'contact': contactGiven.toString(),
        'id': currId.toString()
      }
    }
  };

  var options = 
  {
    method: 'post',
    contentType: 'application/json',
    // Convert the JavaScript object to a JSON string.
    body: JSON.stringify(data),
  };
  
  var response =  UrlFetchApp.fetch(url, options);
  var jsonObject = JSON.parse(response.getContentText()); // just makes the response visible in debugger
} 

在您的脚本中,请修改如下。

发件人:

body: JSON.stringify(data),

收件人:

payload: JSON.stringify(data),

参考: