Javascript 如何使用API网关将事件参数传递给AWS Lambda函数?

Javascript 如何使用API网关将事件参数传递给AWS Lambda函数?,javascript,amazon-web-services,aws-lambda,aws-api-gateway,airtable,Javascript,Amazon Web Services,Aws Lambda,Aws Api Gateway,Airtable,我有一个用python编写的AWS Lambda函数,它由我设置的Zapier触发器启动。当我将一些输入参数传递给Zapier触发器中的函数时,我可以通过使用event[parameter1]等变量来访问python代码中的输入参数。它非常有效 我试图在Airtable脚本环境中访问相同的Lambda函数。为了做到这一点,我为Lambda函数设置了一个API网关触发器,但我不知道如何在vanilla JS环境中传递输入参数。下面是我的代码,它给了我“内部服务器错误” 我们将非常感谢您的帮助 co

我有一个用python编写的AWS Lambda函数,它由我设置的Zapier触发器启动。当我将一些输入参数传递给Zapier触发器中的函数时,我可以通过使用
event[parameter1]
等变量来访问python代码中的输入参数。它非常有效

我试图在Airtable脚本环境中访问相同的Lambda函数。为了做到这一点,我为Lambda函数设置了一个API网关触发器,但我不知道如何在vanilla JS环境中传递输入参数。下面是我的代码,它给了我“内部服务器错误”

我们将非常感谢您的帮助

const awsUrl = "https://random-id.execute-api.us-west-2.amazonaws.com/default/lambda-function";
let event = {
    "queryStringParameters": {
        "gdrive_folder_id": consFolderId,
        "invitee_email": email
    }
};

let response = await fetch(awsUrl, {
    method: "POST",
    body: JSON.stringify(event),
    headers: {
        "Content-Type": "application/json",
    }
});
console.log(await response.json());
[编辑]另外,这里是Lambda函数的代码和Zapier调用成功执行后的最新cloudwatch日志。这是一个简单的代码,可以基于2个输入自动实现Google Drive文件夹共享。(文件夹ID+电子邮件地址)请容忍我的代码质量差

from\uuuuu future\uuuuu导入打印功能
从GoogleAppClient.discovery导入生成
从google.oauth2导入服务_帐户
作用域=['https://www.googleapis.com/auth/drive']
服务\帐户\文件='SERVICE.json'
def lambda_处理程序(事件、上下文):
“”“显示驱动器v3 API的基本用法。
打印用户有权访问的前10个文件的名称和ID。
"""
#来自谷歌服务账户的两条腿OAuth
creds=service\u account.Credentials.from\u service\u account\u文件(
服务\帐户\文件,作用域=作用域)
驱动器\服务=构建('drive','v3',凭据=凭据)
#使用批处理请求更改多个权限
folder\u id=event['gdrive\u folder\u id']
电子邮件地址=事件['invitee\u email']
def回调(请求id、响应、异常):
如有例外:
#处理错误
打印(例外)
其他:
打印(“权限Id:{}”。格式(response.get('Id'))
批处理=驱动器\u服务。新批处理\u http\u请求(回调=回调)
用户权限={
“类型”:“用户”,
“角色”:“作者”,
“emailAddress”:电子邮件地址
}
batch.add(驱动器\服务.permissions().create(
fileId=文件夹\u id,
body=用户权限,
fields='id',
))
batch.execute()

我不是Python专家,我不知道您是如何设置与Lambda的API网关集成的,但我相信您的代码可能有两个问题:

1.内部服务器错误作为来自API网关端点的响应,通常也指API网关和Lambda函数之间的集成问题。在本例中,我看不到您在哪里将有效响应返回给API网关。在您的示例中,
batch.execute()
的返回值可能已返回,对吗?但是,默认情况下,API网关希望对象包含
statusCode
body
以及可选的
headers
。您可以看一看示例及其示例。这也可能是你感兴趣的

2.)在函数中,您正在访问事件数据,如
事件['gdrive\u folder\u id']
。但是,我看不到您正在某处解析事件数据。您是否在API网关之间使用自定义集成?因为在代理集成的情况下,API网关发送一个对象,该对象有一个
body
字段,您需要从该字段读取HTTP body。请参见上的示例

这里还有一些你可以自己检查的东西: 您是否也检查了仅打印
事件
数据时得到的结果?另外,
batch.execute()
是否正在等待批处理,或者是否返回任何内容?如果是,它会返回什么


这里有一点需要注意:您还没有告诉我们关于API网关和Lambda函数之间集成的任何信息。由于可以在API网关和AWS Lambda之间进行一些映射,因此可能是在Lambda函数之外转换请求和响应,因此,我上面的建议是错误的。让我知道这是否属实,我们可以进一步调查。

我不是Python专家,我不知道您是如何设置与Lambda的API网关集成的,但我相信您的代码可能有两个问题:

1.内部服务器错误作为来自API网关端点的响应,通常也指API网关和Lambda函数之间的集成问题。在本例中,我看不到您在哪里将有效响应返回给API网关。在您的示例中,
batch.execute()
的返回值可能已返回,对吗?但是,默认情况下,API网关希望对象包含
statusCode
body
以及可选的
headers
。您可以看一看示例及其示例。这也可能是你感兴趣的

2.)在函数中,您正在访问事件数据,如
事件['gdrive\u folder\u id']
。但是,我看不到您正在某处解析事件数据。您是否在API网关之间使用自定义集成?因为在代理集成的情况下,API网关发送一个对象,该对象有一个
body
字段,您需要从该字段读取HTTP body。请参见上的示例

这里还有一些你可以自己检查的东西: 您是否也检查了仅打印
事件
数据时得到的结果?另外,
batch.execute()
是否正在等待批处理,或者是否返回任何内容?如果是,它会返回什么

这里有一点需要注意:您还没有告诉我们关于API网关和Lambda函数之间集成的任何信息。由于您可以在API网关和AWS Lambda之间进行一些映射,因此您可能正在转换请求和响应