web-dev-qa-db-fra.com

comment obtenir une réponse de retour de la fonction AWS Lambda

J'ai une fonction lambda simple qui renvoie une réponse dict et une autre fonction lambda invoque cette fonction et imprime la réponse.

fonction lambda A

def handler(event,context):
    params = event['list']
    return {"params" : params + ["abc"]}

fonction lambda B invoquant 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}

Pourquoi le statut de réponse 202? En outre, comment obtenir les données de réponse à partir d'invoke_response? Je n'ai pas pu trouver de documentation claire sur la façon de procéder.

20
user3089927

UNE 202 réponse signifie Accepted. C'est une réponse réussie mais vous indique que l'action que vous avez demandée a été lancée mais n'est pas encore terminée. La raison pour laquelle vous obtenez un 202 est dû au fait que vous avez appelé la fonction Lambda de manière asynchrone. Votre paramètre InvocationType est défini sur Event. Si vous souhaitez effectuer un appel synchrone, remplacez-le par RequestResponse.

Une fois que vous avez fait cela, vous pouvez obtenir les données renvoyées comme ceci:

data = invoke_response['Payload'].read()
41
garnaat