2016-04-22 10 views
12

Ich habe eine einfache Lambda-Funktion, die eine Diktat-Antwort zurückgibt und eine andere Lambda-Funktion ruft diese Funktion auf und druckt die Antwort.Wie bekomme ich Antwort Antwort von AWS Lambda-Funktion

Lambda-Funktion A

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

Lambda-Funktion B 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 Aufruf

{u'Payload': <botocore.response.StreamingBody object at 0x7f47c58a1e90>, 'ResponseMetadata': {'HTTPStatusCode': 202, 'RequestId': '9a6a6820-0841-11e6-ba22-ad11a929daea'}, u'StatusCode': 202} 

Warum der Antwortstatus 202? Wie erhalten Sie die Antwortdaten von invoke_response? Ich konnte keine klare Dokumentation dafür finden.

Antwort

21

Eine 202 Antwort bedeutet Accepted. Es ist eine erfolgreiche Antwort, teilt Ihnen jedoch mit, dass die Aktion, die Sie angefordert haben, initiiert wurde, aber noch nicht abgeschlossen wurde. Der Grund, warum Sie eine 202 erhalten, liegt daran, dass Sie die Lambda-Funktion asynchron aufgerufen haben. Ihr InvocationType Parameter ist auf Event festgelegt. Wenn Sie einen synchronen Anruf tätigen möchten, ändern Sie dies in RequestResponse.

Sobald Sie das tun, können Sie die zurückgegebenen Daten wie diese:

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

mein Tag! Danke vielmals. Habe das nirgends in docs gefunden –

+2

'.read()' gibt 'type' bytes' zurück. Wenn Sie also eine Zeichenkette, JSON, usw. erwartet haben, müssen Sie' .decode() 'sie. z.B. 'response ['Payload']. read(). decode()' –

+2

Und da 'json.dumps (obj)' gibt einen String in Anführungszeichen zurück, (** wenn Sie diesen ** für den 'return' Wert Ihres' lambda_handler') Sie werden eine Zeichenfolge erhalten, wenn Sie 'json.loads (response [' Payload ']. read(). decode())' und würde eine andere 'json.loads()' darum wickeln müssen. Also, konvertiere nicht explizit zu JSON in deiner Lambda-Funktion. –

Verwandte Themen