【发布时间】:2020-12-17 02:56:18
【问题描述】:
我有一个用 python 编写的 AWS Lambda 函数,它由我设置的 Zapier 触发器启动。当我将一些输入参数传递给 Zapier 触发器中的函数时,我可以通过使用诸如event[parameter1] 之类的变量来访问我的 python 代码中的输入参数。效果很好。
我正在尝试在 Airtable 脚本环境中访问相同的 Lambda 函数。为了做到这一点,我为 Lambda 函数设置了一个 API Gateway 触发器,但我不知道如何在 vanilla JS 环境中传递输入参数。下面是我的代码,它给了我“Internal Server Error”。
您的帮助将不胜感激!
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 __future__ import print_function
from googleapiclient.discovery import build
from google.oauth2 import service_account
SCOPES = ['https://www.googleapis.com/auth/drive']
SERVICE_ACCOUNT_FILE = 'service.json'
def lambda_handler(event, context):
"""Shows basic usage of the Drive v3 API.
Prints the names and ids of the first 10 files the user has access to.
"""
# 2-legged OAuth from Google service account
creds = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
drive_service = build('drive', 'v3', credentials=creds)
# change multiple permissions with batch requests
folder_id = event['gdrive_folder_id']
email_address = event['invitee_email']
def callback(request_id, response, exception):
if exception:
# Handle error
print(exception)
else:
print("Permission Id: {}".format(response.get('id')))
batch = drive_service.new_batch_http_request(callback=callback)
user_permission = {
'type': 'user',
'role': 'writer',
'emailAddress': email_address
}
batch.add(drive_service.permissions().create(
fileId=folder_id,
body=user_permission,
fields='id',
))
batch.execute()
【问题讨论】:
-
“内部服务器错误”通常会恢复为您的 Lambda 函数中的问题(代码、超出内存限制或超时)。您能否向我们展示 Lambda 函数代码及其日志(来自 CloudWatch>Log Groups>/aws/lambda/
)? -
那个,另外你可以尝试从 AWS 控制台调用 lambda(或者他们现在称之为 gui 的任何东西)。 API 网关/lambda 的设置可能很棘手,但如果它在另一个应用程序中工作,那么您已经完成了所有艰苦的工作,所以问题可能出在新代码发布请求的方式上。添加一些代码来记录 lambda 获取的参数的 repr,尤其是。如果日志显示 TypeError 异常。
-
@KoushikShomChoudhury 非常感谢您的回复!我已附上 Lambda 函数和 CloudWatch Log 的源代码。
-
@JayEye 感谢您的评论!所以你的意思是,JS代码中的http请求可能是问题?
标签: javascript amazon-web-services aws-lambda aws-api-gateway airtable