![](/img/trans.png)
[英]Dynamodb.put works fine when running a lambda test configuration, but not when invoking the lambda through API gateway
[英]Lambda function works, but fails when invoked through the API gateway
我有一个 lambda function 将项目放在 dynamodb 表中。 它与测试事件完美配合。
import boto3
class DBupload:
def __init__(self):
client = boto3.resource('dynamodb')
self.table=client.Table('labels')
def Create_data(self,event):
response=self.table.put_item(
Item={
'instanceID' : event['id'],
'imageID' : event['imageid'],
'labels' : event['labels']
}
)
return{
'statusCode' : response['ResponseMetadata']['HTTPStatusCode'],
'body' : 'Record ' + event['id'] + ' added'
}
def lambda_handler(event, context):
if event:
instance = DBupload()
if event['tasktype'] == "create":
create_result = instance.Create_data(event['data'])
return create_result
else :
return {
'statusCode': '404',
'body': 'Not found'
}
我制作了一个 REST API 网关,创建了一个资源和一个带有代理的 POST 方法,并在部署之前启用了 IAM 和 API 密钥。 然后我将 go 添加到使用计划中,并将该阶段添加到使用计划中,然后再次部署以进行良好测量。
当我现在通过 Postman 发送完全相同的请求时,它会抛出一个内部服务器错误。 我可以通过绕过身份验证的 API 网关测试 function 发送它,它给了我以下错误日志
Lambda 由于客户 function 错误:“任务类型”,执行失败,状态为 200。 方法完成状态:502
所以看起来它不是 API 错误,因为错误日志引用了 lambda 中的客户 function。但是当我通过 88355034.71388 将我的项目作为测试事件发送时,Lambda function 工作得很好
这是测试事件顺便说一句
{
"tasktype":"create",
"data":{
"id":"testinsanceid",
"imageid":"testimageid",
"labels":{
"labeltype1":"labelname1",
"labeltype2":"labelname2"
}
}
}
尝试
if 'tasktype' in event and event['tasktype'] == "create":
这将确保您不会依赖不存在的东西。
此外print(event)
将允许您确保事件 object 是您所期望的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.