2016-04-22 20 views
12

Ho una semplice funzione lambda che restituisce una risposta dict e un'altra funzione lambda richiama quella funzione e stampa la risposta.come ottenere risposta di ritorno dalla funzione AWS Lambda

funzione lambda Un

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

lambda funzione B invocando 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} 

Perché lo stato della risposta 202? Inoltre, come ottenere i dati di risposta da invoke_response? Non sono riuscito a trovare una documentazione chiara su come farlo.

risposta

21

A mezzi di risposta Accepted. È una risposta efficace, ma ti sta dicendo che l'azione richiesta è stata avviata ma non ancora completata. Il motivo per cui stai ricevendo un 202 è perché hai invocato la funzione Lambda in modo asincrono. Il parametro InvocationType è impostato su Event. Se si desidera effettuare una chiamata sincrona, modificarla in RequestResponse.

Una volta fatto questo, è possibile ottenere i dati restituiti in questo modo:

data = invoke_response['Payload'].read() 
+1

fatto il mio giorno! Molte grazie. Non lo abbiamo trovato da nessuna parte nei documenti –

+2

'.read()' restituisce type 'bytes 'quindi se ti aspettavi una stringa, JSON, ecc., Devi' .decode() 'loro. per esempio. 'response ['Payload']. read(). decode()' –

+2

E dal momento che 'json.dumps (obj)' restituisce una stringa quotata, (** se lo hai usato ** per il valore 'return' del tuo' lambda_handler') si otterrà una stringa se si esegue 'json.loads (response ['Payload']. read(). decode()) 'e dovrebbe avvolgere un altro' json.loads() 'attorno a questo. Quindi, non convertire esplicitamente in JSON nella funzione lambda. –

Problemi correlati