I'm invoking a lambda function from another function and want to take a different action depending on the response, pretty standard stuff. However I get some unexpected behavior, it's probably something obvious, but it is eluding me. I've recreated my example in the simplest possible example any help would be much appreciated.
The lambda function
def lambda_handler(event, context):
return 'Just a string'
The code to call the lambda function
def invoke_lambda(payload):
r = lambda_client.invoke(
FunctionName='MyLambdaFunction',
InvocationType='RequestResponse',
Payload=bytes(payload)
)
p = r['Payload'].read()
print p #Prints an empty string
print(r['Payload'].read()) #Prints Just a string
invoke_lambda(payload)
The following code solves the problem. Apparently I need to set the streamingbody to a variable, then read it into another variable. I used this link for reference
def invoke_lambda(payload):
r = lambda_client.invoke(
FunctionName='MyLambdaFunction',
InvocationType='RequestResponse',
Payload=bytes(payload)
)
t = r['Payload']
j = t.read()
print j
If you expect JSON as response, you can do the following:
import json
def invoke_lambda(payload):
response = lambda_client.invoke(
FunctionName='MyLambdaFunction',
InvocationType='RequestResponse',
Payload=bytes(payload)
)
response_payload = json.loads(invoke_response['Payload'].read().decode("utf-8"))
print ("response_payload: {}".format(response_payload))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With