У меня есть лямбда-функция AWS, которую я могу вызывать синхронно и получить результаты обратно в порядке с кодом ниже
response = lambda_client.invoke(
FunctionName=FUNCTION_NAME,
InvocationType='RequestResponse',
LogType='Tail',
Payload=payload,
Qualifier=$LATEST
)
Ответная нагрузка имеет тип <botocore.response.StreamingBody object at 0x115fb3160>
Поэтому я использую приведенный ниже код для извлечения полезной нагрузки, котораяработает нормально.
response_body = response['Payload']
response_str = response_body.read().decode('utf-8')
response_dict = eval(response_str)
Теперь мне нужно асинхронно вызывать лямбду, поэтому я изменяю тип вызова с помощью InvocationType='Event'
Это дает мне ответ с полезной нагрузкой того же типа, что ираньше botocore.response.StreamingBody object
но я получаю сообщение об ошибке с этой строкой - response_dict = eval(response_str)
В сообщении об ошибке указано
response_dict = eval(response_str)
File "<string>", line 0
^
SyntaxError: unexpected EOF while parsing
Чего мне не хватает? Если полезная нагрузка ответа совпадает с типом синхронного вызова, то почему возникает ошибка синтаксического анализа? Любое предложение?
РЕДАКТИРОВАТЬ
Для ясности я понимаю, что если InvocationType='Event'
, то мы получаем только статус вызова invoke
, а не лямбдарезультат функции. В моем случае, однако, мне нужно и то и другое - запустить асинхронный лямбда и получить результат обратно, когда закончите. Как мне это сделать? Записывает ли результат обратно в s3 и периодически проверяет, что единственный вариант?