AWS Lambda:发送POST消息时出现key错误



我有一个非常简单的问题:我的lambda函数工作得很好,只要我不写像"a = event["key"]这样的东西,但是a = "test":

这是来自Cloudwatch:@message
[ERROR] KeyError: 'key1' Traceback(最近一次调用):@message
[ERROR] KeyError: 'key1' Traceback(最近一次调用最后一次):File "/var/task/lambda_function.py",第5行,在lambda_handler a = event["key1]

这是我用postman(我甚至尝试过curl)在body中发送的原始数据:

{
"key1": "value1",
"key2": "value2",
"key3": "value3"
}

我的lambda函数是这样的:

进口json

def lambda_handler(event, context):
# TODO implement
a = event["key1"]
return {
'statusCode': 200,
'body': json.dumps(a)
}

REST Api LAMBDA将按原样传递请求,因为LAMBDA_PROXY将在查询参数,Api键等上附加额外的元数据,因此,输入请求主体作为json字符串作为属性主体传递。json.loads(event['body'])将给我们实际的请求体。

关于更改集成类型的更多细节在这里

下面的代码可以从Lambda_Proxy的输入json对象中提取key1。

import json
def lambda_handler(event, context):
print(event)
a = json.loads(event['body'])['key1']
return {
'statusCode': 200,
'body': json.dumps(a)
}

对我来说最快的方法是使用HTTP API并使用key1=test的form-data。然后我打印了event["body"],发现我的body是base64编码的。我使用以下代码使其可见:

import json
import base64

def lambda_handler(event, context):
# TODO implement
a = event["body"]
print(a)
message_bytes = base64.b64decode(a)
message = message_bytes.decode('ascii')
return {
'statusCode': 200,
'body': json.dumps(message)
}

输出为:

"----------------------------852732202793625384403314rnContent-Disposition: form-data; name="key1"rnrntestrn----------------------------852732202793625384403314--rn"

最新更新