Как получить ответ возврата от функции AWS Lambda
У меня есть простая лямбда-функция, которая возвращает dict-ответ, а другая лямбда-функция вызывает эту функцию и печатает ответ.
лямбда-функция A
def handler(event,context):
params = event['list']
return {"params" : params + ["abc"]}
лямбда-функция B, вызывающая A
a=[1,2,3]
x = {"list" : a}
invoke_response = lambda_client.invoke(FunctionName="monitor-workspaces-status",
InvocationType='Event',
Payload=json.dumps(x))
print (invoke_response)
invoke_response
{u'Payload': <botocore.response.StreamingBody object at 0x7f47c58a1e90>, 'ResponseMetadata': {'HTTPStatusCode': 202, 'RequestId': '9a6a6820-0841-11e6-ba22-ad11a929daea'}, u'StatusCode': 202}
Почему статус ответа 202? Кроме того, как я могу получить данные ответа от invoke_response? Я не мог найти четкую документацию о том, как это сделать.
Ответы
Ответ 1
A 202
ответ означает Accepted
. Это успешный ответ, но говорит вам, что инициированное вами действие было инициировано, но еще не завершено. Причина, по которой вы получаете 202
, заключается в том, что вы вызывали функцию лямбда асинхронно. Ваш параметр InvocationType
установлен на Event
. Если вы хотите сделать синхронный вызов, измените его на RequestResponse
.
Как только вы это сделаете, вы можете получить возвращаемые данные следующим образом:
data = invoke_response['Payload'].read()
Ответ 2
попробуйте: data = invoke_response['Payload'].read()
read(), потому что это объект StreamingBody
<botocore.response.StreamingBody object at 0x110b91c50>
Это в boto3 документах. Вы можете найти более подробную информацию об этом здесь: https://boto3.amazonaws.com/v1/documentation/api/latest/guide/resources.html#actions