Получение AWS лямбда-ответа при использовании boto3 invoke () - PullRequest
0 голосов
/ 07 ноября 2019

В настоящее время я пишу скрипт на python, который взаимодействует с некоторыми лямбда-функциями AWS. В одной из функций мой ответ содержит список, который мне нужен в моем скрипте.

Проблема в том, что когда я использую функцию invoke(), ответом является json, который содержит информацию запроса.

response = aws_lambdaClient.invoke(FunctionName = 'functionName', Payload = payload)

Используемая им функция имеет это в качестве возврата

return {'names': aList, 'status': 'Success!'}

Если я распечатываю ответ, я получаю это:

{'ResponseMetadata': {'RequestId': 'xxxxxxxxx', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Thu, 07 Nov 2019 14:28:25 GMT', 'content-type': 'application/json', 'content-length': '51', 'connection': 'keep-alive', 'x-amzn-requestid': 'xxxxxxxxxx', 'x-amzn-remapped-content-length': '0', 'x-amz-executed-version': '$LATEST', 'x-amzn-trace-id': 'root=xxxxxxxxx;sampled=0'}, 'RetryAttempts': 0}, 'StatusCode': 200, 'ExecutedVersion': '$LATEST', 'Payload': <botocore.response.StreamingBody object at 0x0000023D15716048>}

И id хотел бы получить

{'names': aList, 'status': 'Success!'}

Есть идеи, как мне этого добиться? Или я должен найти другой способ получения данных (может, поместить нужный мне список в корзину s3 и затем получить его оттуда).

1 Ответ

1 голос
/ 09 ноября 2019

Мануэль,

, как уже упоминалось, информация о возвращении находится внутри элемента Payload в возвращенном json. Полезная нагрузка - это объект типа boto3, к которому вам нужно обращаться с помощью метода read ().

Код, который я использовал для получения словаря python, который я возвращаю из своих лямбда-функций, таков:

payload = json.loads(response['Payload'].read())

statusCode = payload.get('statusCode')
message = payload.get('message')
results = payload.get('results')
...