web-dev-qa-db-ja.com

Python 2.7で既存のラムダ関数からAWSラムダ関数を呼び出します

次のように既存のラムダ機能から別のラムダ関数を呼び出そうとしています(python 2.7)

from __future__ import print_function
import boto3
import json

lambda_client = boto3.client('lambda')

def lambda_handler(event, context):

    invoke_response = lambda_client.invoke(FunctionName="teststack",
                                           InvocationType='RequestResponse'
                                           )
    print(invoke_response)

    return str(invoke_response)

実際の結果ではなく、以下の応答を取得しています。 teststack lambdaを個別に実行すると正常に動作しますが、teststack Lambda関数によって返される "test"の代わりに応答以下になります。

{u'Payload': <botocore.response.StreamingBody object at ****>, 'ResponseMetadata': {'HTTPStatusCode': 200, 'RequestId': '******', 'HTTPHeaders': {'x-amzn-requestid': '******', 'content-length': '155', 'x-amzn-remapped-content-length': '0', 'connection': 'keep-alive', 'date': 'Sun, 17 Jul 2016 21:02:01 GMT', 'content-type': 'application/json'}}, u'StatusCode': 200}
18
shiv455

探している応答データはそこにあり、 StreamingBody オブジェクトとしてPayloadの中にあります。

Botoのドキュメントによると、readメソッドを使用してオブジェクトを読み取ることができます。

invoke_response['Payload'].read()
12
Gricey