博图:ResourceNotFoundException Dynamodb

use*_*927 2 python-2.7 amazon-dynamodb boto3

我有一张表-user_details具有500个读/写容量+ 500个索引以及目前超过5k个项目。我正在基于用户名查询表,而且似乎一直在给我“ ResourceNotFoundException”-

ClientError: An error occurred (ResourceNotFoundException) when calling the Query operation: Requested resource not found
Run Code Online (Sandbox Code Playgroud)

user_details_db_client = boto3.resource(dynamo_string, us_west_2).Table(user_details)

def if_details_exists_for_user(username,region = None):
    time.sleep(1)
    result = None

    try:
            if region:
                    #result = user_details_db_client.scan(FilterExpression=Attr('username').eq(username) & Attr('region').eq(region))
                    result = user_details_db_client.query(IndexName = "username-index", KeyConditionExpression = Key('username').eq(username), FilterExpression=Attr('region').eq(region))
            else:
                    result = user_details_db_client.query(IndexName = "username-index", KeyConditionExpression = Key('username').eq(username))
                    #result = user_details_db_client.scan(FilterExpression=Attr('username').eq(username))

            if result and result['Items']:
                    logger.info("User {} exists in user_details table for region {}".format(username,region))

                    return (True, result['Items'])
            else:
                    return (False, FAILED)

    except Exception:
            logger.error("Caught exception : {} while getting data from user_details table".format(traceback.format_exc()))
            return (False, FAILED)
Run Code Online (Sandbox Code Playgroud)

我可以确认该表存在并且其他脚本正在使用它。我尝试在文档或某处找到内容,但无法得到具体的推论。

我该如何调试?还是我完全错过了什么?

小智 8

我将检查该表是否实际存在。boto3库在这里具有令人惊讶的行为。这行:

user_details_db_client = boto3.resource(dynamo_string, us_west_2).Table(user_details)
Run Code Online (Sandbox Code Playgroud)

即使表不存在也会成功。(明智地命名,请注意,这是“资源”,而不是“客户”)。

要查看存在哪些表,请尝试查看可用的子资源,或使用“ list_tables”命令

boto3.resource(dynamo_string, us_west_2).get_available_subresources()

boto3.client(dynamo_string, us_west_2).list_tables()
Run Code Online (Sandbox Code Playgroud)

在这里,您将能够查看要查找的表是否存在。


cry*_*bhu 6

我遇到此错误是因为我连接到了错误的区域,因此请确保连接到您的表所在的正确区域!

  • 第二个这个 要检查您的表区域,请转到表的概述选项卡并向下滚动到 Amazon 资源名称 (ARN) 字段。我的 ARN 以 arn:aws:dynamodb:us-east-2: 开头。这里“us-east-2”是我启动 boto3 客户端时需要经过的区域。 (2认同)