web-dev-qa-db-ja.com

AWS Lambda関数から戻り応答を取得する方法

Dict応答を返す単純なラムダ関数があり、別のラムダ関数がその関数を呼び出して応答を出力します。

ラムダ関数A

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

Aを呼び出すラムダ関数B

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}

なぜ応答ステータス202ですか?また、invoke_responseから応答データを取得する方法は?私はそれを行う方法の明確なドキュメントを見つけることができませんでした。

20
user3089927

202応答はAcceptedを意味します。これは成功した応答ですが、要求したアクションが開始されたがまだ完了していないことを示しています。 202を取得している理由は、Lambda関数を非同期で呼び出したためです。 InvocationTypeパラメーターはEventに設定されます。同期呼び出しを行う場合は、これをRequestResponseに変更します。

これを行うと、次のような返されたデータを取得できます。

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