【发布时间】:2022-11-20 08:30:23
【问题描述】:
我有 2 个 Lambda,其中 1 个正在对 ddb 执行 batch_write 和 put_item。另一个 lambda 从第一个 lambda 执行 get_item(它具有 get_item 的权限)。
错误:
[ERROR] ParamValidationError: Parameter validation failed:
Invalid type for parameter Key.active_employee, value: jen, type: <class 'str'>, valid types: <class 'dict'>
Traceback (most recent call last):
File "/var/task/my_lambda/checks.py", line 100, in lambda_handler
response = ddb.get_item(TableName="testtable", Key={"active_employee": user})
拉姆达 1:
with gzip.open(response["Body"], "rt") as file:
try:
with table.batch_writer(overwrite_by_pkeys=["active_employee"]) as batch:
for active_users in file:
user_dict = json.loads(active_users)
manager = user_dict["manager"]
user = user_dict["user"]
if not manager:
continue
if not user:
continue
else:
batch.put_item(
Item={
"active_employee": user,
"mgr_email": mgr_email
},
)
logger.info("Loaded data into table %s.", table.name)
except ClientError:
logger.exception("Couldn't load data into table %s.", table.name)
raise
λ2
user = "jen"
ddb = boto3.client("dynamodb")
response = ddb.get_item(TableName="testtable", Key={"active_employee": user})
employee_data = json.loads(response["Item"])
if employee_data and employee_data["active_employee"] == user:
manager = employee_data["mgr_email"]
print(f"{user} is active")
print(f"{manager}")
else:
print("user not in ddb")
我期待进入 Lambda jen is active,然后是经理电子邮件。我不知道经理的价值。假设 DDB 中有一百万,我不能使用扫描或查询。我读过 get_item 在获取单个项目时要快得多。
- 如何修复错误?
- 如何将_item 获取为字典?
user = "jen"应该编成字典吗?语法是什么? - 在执行 get_item 时,我只能使用 pk 并期望也获得另一个密钥 (mgr_email)。我只能 get_item 用户,我需要它来为我查找该别名的经理电子邮件(如果存在)并返回两者。
【问题讨论】: