3

私はラムダ関数を持っています。これはAPIに対する基本的なPython GET呼び出しです。ローカルでうまく動作しますが、Lambdaにアップロードすると(リクエストライブラリとともに)、API呼び出しからのJSON応答は返されません。 JSONオブジェクト全体を呼び出し元に返すだけです。ここで根本的に何か間違っていますか?Lambda Python関数からJSONを返すことはサポートされていないとの記事をいくつか見つけました。ここでAWSラムダのPython API呼び出しメソッドがJSONを返さない - シリアル化されていない?

はコードです:

import requests 
import json 
url = "http://url/api/projects/" 
headers = { 
    'content-type': "application/json", 
    'x-octopus-apikey': "redacted", 
    'cache-control': "no-cache" 
    } 

def lambda_handler(event, context): 
    response = requests.request("GET", url, headers=headers) 
    return response 

私のパッケージは、(私はそれがこのかかわらを必要とは思わない)要求ライブラリとDIST、およびJSONライブラリが含まれています。返されるエラーメッセージは次のとおりです。私はこれを

{ 
    "stackTrace": [ 
    [ 
     "/usr/lib64/python2.7/json/__init__.py", 
     251, 
     "dumps", 
     "sort_keys=sort_keys, **kw).encode(obj)" 
    ], 
    [ 
     "/usr/lib64/python2.7/json/encoder.py", 
     207, 
     "encode", 
     "chunks = self.iterencode(o, _one_shot=True)" 
    ], 
    [ 
     "/usr/lib64/python2.7/json/encoder.py", 
     270, 
     "iterencode", 
     "return _iterencode(o, 0)" 
    ], 
    [ 
     "/var/runtime/awslambda/bootstrap.py", 
     41, 
     "decimal_serializer", 
     "raise TypeError(repr(o) + \" is not JSON serializable\")" 
    ] 
    ], 
    "errorType": "TypeError", 
    "errorMessage": "<Response [200]> is not JSON serializable" 
} 

答えて

3

解決した - 私のPythonコードの問題は、それが全体応答ではなく、単純にJSON本体(私の地元のバージョンのコードを返すようにしようとしていたということです'response.text'を出力します)。さらに、私は応答がJSON形式(生のテキストではなく)であることを保証しました。更新されたコード:

import requests 
import json 
url = "http://url/api/projects/" 
headers = { 
    'content-type': "application/json", 
    'x-octopus-apikey': "redacted", 
    'cache-control': "no-cache" 
    } 

def lambda_handler(event, context): 
    response = requests.request("GET", url, headers=headers)   
    try: 
     output = response.json() 
    except ValueError: 
     output = response.text 
    return output 
関連する問題