Подтвердить что ты не робот

Как получить ответ возврата от функции 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? Я не мог найти четкую документацию о том, как это сделать.

4b9b3361

Ответ 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