2017-11-28 5 views
1

私はPython 3.6を使って簡単なラムダ関数を作成しようとしています。Pythonラムダ関数がKeyErrorを返します

リクエストクエリ文字列のparams内のuserId(DynamoDBの中の私の主キー)を取得し、アイテムがDBに存在する場合には200を返す必要がある機能は、ここで私はテストをやっている私のラムダ関数

import boto3 
import os 
from boto3.dynamodb.conditions import Key, Attr 

def lambda_handler(event, context): 

    userId = event["userId"] 

    dynamodb = boto3.resource('dynamodb') 
    table = dynamodb.Table(os.environ['Customers']) 
    items = table.query(
    KeyConditionExpression=Key('userId').eq(userId) 
) 

    return items["Items"] 

ですラムダ・インタフェースは、それが動作し、ポストマンからしようとか、API Gatewayを使用したときに正しいユーザーはしかし、それは次のようなエラーに

{ 
"errorMessage": "'userId'", 
"errorType": "KeyError", 
"stackTrace": [ 
    [ 
     "/var/task/index.py", 
     7, 
     "lambda_handler", 
     "userId = event["userId"]" 
    ] 
] 
} 
  • を返す返す私はここで何をしないのですか?
  • 「イベント」を理解するのに苦労していますが、ドキュメントにはPython という辞書がありますが、PostmanまたはAPI Gatewayから呼び出されたときに、その結​​果を実際に出力して実際には をデバッグできますか?
+1

'event'マッピングに''userId''という名前のキーがないようです。 'print'ing' event'を試して、そこに何かがあるかどうか確認してください。 –

+0

[Chalice](https://github.com/aws/chalice)を試しましたか?これは、これを設定する頭痛の多くを保存します。 – kichik

+0

json.dumpsをインポートしてからjson.dumps(イベント)を印刷する – jarmod

答えて

0

あなたはevent["userId"]を使用している、これはコードの上に、その後例えば

GET API : api/users/ 
Request Body payload: 

{ 
"userId":"1234" 
} 

を要求ペイロードを送信するが動作することを意味し、あなたがして

GET API :api/user/{userId} 

パスパラメータとしてあなたをuserIdをを送信すると仮定しますラムダ関数でアクセスできます

userId = (event['pathparameters']['userId']) 

printステートメントを追加して、より良い方が良いでしょう。

関連する問題