如何从AWS Lambda内部访问Dynamodb?

2024-10-01 04:55:42 发布

您现在位置:Python中文网/ 问答频道 /正文

如何从AWS Lambda函数内部读取Dynamodb记录?你知道吗

我正试图通过以下方式给get_item打电话:

import os
import boto3

def handler(event, context):
    id = event['id']
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('mytable')
    response = table.get_item(
        Key={
            'id': id,
        }
    )
    print('response:', response)
    item = response['Item']
    return {}

但是,当我通过Lambda测试工具运行测试时,它会失败,并出现以下错误:

{
  "errorMessage": "'Item'",
  "errorType": "KeyError",
  "stackTrace": [
    "  File \"/var/task/main.py\", line 33, in handler\n    item = response['Item']\n"
  ]
}

即使docsget_item应该返回一个包含Item字典的对象,它实际上返回:

{'ResponseMetadata': {'RequestId': 'DIDH3KVSPP1LU7O0TBLGP701QRVV4KQNSO5AEMVJF66Q9ASUAAJG', 'HTTPStatusCode': 200, 'HTTPHeaders': {'server': 'Server', 'date': 'Thu, 24 Oct 2019 03:15:42 GMT', 'content-type': 'application/x-amz-json-1.0', 'content-length': '2', 'connection': 'keep-alive', 'x-amzn-requestid': 'DIDH3KVSPP1LU7O0TBLGP701QRVV4KQNSO5AEMVJF66Q9ASUAAJG', 'x-amz-crc32': '2745614147'}, 'RetryAttempts': 0}}

为什么不提供Item?如何从Dynamo检索记录?你知道吗


Tags: lambdaimporteventidgetresponse记录table
1条回答
网友
1楼 · 发布于 2024-10-01 04:55:42

我测试了你的代码,效果非常好:

  • 首先,我用名为id的主键创建了一个DynamoDB表
  • 然后我在桌子上加了一些东西
  • 然后我运行了您的代码,并对我的表进行了更改:
import boto3

def handler(event, context):
    id = 'food'
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('stack')
    response = table.get_item(
        Key={
            'id': id,
        }
    )
    print('response:', response)
    item = response['Item']
    return {}

结果是:

response: {'Item': {'id': 'food', 'name': 'apple'}, 'ResponseMetadata': {'RequestId': '...', 'HTTPStatusCode': 200, 'HTTPHeaders': {'server': 'Server', 'date': 'Thu, 24 Oct 2019 04:38:35 GMT', 'content-type': 'application/x-amz-json-1.0', 'content-length': '49', 'connection': 'keep-alive', 'x-amzn-requestid': '...', 'x-amz-crc32': '...'}, 'RetryAttempts': 0}}

注意返回数据前面的Item。你知道吗

它不适用于您的一些可能原因:

  • 您收到了KeyError。检查主键是否为id,以匹配get_item()调用中的代码。你知道吗
  • 表中可能没有任何将id设置为所请求值的条目。当我尝试此操作时,得到的错误消息与您收到的完全相同。因此,请检查代码对id = event['id']所做的操作,因为它可能没有返回您期望的值。你知道吗

相关问题 更多 >