【问题标题】:How to access Dynamodb from inside AWS Lambda?如何从 AWS Lambda 内部访问 Dynamodb?
【发布时间】:2019-10-24 12:43:28
【问题描述】:

如何从 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 中检索记录?

【问题讨论】:

    标签: python amazon-web-services aws-lambda amazon-dynamodb boto3


    【解决方案1】:

    我测试了您的代码,它运行良好:

    • 首先,我创建了一个主键名为 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'] 的作用,因为它可能没有返回您期望的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-08
      • 2019-11-07
      • 2021-11-24
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多