Python 3.6を使用して単純なLambda関数を作成しようとしています。
関数はリクエストクエリ文字列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"]
Lambdaインターフェイスでテストを行っているときは機能し、正しいユーザーを返しますが、Postmanから試行したりAPIゲートウェイを使用したりすると、次のエラーが返されます
{
"errorMessage": "'userId'",
"errorType": "KeyError",
"stackTrace": [
[
"/var/task/index.py",
7,
"lambda_handler",
"userId = event["userId"]"
]
]
}
event["userId"]
を使用しています。これは、たとえばリクエストペイロードを送信することを意味します
GET API : api/users/
Request Body payload:
{
"userId":"1234"
}
上記のコードは機能しますが、userIdをパスパラメータとして送信するとします。
GET API :api/user/{userId}
その後、ラムダ関数でアクセスできます
userId = (event['pathparameters']['userId'])
印刷ステートメントprint(event)を追加し、cloudwatchログのログを確認する